Maillot UniformInterfaceException essayer de proxy pour se REPOSER service de POSTE
- Je continuer à recevoir une 406 de la réponse HTTP, lorsque j'essaie d'exécuter un code structuré de cette façon. J'ai essayé de restructuration le code et les entrées de nombreuses fois, mais j'ai toujours cette erreur, et j'ai obtenu au point que je ne sais même pas trop ce que pour déboguer. L'exception semble indiquer que la post()
méthode n'est pas la fourniture de la @FormParam
s dans le format souhaité, mais comme vous pouvez le voir le .accept(MediaType.APPLICATION_FORM_URLENCODED)
et la @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
en effet correspondre.
Je suis en utilisant l'add-on Firefox HTTPRequester de passer dans le @FormParam
s et ont veillé à ce que je suis passer par le Type de Contenu (application/x-www-form-urlencoded
). Je suis à court de choses à vérifier. Quelqu'un a une idée?
Le Service De Proxy
Client client = Client.create();
WebResource service = client.resource(myURL);
Form form = new Form();
form.add("value1", value1);
form.add("value2", value2);
form.add("valueN", valueN);
String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);
Le Service
@POST
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/theService")
public String theService(
@FormParam("value1") String value1,
@FormParam("value2") String value2,
@FormParam("valueN") String valueN) {
String returnValue = null;
/*
* Do Stuff
*/
return returnValue;
}
L'Exception
com.sun.jersey.api.client.UniformInterfaceException: POST http://theURL/theService returned a response status of 406
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:563)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:69)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:499)
OriginalL'auteur asteri | 2012-09-19
Vous devez vous connecter pour publier un commentaire.
UniformInterfaceException est juste un fourre-tout d'exception avec un mauvais nom (elle est ainsi nommée parce que c'est une exception qui fournit une interface uniforme, peu importe le message d'erreur). Il s'agit essentiellement d'une IOException jetés par quoi que ce soit à Jersey. L'erreur est la 406 Inacceptable:
Ici vous êtes en train de dire que vous acceptez
MediaType.APPLICATION_FORM_URLENCODED
:Mais votre service produit
MediaType.APPLICATION_XML
:Depuis votre serveur ne peut pas produire tout le contenu que le client dit qu'il va accepter, il renvoie une erreur 406.
Le plus probable, vous êtes un sens à définir
WebResource.type
, pasaccept
:accept()
méthode de dicter ce que le service devrait retour, pas ce qu'elle devrait accepter.Oui,
accept
envoie leAccept
en-tête, qui indique le type de résultat que le client acceptera. Pour indiquer le type de contenu que vous envoyez, vous devez appelertype
(ce qui définit laContent-Type
en-tête).Eh bien, je vous remercie beaucoup, monsieur! J'ai vraiment pensé que c'était plus compliqué qu'une API simple malentendu. 🙂
Malheureusement, je suis encore à la réception de la même Exception après avoir essayé un certain nombre de différentes permutations sur cette solution. Exemples de signalisation dans la question ci-dessus.
Votre dernière version devrait certainement travailler. Est-il possible que le nouveau code n'a pas été déployé sur le serveur? J'ai eu des problèmes dans le passé où j'avais besoin de faire un redémarrage complet+redéployer pour que les choses fonctionnent correctement dans Glassfish.
OriginalL'auteur Brendan Long