2012-11-26 2 views
2

Question relative à Request parameters are dropped in Tomcat
Servet demande a perdu le params

... Eh bien, apparemment, même le plus simple demande comme ci-dessous sur certains serveurs ont perdu les paramètres et certains, il est OK. La valeur retournée est (zéro).

Mise à jour: la demande connecté par AccessLogValve contient le paramètre

127.0.0.1 - - [26/Nov/2012:03:04:58 -0800] "POST /api/get-retrieve?x=y HTTP/1.1" 200 16 

Alors, sans doute le problème est quelque part dans le Tomcat jeter les params ...

+0

Ce n'est pas comme ça que l'on pose des questions sur StackOverflow. Code postal et une configuration cassée, afin que nous puissions l'exécuter et comprendre ce qui ne va pas. – Raffaele

+0

C'est tout le code que j'ai, c'est un simple GET qui a perdu les params. Je suis à la recherche d'une aide et d'une direction, pas seulement pour une solution directe. – urir

+0

Êtes-vous aveugle ou quoi? Le journal indique 'POST/api/get-retrieve HTTP/1.1'. Vous avez même baissé ma réponse. Vous continuez à envoyer un POST à ​​une méthode annotée avec '@ GET' et demandez pourquoi cela ne fonctionne pas ... – Raffaele

Répondre

3

j'avais cette fois, après une longue enquête, il est avéré que le problème était dans la définition du connecteur dans le server.xml de Tomcat:

<Connector connectionTimeout="20000" maxHttpHeaderSize="9000" maxParameterCount="100" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

Regardez la définition de « maxParameterCount », en Dans notre cas, il a été mis à 0, ce qui a entraîné la suppression de tous les paramètres de demande.

+0

MERCI!Ça a marché! maxParameterCount a été mis à 0 pour une raison quelconque ... – urir

-1

Basé sur le code affiché dans la question liée

wr.type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, multipart); 

le problème peut être que vous annoter votre méthode avec @GET, mais en réalité votre client émet un POST. Peut-être que certaines implémentations de JAX-RS acheminent toujours la requête vers votre méthode mais ne parviennent pas à extraire les paramètres en raison de la non-concordance des méthodes. L'algorithme est en effet très différent une fois que vous comparez ce que GET ressemble à:

GET /path/to/resource?id=foobar HTTP/1.1 
Host: example.com 

et POST:

POST /path/to/resource HTTP/1.1 
Host: example.com 
Content-Type: multipart/form-data, boundary=A9zfsdf0x;9ad 

--A9zfsdf0x;9ad 
content-disposition: form-data; name="id" 

foobar 

Alors, lorsque vous concevez votre API RESTful, vous devez choisir avec soin la méthode, et utilisez-le à la fois sur le client et sur le serveur.

+0

Salut, dans la question liée, le POST va à POST. Dans ce petit exemple c'est un GET exécuté par GET ... – urir

+0

Alors comment peut-on reproduire votre problème? Il est très peu probable que le monde entier fonctionne sur JavaEE et vous avez repéré un bug concernant l'analyse syntaxique ... – Raffaele

+0

Je ne suis pas sûr, je cherche de l'aide ici. Il y a 3 hôtes dans mon bureau ayant le problème et 3 autres sont OK ... – urir

0

Assurez-vous de ne pas transmettre le httpServletRequest à un autre thread.

0

Nous avons rencontré ce problème et il s'est avéré que nous autorisions plusieurs threads à accéder à l'objet HttpServletRequest. Ceci n'est pas autorisé. Ce n'est pas sûr pour les threads.

Questions connexes