3 votes

Apache Camel REST DSL 405 Méthode non autorisée

Je développe actuellement une application REST avec Apache Camel (en utilisant camel-spring) et je rencontre un comportement déroutant. J'ai un ensemble de points de terminaison définis dans REST DSL, certains sont simplement des requêtes de proxy vers un autre serveur, et d'autres sont transmis à des routes que j'ai définies pour l'agrégation de données. Le DSL ressemble à ceci :

L'idée est que toutes les demandes sans URI correspondant exactement soient envoyées en proxy vers un autre système (qui n'est pas Apache Camel). Cela m'évite d'avoir à écrire une définition pour chaque API REST sur l'autre système (il y en a beaucoup).

Tout fonctionnait bien, jusqu'à ce que j'ajoute les deux demandes avec {custId} dans l'URI. Ces demandes fonctionnent bien, mais chaque fois que j'essaie une URI qui devrait passer en proxy, je reçois un 405 Method Not Allowed.

MODIFIER: J'aurais également dû mentionner que j'utilise Jetty comme composant REST. Camel fonctionne en standalone, en utilisant org.apache.camel.spring.Main pour le démarrer. Je l'appelle avec Postman à ce stade, et la réponse 405 semble provenir de Jetty/Camel.

La configuration REST ressemble à ceci (le gestionnaire de sécurité utilise le Jetty BasicAuthenticator) :

Les demandes de proxy sont toutes envoyées à la route direct:proxyOut, qui ressemble à ceci :

  Une simple route sortante pour proxyer les demandes REST.

L'intention est que tout ce qui se trouve après /v1 dans l'URI soit transmis dans la demande en proxy. J'ai vérifié avec Wireshark et la demande n'est pas envoyée en proxy. Si je supprime les routes avec {custId} dans le chemin, tout fonctionne bien.

Fais-je quelque chose de mal ou s'agit-il d'un bug dans camel/camel-spring ?

1voto

Robert Hillier Points 16

Insecte chameau, dont les détails peuvent être trouvés ici:

https://issues.apache.org/jira/browse/CAMEL-11951

0voto

Claus Ibsen Points 16878

Il n'est pas clair qui renvoie le code 405, est-ce le backend proxy que vous appelez, ou bien est-ce qu'il n'appelle pas du tout ce backend.

Cependant, lorsque vous faites une requête HTTP via Camel, vous pouvez avoir besoin de supprimer certains en-têtes CamelHttp* qui peuvent interagir.

Donc essayez d'ajouter

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X