我正在实现一个正在侦听JMS队列的Spring MessageListener 来处理包含XML的消息。
我的bean ProposalSOAListener 将处理来自队列的大约5条或更多XML消息。我的代码如下。
有没有办法在此类上指定不同的方法来处理不同的XML消息?
public class ProposalSOAListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
} catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
} // end of ProposalSOAListener class
答案 0 :(得分:3)
你的问题引发了许多架构问题。你想让这个mesasge监听器做这项工作,还是把它交给另一个组件?是否有交易考虑因素?您是否有内存限制 - 即您是否需要基于流的XML处理?做
好消息是,你在Spring中可以获得很多关于这个难题的部分。
简单的下一步是使用Spring Object XML Marshalling(OXM),选择其中一种技术,并将marshaller连接到监听器bean。
请参阅http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/oxm.html
另一种技术是使用Spring ApplicationEvent接口,读取队列中的消息并将其内部发布到特定类型的侦听器。这可以与上述对象编组结合使用。
最后但并非最不重要的,如果这是SOAP Web服务 - 你可以看看Spring WS,它使用类似的消息容器从网络中提取消息,编组它们,并调用spring ws端点(即满足该接口契约的服务接口。)
http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#d4e907
答案 1 :(得分:1)
Spring Integration project解决此类问题。实际上,您必须实现一个jms入站网关来获取您的消息。然后您可以将此转换为对象,然后将消息路由到相应的服务激活器组件,该组件可以映射到您的实例和方法。 / p>