3

I'm doing this :

WebResource resource = client.resource(urlStr); 
resource.accept(MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_XML_TYPE);
GenericType<List<EMailInformations>> genericType = new GenericType<List<EMailInformations>>() {};
List<EMailInformations> response = null; 
try{ 
    response = resource.get(genericType); 
} catch (UniformInterfaceException ue) { 
    ClientResponse clientResponse = ue.getResponse(); 
}

Class EMailInformations

@XmlRootElement
public class EMailInformations {
    private long id;

    public EMailInformations(){

    }

    public EMailInformations(long id) {
        super();
        this.id = id;
    }
        //getters & setters ...
}

Some of the JSON response

{"cn":[{"id":"302","l":"7","d":1308239209000,"rev":14667,"fileAsStr":"TAICHIMARO, Marouane","_attrs":{"lastName":"TAICHIMARO","imAddress1":"other:......

I got this error :

21 juin 2011 16:56:01 com.sun.jersey.api.client.ClientResponse getEntity
GRAVE: A message body reader for Java class java.util.List, and Java type java.util.List<fr.liberacces.pool.liferay.connecteur.modele.EMailInformations>, and MIME media type text/plain was not found
21 juin 2011 16:56:01 com.sun.jersey.api.client.ClientResponse getEntity
GRAVE: The registered message body readers compatible with the MIME media type are:
text/plain ->
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy

But I got this error : GRAVE: A message body reader for Java class java.util.List, and Java type ... was not found

This is firebug trace :

Réponsevoir le code source
Date    Wed, 22 Jun 2011 10:36:19 GMT
Content-Encoding    gzip
Content-Length  634
Via 1.1 zimbra.server.com
Keep-Alive  timeout=15, max=100
Connection  Keep-Alive
Content-Type    text/plain
Requêtevoir le code source
Host    zimbra.server.com
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Cookie  ZM_AUTH_TOKEN=0_01e07d9cb12b86ef4675604362137c08c1d9fd0d_69643d33363a61343831353331382d336436362d343766632d386662393d3133613638633661323165393b6578703d31333a313330383832313935333436393b747970653d363a7a696d6172613b; JSESSIONID=1eb0ksxao39jj
Brendan Long
  • 49,408
  • 17
  • 130
  • 172
Marouane Gazanayi
  • 4,733
  • 6
  • 35
  • 55

3 Answers3

7

I ran into the same problem. I could get somewhat further by using the tips from 'yves amsellem'. For me I could fix this using the POJO mapper feature. (They need to be enabled on server AND client side. Also the library jersey-json is necessary to get this to work)

ClientConfig config = new DefaultClientConfig();
..
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
..
Client client = Client.create(config);

I hope this helps you further along, even though the question is old.

Djarshi
  • 93
  • 1
  • 11
  • The right way to enable this feature on the server is to include `org.codehaus.jackson.jaxrs` in the list of packages for Jersey servlet, see details [here](http://stackoverflow.com/questions/12883287/how-to-easily-use-jackson-for-jersey). – Alexander Ryzhov Jun 10 '13 at 18:01
4

By default, the server seems to produces a content-type text/plain. Careful, you're negotiating a JSON content-type but you don't pass it to the call:

WebResource resource = client.resource(url); 
Builder builder = resource.accept(MediaType.APPLICATION_JSON); 
GenericType<List<EMailInformations>> genericType = 
  new GenericType<List<EMailInformations>>() {};

List<EMailInformations> response = builder.get(genericType); 

First, you define the path, then Jersey gives you a builder to add content-type negotiation, headers, query parameters, etc. If you call the resource directly, you lose those parameters.

yves amsellem
  • 6,758
  • 4
  • 39
  • 66
-3

I ran into similar error and it turned out that my client does not have http connection to my server.

So use Linux curl command, or a browser, to read the response body, this may give you more insight about the so generic error.

  • This is not an answer to the question, but a suggestion or follow-up that should be given as a comment to the question. – dgilperez Feb 09 '15 at 17:12