I'm using a header-enricher in spring integration to add some info to message header.
<int:header-enricher input-channel="inboundReqOutboundChannel"
output-channel="validRequestChannel">
<int:header name="original-payload" ref="messageCreator"
method="reqHeaderEnricher"></int:header>
</int:header-enricher>
After the header is enriched, the request message is passed on as below.
header-enricher --> channel --> jmsOutboundgateway
Then the response message flow is as below.
jms-message-driven-adapter --> service-activator --> channel -->
header-filter --> channel --> from here to jmsOutboundgateway's reply destination
The header-filter in response message flow is as below
<int:header-filter input-channel="headerFilterChannel"
header-names="original-payload" output-channel="responseOutChannel" />
But the response message is still having the original-payload header even after passing the header-filter.
Any additional configuration need to be done for header-filter to work properly?
Please point me the correct approach.
Many thanks for suggestions!
Debug Logs:
After the message passes the header filter in responseFlow:
header-filter --> intermediateRespOutChannel --> jmsOutboundAdapter --> to jmsOutBoundGateway
The original-payload header is removed when the message passes the intermediateRespOutChannel after the header-filter.
2015-07-25 17:07:14,306 DEBUG [org.springframework.integration.channel.DirectChannel] preSend on channel 'headerFilterChannel', message: GenericMessage [payload=javax.xml.bind.JAXBElement@e7e6f9, headers={transaction_id=WSG91075596120150725170705797, sequenceNumber=1, sequenceSize=1, WsGwCorrelationID=5c57f681-9b08-4c6f-8bdb-c400dd5299a2, priority=4, jms_timestamp=1437824232246, uri=http://localhost:8082/OnlineSOAPBinding/soapui/OnlineReqSOAPBinding, ffp=AB, sendingsys=AB, jms_redelivered=false, OutboundRetroCorrelationKey=520a0ea3-465c-4b92-aa4c-ed32703aae5e, jms_replyTo=queue://PAI_RES_INTER_OUTQ, ws_soapAction=processRequest, original-payload=SomeValueFromRequest, id=d8af82e0-3555-0df9-7c8a-ce082c2e7ec7, jms_messageId=ID:01HW370406-53356-1437823659837-1:2948:1:1:1, receivingsys=SZ, timestamp=1437824233993}]
2015-07-25 17:07:14,306 DEBUG [org.springframework.integration.transformer.MessageTransformingHandler] org.springframework.integration.transformer.MessageTransformingHandler#2 received message: GenericMessage [payload=javax.xml.bind.JAXBElement@e7e6f9, headers={transaction_id=WSG91075596120150725170705797, sequenceNumber=1, sequenceSize=1, WsGwCorrelationID=5c57f681-9b08-4c6f-8bdb-c400dd5299a2, priority=4, jms_timestamp=1437824232246, uri=http://localhost:8082/OnlineSOAPBinding/soapui/OnlineReqSOAPBinding, ffp=AB, sendingsys=AB, jms_redelivered=false, OutboundRetroCorrelationKey=520a0ea3-465c-4b92-aa4c-ed32703aae5e, jms_replyTo=queue://PAI_RES_INTER_OUTQ, ws_soapAction=processRequest, original-payload=SomeValueFromRequest, id=d8af82e0-3555-0df9-7c8a-ce082c2e7ec7, jms_messageId=ID:01HW370406-53356-1437823659837-1:2948:1:1:1, receivingsys=SZ, timestamp=1437824233993}]
2015-07-25 17:07:14,306 DEBUG [org.springframework.integration.channel.DirectChannel] preSend on channel 'intermeddiateResponseOut', message: GenericMessage [payload=javax.xml.bind.JAXBElement@e7e6f9, headers={transaction_id=WSG91075596120150725170705797, sequenceNumber=1, sequenceSize=1, WsGwCorrelationID=5c57f681-9b08-4c6f-8bdb-c400dd5299a2, priority=4, jms_timestamp=1437824232246, uri=http://localhost:8082/OnlineSOAPBinding/soapui/OnlineReqSOAPBinding, ffp=AB, sendingsys=AB, jms_redelivered=false, OutboundRetroCorrelationKey=520a0ea3-465c-4b92-aa4c-ed32703aae5e, jms_replyTo=queue://PAI_RES_INTER_OUTQ, ws_soapAction=processRequest, id=af627505-55ca-854e-d2e8-1687fa5aca34, jms_messageId=ID:01HW370406-53356-1437823659837-1:2948:1:1:1, receivingsys=SZ, timestamp=1437824234306}]
2015-07-25 17:07:14,306 DEBUG [org.springframework.integration.jms.JmsSendingMessageHandler] org.springframework.integration.jms.JmsSendingMessageHandler#1 received message: GenericMessage [payload=javax.xml.bind.JAXBElement@e7e6f9, headers={transaction_id=WSG91075596120150725170705797, sequenceNumber=1, sequenceSize=1, WsGwCorrelationID=5c57f681-9b08-4c6f-8bdb-c400dd5299a2, priority=4, jms_timestamp=1437824232246, uri=http://localhost:8082/OnlineSOAPBinding/soapui/OnlineReqSOAPBinding, ffp=AB, sendingsys=AB, jms_redelivered=false, OutboundRetroCorrelationKey=520a0ea3-465c-4b92-aa4c-ed32703aae5e, jms_replyTo=queue://PAI_RES_INTER_OUTQ, ws_soapAction=processRequest, id=af627505-55ca-854e-d2e8-1687fa5aca34, jms_messageId=ID:01HW370406-53356-1437823659837-1:2948:1:1:1, receivingsys=SZ, timestamp=1437824234306}]
2015-07-25 17:07:14,309 DEBUG [org.springframework.integration.jms.DynamicJmsTemplate] Executing callback on JMS Session: ActiveMQSession {id=ID:01HW370406-59320-1437824218347-1:5:1,started=true}
In downstream flow after jmsOutboundgateway, the debug log is as below
jmsOutboundGateway --> outboundResAggregatorChannel --> Aggregator --> channel-->
In the outboundResAggregatorChannel, the original-payload header is again added
2015-07-25 17:07:14,561 DEBUG [org.springframework.integration.channel.DirectChannel] preSend on channel 'outboundResAggregatorChannel', message: GenericMessage [payload=javax.xml.bind.JAXBElement@9f7158, headers={transaction_id=WSG91075596120150725170705797, sequenceNumber=1, sequenceSize=1, WsGwCorrelationID=5c57f681-9b08-4c6f-8bdb-c400dd5299a2, priority=4, jms_timestamp=1437824234313, uri=http://localhost:8082/OnlineSOAPBinding/soapui/OnlineReqSOAPBinding, ffp=AB, sendingsys=AB, jms_redelivered=false, OutboundRetroCorrelationKey=520a0ea3-465c-4b92-aa4c-ed32703aae5e, jms_replyTo=queue://PAI_RES_INTER_OUTQ, ws_soapAction=processRequest, correlationId=3d09b492-c4d8-f314-b18d-85dd740ae944, original-payload=SomeValueFromRequest, id=d13a807a-8b89-92d2-5b08-5b767f86774a, jms_messageId=ID:01HW370406-59320-1437824218347-1:5:1:1:1, receivingsys=SZ, timestamp=1437824234561}]
2015-07-25 17:07:14,561 DEBUG [org.springframework.integration.aggregator.AggregatingMessageHandler] org.springframework.integration.aggregator.AggregatingMessageHandler#0 received message: GenericMessage [payload=javax.xml.bind.JAXBElement@9f7158, headers={transaction_id=WSG91075596120150725170705797, sequenceNumber=1, sequenceSize=1, WsGwCorrelationID=5c57f681-9b08-4c6f-8bdb-c400dd5299a2, priority=4, jms_timestamp=1437824234313, uri=http://localhost:8082/OnlineSOAPBinding/soapui/OnlineReqSOAPBinding, ffp=AB, sendingsys=AB, jms_redelivered=false, OutboundRetroCorrelationKey=520a0ea3-465c-4b92-aa4c-ed32703aae5e, jms_replyTo=queue://PAI_RES_INTER_OUTQ, ws_soapAction=processRequest, correlationId=3d09b492-c4d8-f314-b18d-85dd740ae944, original-payload=SomeValueFromRequest, id=d13a807a-8b89-92d2-5b08-5b767f86774a, jms_messageId=ID:01HW370406-59320-1437824218347-1:5:1:1:1, receivingsys=SZ, timestamp=1437824234561}]
Well, it doesn't work that way. Just because it is Gateway.
So, jmsOutboundgateway does know nothing about the flow on the other side and it really isn't interested in.
There is need just to have a reply from there, wrap it to the message and send to the reply-channel.
And the main word here is wrap. Having the original-payload header on the requestMessage any gateway implementation transfer them not only to that downstream flow (if protocol supports that, of course), but also to the replyMessage - AbstractReplyProducingMessageHandler:
@Override
protected final void handleMessageInternal(Message<?> message) {
Object result;
....
result = handleRequestMessage(message);
....
sendOutputs(result, message);
}
....
if (this.shouldCopyRequestHeaders()) {
builder.copyHeadersIfAbsent(requestHeaders);
}
And so on.
So, for your case you should move (or copy?) your <int:header-filter> to the downstream flow on the reply-channel.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With