2017-09-15 4 views
0

Je me suis cassé la tête dessus pendant quelques jours maintenant. Ce petit sniplet fonctionne bien (en utilisant Jersey 2.26-b03 sur Tomcat).Jersey REST GET fonctionne mais pas mis. La méthode HTTP spécifiée n'est pas autorisée pour la ressource demandée.

@GET 
@Path("/{code}") 
public Response update(@PathParam("code") String code) { 
    System.out.println("!!!!!!!"); 
    return Response.status(Response.Status.OK).build(); 
} 

curl -i -X GET http://localhost:18270/nyx/rest/servervirtueel/SVM0000 
HTTP/1.1 200 OK 

Suivi par un tas de traceur Jersey activé. Mais si je ne change l'EEG à un PUT (exactement la même méthode, il suffit de changer l'annotation):

@PUT 
@Path("/{code}") 
public Response update(@PathParam("code") String code) { 
    System.out.println("!!!!!!!"); 
    return Response.status(Response.Status.OK).build(); 
} 

curl -i -X PUT http://localhost:18270/nyx/rest/servervirtueel/SVM0000 
HTTP/1.1 405 Method Not Allowed 

Suivi par HTML me disant que « La méthode HTTP spécifiée est pas autorisée pour la ressource demandée ». Cependant, POST fonctionne (en changeant à nouveau l'annotation).

+0

J'espère que vous recompilez le code après avoir changé l'annotation '@ PUT' et l'avoir déployée sur tomcat !. Pour moi ça marche bien avec le maillot '2.26' sur Tomcat' 8.5.11'. –

+0

Oui, je suis d'accord que ce n'est pas reproductible avec les informations que vous avez fournies. –

+0

Bien sûr, mille fois déjà. Et bien sûr, en changeant le POST après cela a fonctionné, donc je sais ce que je fais. J'utilise Tomcat 7.0.75. Mais je l'ai pris un peu plus loin et écrit une servlet vanilla remplaçant doGet doPut doPost et doDelete. Là aussi PUT et DELETE ne fonctionnent pas, les autres le sont. Donc, il semble que ce soit une chose Tomcat, pas Jersey. Mais définir la méthode http de readonly et de web-resource-collection ne le résout pas. Et pour le moment, c'est toute l'information que j'ai, je voudrais savoir plus que ce que je vois. – tbeernot

Répondre

0

Il s'est avéré que la vanne de la liste blanche de la méthode OWASP était configurée au niveau Tomcat (Catalina) pour permettre uniquement GET et POST; C'est une webapp qui ne contient que des services SOAP jusqu'à maintenant. Vous ne le voyez pas dans web.xml ou server.xml, mais dans Catalina/localhost/webappname.xml.