Le corps d'un message écrivain de type Java, la classe myPackage.B, et le type MIME application/octet-stream, n'a pas été trouvé
Je suis nouveau à webservices RESTful et a essayé de mettre à jour mon @OneToMany
relation d'un client autonome de l'application, mais je ne suis pas en mesure de le faire. Je suis en utilisant le Maillot de mise en œuvre de JAX-RS qui est livré avec Glassfish 3.1.1.
J'ai une classe A
qui a un @OneToMany
relation avec la classe B
.
MyRestClient
est mon client autonome qui appelle mon service web RESTful qui a été déployé sur Glassfish 3.1.1.
MyRestClient.java
public class MyRestClient {
public static void main(String[] args) {
Client client = Client.create();
WebResource resource = client.resource("http://localhost:8080/myapp/rest/a/update/123");
B b1 = new B("debris");
ClientResponse response = resource.put(ClientResponse.class, b1);
System.out.println(response.getEntity(A.class).getTitle() + " has " + response.getEntity(A.class).getBList().size() + " Bs.");
}
}
AResource
est un EJB session bean qui je suis en utilisant comme Reposant webservice.
AResource.java
@Stateless
@Path("/a")
public class AResource {
@EJB
private AManager aManager;
@PUT
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
@Path("/update/{id}")
public Response updateA(B b, @PathParam("id") int id) {
A a = aManager.findAById(id);
a.addB(b);
return Response.status(Status.OK).entity(a).build();
}
}
Quand je lance le client, je reçois le message d'erreur suivant:
com.soleil.jersey.l'api.client.ClientHandlerException: le corps d'Un message écrivain de type Java, la classe myPackage.B, et le type MIME application/octet-stream, n'a pas été trouvé.
Suivantes sont les objets du domaine autonome dans mon application client qui est un appel à la AResource
EJB session bean qui je suis en utilisant le service web RESTful.
A.java
@XmlRootElement
public class A implements Serializable{
private List<B> bList = new ArrayList<B>();
public List<B> getBList() {
return bList;
}
//remaining code
}
B.java
public class B implements Serializable {
private String text;
private A a;
@XmlTransient
public A getA() {
return a;
}
public void afterUnmarshal(Unmarshaller u, Object parent) {
this.a = (A) parent;
}
//remaining code
}
Quelqu'un pourrait-il m'aider à comprendre pourquoi ce qui se passe et comment je dois résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Dans votre code client, vous ne spécifiez pas le type de contenu des données que vous envoyez - donc, Jersey, n'est pas en mesure de localiser le droit MessageBodyWritter pour sérialiser l'b1 objet.
Modifier la dernière ligne de votre méthode principale comme suit:
Et ajoutez @XmlRootElement annotation à la classe B sur le serveur ainsi que le côté client.
@XmlRootElement
dans un@OneToMany
relation? J'ai fait le suggère changé u m'a demandé de faire et maintenant je suisException in thread "main" com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class myPackage.A, and Java type class myPackage.A, and MIME media type text/html was not found
. Est@Consumes(MediaType.APPLICATION_XML)
pas suffisant pour le Jersey à savoir la représentation qu'il va consommer?MyRestClient.java
. DeSystem.out.println(response.getEntity(A.class).getTitle() + " has " + response.getEntity(A.class).getBList().size() + " Bs.");
déclaration. Merci.A message body reader for Java class myPackage.B, and Java type class myPackage.B, and MIME media type application/xml was not found
. Je suis totalement perdu maintenant.org.xml.sax.SAXParseException: Premature end of file.
erreur côté client. L'erreur précédente sur le côté serveur est allé.System.out.println(response.getEntity(A.class).getTitle() + " has " + response.getEntity(A.class).getBList().size() + " Bs.");
déclaration deMyRestClient.java
.System.out.println(response.getEntity(String.class));
etSystem.out.println(response.getEntity(Movie.class).getTitle());
mais pasSystem.out.println(response.getEntity(Movie.class).getTitle() + " has " + response.getEntity(Movie.class).getReviewList().size() + " reviews.");
. Pourriez-vous m'aider à comprendre pourquoi je ne peux pas appelergetEntity()
deux fois? U pourrait suggérer les bonnes ressources sur le sujet?ClientResponse response = resource.put(ClientResponse.class, b1);
fonctionne aussi bien.Inclure ce dépendances dans votre POM.xml et exécuter Maven -> mise à Jour
Vous devez spécifier le
@Provider
que@Produces(MediaType.APPLICATION_XML)
de B.classUn ajouter le forfait de votre
MessageBodyWriter<B.class>
à votre/WEB_INF/web.xml
:@Provider
que je n'ai pas l'accès à ce code à l'heure actuelle. Vous permettra de savoir. Merci.Que vous avez à faire deux choses pour supprimer cette erreur.
@xmlElement
de la cartographie dans le modèleLe côté client:
response = resource.type(MediaType.APPLICATION_XML).put(ClientResponse.class, b1); //consume
ou
response = resource.accept(MediaType.APPLICATION_XML).put(ClientResponse.class, b1); //produce
Ajoutant une référence à:
Aussi longtemps que l'ajout de clientConfig.getFeatures().mettre(JSONConfiguration.FEATURE_POJO_MAPPING, true); sur client création résolu le problème pour moi:
Cela peut aussi arriver si vous avez récemment mis à niveau Ant. J'ai été en utilisant Ant 1.8.4 sur un projet, et mise à niveau Ant à 1.9.4, et a commencé à obtenir cette erreur lors de la construction d'un pot de graisse à l'aide de Ant.
La solution pour moi a été de revenir en arrière pour Ant 1.8.4 pour la ligne de commande et Eclipse en utilisant la procédure détaillée ici
j'ai été confrontée au même problème pour une méthode get, j'étais de retour un "int" pour le @méthode get Étrangement quand j'ai changer le type de retour de la Chaîne de l'erreur a disparu.Essayez-le et si quelqu'un connaît la logique derrière elle de bien vouloir le partager
Cela a résolu mon problème.
http://www.markhneedham.com/blog/2012/11/28/jersey-com-sun-jersey-api-client-clienthandlerexception-a-message-body-reader-for-java-class-and-mime-media-type-applicationjson-was-not-found/
Y compris les dépendances suivantes dans votre POM.xml et exécuter Maven -> mise à Jour également résolu mon problème.
Cela se produit également si vous êtes absent un vide constructeur public pour l'Entité (peut-être pour le JSON, XML, etc)..
Assurez-vous que tous ces libs sont dans votre chemin de classe:
Ajouter "Pojo Cartographie" et "Jackson" Fournisseur de la maillot de config du client:
Ce résoudre à moi!