Spring Integration, comment puis-je passer entrant requête http via la passerelle sortante?
Je suis en train de mettre en œuvre une sorte de proxy dans le cadre de mon flux de données, je veux recevoir une http-request sur mon entrant passerelle et le passer à travers sortant de la passerelle. Je veux conserver tous les paramètres de chaîne de requête. Mon passerelles configuration est la suivante:
<int:channel id="searchRequestChannel" />
<int:channel id="searchReplyChannel" />
<int-http:inbound-gateway id="searchRequestInboundGateway"
supported-methods="GET"
request-channel="searchRequestChannel"
reply-channel="searchReplyChannel"
path="/services/normalization"
reply-timeout="50000"
/>
<int-http:outbound-gateway id="searchServiceGateway"
http-method="GET"
request-channel="searchRequestChannel"
url="http://localhost:8080/query"
extract-request-payload="false"
expected-response-type="java.lang.String"
reply-timeout="50000"
charset="UTF-8"
/>
J'attendais qu'il travail comme suit:
- Client, envoyez une demande à la passerelle entrante /services/normalisation:
OBTENIR /services/normalisation q=cat&exclude=noir
- Passerelle entrante reçoit la demande et l'envoyer par searchRequestChannel à la sortant passerelle.
- Sortant de la passerelle envoie toute la demande pour le service externe:
OBTENIR /de la requête q=cat&exclude=noir
Mais sur la pratique, sortant de la passerelle envoie vide demande qui ne contient pas de n'importe quelle requête arguments:
GET /query
Donc ma question, quelle est la façon la plus simple pour envoyer le http-demande qui a été acceptée sur la passerelle entrante par le biais de la passerelle sortante. En d'autres termes comment puis-je mettre en œuvre simple proxy par le printemps des outils d'intégration?
OriginalL'auteur masted | 2013-05-07
Vous devez vous connecter pour publier un commentaire.
C'est un peu de bidouille, mais fonctionne; la
DispatcherServlet
lie la demande pour le fil...et puis au départ, l'utilisation
Toutefois, cela ne fonctionne pas avec 2.2.x et versions antérieures, car la chaîne de requête est codé sur le départ (
foo=bar&baz=qux
devientfoo%3Dbar%26baz%3Dqux
). Dans la version 3.0, nous avons ajouté la possibilité de ne pas encoder les URI à l'aide d'un attribut à l'aide deencode-uri="false"
. Ce n'est pas encore disponible dans une version, mais il est disponible en3.0.0.BUILD-SNAPSHOT
.EDIT:
Ci-dessus est une solution globale qui fonctionne pour toutes les chaînes de requête; si vous connaissez les paramètres réels, une autre solution serait d'extraire chaque paramètre séparément et de reconstruire la chaîne de requête sur le départ...
Sur le trafic côté, il serait mieux si nous avons offert à la chaîne de requête comme une classe de première variable d'expression
#queryString
.N'hésitez pas à ouvrir un "Amélioration" JIRA Problème
Désolé de mon erreur, je l'ai testé avec une maquette HttpRequest; laissez-moi voir si je peux trouver un autre travail autour.
J'ai mis à jour ma réponse avec une solution générale qui nécessite Printemps Intégration 3.0, et une autre solution si vous connaissez les paramètres de la requête.
Je vous remercie pour votre temps et votre aide! Je n'ai de réponse post avec ma propre solution de rechange. Si vous avez des ajouts ou des suggestions, je serais heureux de les entendre. 🙂 P. s.: Je vais attendre SI 3.0, greate travail, continuez comme ça les gars. 🙂
OriginalL'auteur Gary Russell
Ma propre solution de contournement solution est d'utiliser un transformateur qui transforme les paramètres dans le charge utile du message (carte des paramètres de chaîne de requête) pour préparer les chaîne de requête et l'utilisation d'un url expression dans un sortant de la passerelle pour éviter une chaîne de requête d'encodage:
PayloadToQueryStringTransformer classe est:
OriginalL'auteur masted