Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Error y no entiendo porque....

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class usuarios.QuienData, and Java type class usuarios.QuienData, and MIME media type application/json was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:550)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:684)
at com.sun.jersey.api.client.WebResource.get(WebResource.java:191)

este es el código : (creo el error lo da en esta línea : "quienData = webResource.path("json").path(ip).get(WhoisData.class);" pero no entiendo que debo hacer para solucionarlo.

public static QuienData getQuien(final String ip) {
QuienData quienData = null;
if (ip != null && !ip.isEmpty() && pattern.matcher(ip).matches()) {
try {
quienData = webResource.path("json").path(ip).get(WhoisData.class);
} catch (UniformInterfaceException ex) {
final ClientResponse clientResponse = ex.getResponse();
final String errorCode = " Web Service Response Error, code: ".concat(Integer.toString(clientResponse.getClientResponseStatus().getStatusCode()));
final String errorDate = " Web Service Response Error, date :".concat(clientResponse.getResponseDate().toString());
final String errorLocation = " Web Service Response Error, location: ".concat(clientResponse.getLocation().getHost());
Logger.log(Level.SEVERE, INSTANCE.getClass().getName() + "->" + Thread.currentThread().getStackTrace()[1].getMethodName().concat(errorCode).concat(errorDate).concat(errorLocation), ex);
} catch (ClientHandlerException ex) {
Logger.log(Level.SEVERE, INSTANCE.getClass().getName() + "->" + Thread.currentThread().getStackTrace()[1].getMethodName(), ex);
}
}
return quienData;
}

noviembre 17, 2015 | Registered Commenterdmorales

Tomé la linea que marcaste como posible causante del error, no voy a chequear todo el código ni loco.

quienData = webResource.path("json").path(ip).get(WhoisData.class);

No veo la inicialización la variable webResource, la cual posiblemente sea del tipo WebResource, el cual tiene un constructor donde pasas la uri (Todo esto voy a presuponer que lo hiciste en algún momento)

Client client = Client.create();
WebResource webResource = client
.resource("http://localhost:8080/Example/rest");

Por lo que veo en tu código estás seteando dos veces el path, primero "json" y luego "ip".
En primer lugar si lo que quieres es pasar la ip de tu servicio, deberías completar la uri, tal cual el código anterior, en donde vas a necesitar el context-root de tu servicio, y el prefijo (si es que definiste alguno distinto a /* en el servlet mapping).
Si tu intención con "json" es setear el content-type, deberías de hacerlo d la siguiente forma

resource.accept("applitaciton/json")

Si la intención era setear el path del servicio, lo estabas haciendo bien (solo webResource.path("json"))

Como lo resolvería yo:

Client client = Client.create();
WebResource webResource = client
.resource("http://tuIp:8080/tuContext/tuPrefijo");
ClientResponse response = webResource.path("json")
.get(WhoisData.class);

noviembre 19, 2015 | Unregistered CommenterChavitoDel8

Perdón, corrijo error.
"tipo WebResource, el cual tiene un constructor donde pasas la uri.."
Client posee un metodo en el cual pasamos la uri como argumento y nos devuelve el WebResource.
https://jersey.java.net/nonav/apidocs/1.17/jersey/com/sun/jersey/api/client/Client.html

noviembre 19, 2015 | Unregistered CommenterChavitoDel8

desde ya gracias, y si hice y hago exactamente lo que comentas, y me he dado cuenta algo cuando ejecuto la aplicación desde Netbeans anda lo mas bien, ahora cuando ejecuto desde fuera del Netbeans generando el .jar no funciona, no hace lo que debe hacer, se ve que se pierde alguna referencia o no se porque pasara eso.

noviembre 19, 2015 | Registered Commenterdmorales

este es todo el código que utilizo :

private static final WebResource webResource;
private static final Pattern pattern;

static {
webResource = Client.create().resource("http://freegeoip.net");
webResource.accept(MediaType.APPLICATION_JSON);
pattern = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
}


/**
<p/>
@param ip
<p/>
@return
*/
public static QuienData getWhois(final String ip) {
QuienData quienData = null;
if (ip != null && !ip.isEmpty() && pattern.matcher(ip).matches()) {
try {
quienData = webResource.path("json").path(ip).get(QuienData.class);
} catch (UniformInterfaceException ex) {
final ClientResponse clientResponse = ex.getResponse();
final String errorCode = " Web Service Response Error, code: ".concat(Integer.toString(clientResponse.getClientResponseStatus().getStatusCode()));
final String errorDate = " Web Service Response Error, date :".concat(clientResponse.getResponseDate().toString());
final String errorLocation = " Web Service Response Error, location: ".concat(clientResponse.getLocation().getHost());
Logger.log(Level.SEVERE, INSTANCE.getClass().getName() + "->" + Thread.currentThread().getStackTrace()[1].getMethodName().concat(errorCode).concat(errorDate).concat(errorLocation), ex);
} catch (ClientHandlerException ex) {
Logger.log(Level.SEVERE, INSTANCE.getClass().getName() + "->" + Thread.currentThread().getStackTrace()[1].getMethodName(), ex);
}
}
return quienData;
}

noviembre 19, 2015 | Registered Commenterdmorales