用于处理具有多个XML模式的消息的Java模式

时间:2016-05-04 18:27:29

标签: java xml xsd jms

我有一个侦听队列的Java程序。队列中的消息采用XML格式。但每条消息可能有不同的架构。我希望我的程序读取消息并将控制权传递给适当的处理器,具体取决于架构。是否有可能做到这一点?如果是,我应该使用什么Java模式?一些伪代码会非常有用。

2 个答案:

答案 0 :(得分:0)

完整的XML解析对于单纯调度来说是昂贵的。嗅探是一种较便宜的选择。但是,请考虑使用消息头或消息属性来传递足够的信息,以便在不需要直接检查XML的情况下进行调度。

答案 1 :(得分:0)

如果您有权访问生产者,请让生产者使用有效负载所代表的消息类型为JMSType JMS属性设置一个值,然后在收到消息后,测试此属性,然后按原样处理有效负载。
另一个选择是从您可以接收的所有可能的xml有效负载的xsd(模式)生成JAXB类,然后创建一个JAXBContext,它可以处理与可能的有效负载相对应的所有“jaxb根类”,解组有效负载并测试类unmarshaller创建的对象:
JAXBContext jc = JAXBContext.newInstance(A.class,B.class,C.class); Unmarshaller u = jc.createUnmarshaller(); Object o = u.unmarshal(来自消息的有效负载文本); if(o A.class的实例)......