Erreur lors de la tentative de convertir en JSON pour POJO à l'aide de Jersey
Je suis en train de faire ceci :
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();
}
Classe EMailInformations
@XmlRootElement
public class EMailInformations {
private long id;
public EMailInformations(){
}
public EMailInformations(long id) {
super();
this.id = id;
}
//getters & setters ...
}
Certains de la réponse JSON
{"cn":[{"id":"302","l":"7","d":1308239209000,"rev":14667,"fileAsStr":"TAICHIMARO, Marouane","_attrs":{"lastName":"TAICHIMARO","imAddress1":"other:......
J'ai eu cette erreur :
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
Mais j'ai eu cette erreur : GRAVE: le corps d'UN message reader pour la classe Java java.util.Liste et type Java, ... n'a pas été trouvé
C'est 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
Ton code me semble bon. Pouvez-vous offrir à l'ensemble de HTTP laisser de trace? Le type de contenu semble être text/plain (même si elle propose effectivement JSON texte). Attention:
Je pense que c'était le problème, text/plain, Zimbra est WS ne sont pas bons, ils ne fournissent pas de bonnes réponses... je suis à l'analyse de la réponse json JSON à l'aide de la bibliothèque. Thnx beaucoup.
Ce n'est pas une solution: regardez ma réponse
Où est la solution ???
Pris un peu plus de temps que je pense. Il y est.
resource.accept
est pas nulle.Je pense que c'était le problème, text/plain, Zimbra est WS ne sont pas bons, ils ne fournissent pas de bonnes réponses... je suis à l'analyse de la réponse json JSON à l'aide de la bibliothèque. Thnx beaucoup.
Ce n'est pas une solution: regardez ma réponse
Où est la solution ???
Pris un peu plus de temps que je pense. Il y est.
OriginalL'auteur Marouane Gazanayi | 2011-06-21
Vous devez vous connecter pour publier un commentaire.
Par défaut, le serveur semble produit un type de contenu
text/plain
. Attention, vous êtes à la négociation d'un contenu JSON-type, mais vous ne le transmettent pas à l'appel:Tout d'abord, vous définissez le chemin d'accès, puis Jersey vous donne un constructeur pour ajouter un type de contenu de la négociation, en-têtes, les paramètres de la requête, etc. Si vous appelez la ressource directement, vous perdez l'ensemble de ces paramètres.
S'il vous plaît, donnez-moi la trace HTTP (Navigateur Web pouvez imprimer ceux-ci, si vous ne savez pas comment faire, demandez). Peut-être que les services que vous demandez a obtenu le contenu spécifique de type.
Un exemple de travail en ligne, c'est encore mieux 😉
J'ai changé la question, il y a un Firebug trace il y
Prise en JSON dans le navigateur signifie qu'il n'est pas content-type text/html ou application/xml produit par le service. Que cette des services de produit JSON par défaut. Peut-être qu'il ne montre pas un bon type de contenu. Semble étrange.
OriginalL'auteur yves amsellem
Je suis tombé sur le même problème. J'ai pu obtenir un peu plus loin en suivant les conseils de "yves amsellem'.
Pour moi, je pourrais corriger cela en utilisant le POJO mappeur de fonctionnalité. (Ils doivent être activés sur le serveur ET côté client. Aussi la bibliothèque jersey-json est nécessaire pour obtenir que cela fonctionne)
J'espère que cela vous aide un peu plus loin, même si la question est ancienne.
org.codehaus.jackson.jaxrs
dans la liste des packages pour le Jersey servlet, voir les détails ici.OriginalL'auteur Djarshi
J'ai couru dans l'erreur semblable et il s'est avéré que mon client ne dispose pas de connexion http vers mon serveur.
Donc l'utilisation de Linux commande curl, ou un navigateur, à lire le corps de la réponse, cela peut vous donner une meilleure idée sur le générique d'erreur.
OriginalL'auteur Song X. Gao