我正在使用Jmeter发送带有 XML 有效负载和一些contentType带有值的自定义标头的 JMS 消息。text/jsontext/xml
我的 Spring 集成配置如下所示:
<jms:message-driven-channel-adapter channel="jmsInChannel" destination-name="queue.demo" connection-factory="jmsConnectionFactory1" />
<int:channel id="jmsInChannel" />
<int:header-value-router input-channel="jmsInChannel" header-name="contentType" default-output-channel="nullChannel">
<int:mapping value="text/json" channel="jsonTransformerChannel" />
<int:mapping value="text/xml" channel="xmlTransformerChannel" />
</int:header-value-router>
到目前为止,一切都很顺利,消息已成功路由到各自的变压器。
我的问题是,当它是 XML 有效负载时,我首先使用 JAXB Unmarshaller<ixml:unmarshalling-transofmer ../>以及http://www.springframework.org/schema/integration/xml.
我可以获取有效负载,但它无法随后将消息作为 JMS 消息进行处理,它变成了纯 POJO。<int: ../>所以我丢失了标头,并且在不序列化 POJO 的情况下无法使用组件,这不是我想要实现的目标。
我找到了一个解决方法,我在 java 中定义了自己的 Unmarshalling bean,如下所示:
<int:channel id="xmlTransformerChannel" />
<int:transformer input-channel="xmlTransformerChannel" ref="xmlMsgToCustomerPojoTransformer" output-channel="enrichInChannel" />
方法:
@SuppressWarnings("rawtypes")
public Message transform(String message) {
logger.info("Message Received \r\n" + message);
try {
MyModel myModel = (MyModel) unmarshaller.unmarshal(new StreamSource(new StringReader(message)));
return MessageBuilder.withPayload(myModel).build();
} catch (XmlMappingException e) {
return MessageBuilder.withPayload(e).build();
} catch (Exception e) {
return MessageBuilder.withPayload(e).build();
}
}
我可以成功地将消息作为 Spring 集成消息进行处理,但我丢失了原始的自定义 JMS 标头。
相比之下,我所要做的就是转换 json 有效负载并保留消息格式并保留我的自定义标头是以下 xml 配置:
<int:channel id="jsonTransformerChannel" />
<int:json-to-object-transformer input-channel="jsonTransformerChannel" output-channel="enrichInChannel" type="com.alrawas.ig5.MyModel" />
我的问题是,在解组 xml 负载后如何保留原始的自定义 JMS 标头?
慕桂英546537
慕森王
相关分类