我在spring集成中使用header-enricher
来向邮件头添加一些信息。
<int:header-enricher input-channel="inboundReqOutboundChannel"
output-channel="validRequestChannel">
<int:header name="original-payload" ref="messageCreator"
method="reqHeaderEnricher"></int:header>
</int:header-enricher>
在标头丰富之后,请求消息传递如下。
header-enricher --> channel --> jmsOutboundgateway
然后响应消息流如下。
jms-message-driven-adapter --> service-activator --> channel -->
header-filter --> channel --> from here to jmsOutboundgateway's reply destination
响应消息流中的标头过滤器如下所示
<int:header-filter input-channel="headerFilterChannel"
header-names="original-payload" output-channel="responseOutChannel" />
但是,即使在传递original-payload
之后,响应消息仍然具有header-filter
标题。
需要进行任何其他配置才能使header-filter
正常工作吗?
请指出正确的方法。
非常感谢您的建议!
调试日志:
消息通过responseFlow中的标头过滤器后:
header-filter - &gt; intermediateRespOutChannel - &gt; jmsOutboundAdapter - &gt;至 jmsOutBoundGateway
当邮件在original-payload
之后通过intermediateRespOutChannel
时,会移除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}
在jmsOutboundgateway之后的下游流程中,调试日志如下所示
jmsOutboundGateway - &gt; outboundResAggregatorChannel - &gt;聚合器 - &gt;信道 - &GT;
在outboundResAggregatorChannel
中,再次添加original-payload
标题
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}]
答案 0 :(得分:1)
嗯,它不会那样工作。只因为它是Exception in thread "main" java.lang.NullPointerException
at memoria.bosques.imprimirenarchivos(bosques.java:17281)
at memoria.bosques.main2(bosques.java:18096)
at memoria.bosques.main(bosques.java:18139)
。
所以,Gateway
对另一方的流程一无所知,而且它真的不感兴趣。
只需从那里获得jmsOutboundgateway
,将其包装到消息中并发送到reply
。
这里的主要词是reply-channel
。在wrap
任何网关实现上具有original-payload
标头不仅会将它们传输到下游流(当然,如果协议支持它),还会传输到requestMessage
- {{1} }:
replyMessage
等等。
那么,对于您的情况,您应该将AbstractReplyProducingMessageHandler
移动(或复制?)到@Override
protected final void handleMessageInternal(Message<?> message) {
Object result;
....
result = handleRequestMessage(message);
....
sendOutputs(result, message);
}
....
if (this.shouldCopyRequestHeaders()) {
builder.copyHeadersIfAbsent(requestHeaders);
}
的下游流程。