标识从MQ接收的xml消息的xsd

时间:2015-03-17 16:37:00

标签: ibm-mq

在IBM MQ中,我有一个要求,我可以从队列中获取多种类型的xml。 xml消息将符合已经指定的xsd(例如,5 xsd - 这意味着我可以得到5个不同的xml)。当我从队列中获取消息时,我想知道xml的类型(如果它的xsd1或xsd2等)

我之所以想知道的是,我使用的是带有SAX实现的JaxB接口,我需要将对应于xml的java对象作为参数。所以我必须知道输入和输入的xsd并相应地分配参数。

我的选项是在消息的头部设置一个属性,但是将消息放入MQ的一方尚未就绪。

我还有其他选择吗?我可以从mq获取文件名(xml)并根据文件名找到xsd吗?或者我是否必须执行sax解析并识别根标记并派生xsd类型?任何人都有其他更好的选择吗?

2 个答案:

答案 0 :(得分:2)

将MQ视为邮局。当你收到一封信时,邮局不会弄乱内部的任何东西(有效载荷),如果它改变了外部,它只会改变路由信息。如果要将传入邮件分类到不同的收件人,则发送邮件的人必须将排序条件所依据的数据放在信封外部。如果这不起作用,您必须打开信封并在里面找到收件人姓名,部门或其他任何内容。

您的MQ消息 该信封。排序标准可以是不同的队列名称,消息的属性,消息头的属性或有效负载中的某些内容。但是,除非发件人根据选择标准显式设置目标队列名称,或者设置消息或标头属性,否则您唯一的选择是检查有效负载并计算出来。

如果必须检查有效负载,这是IBM Integration Broker的完美方案。但您也可以编写应用程序来执行此功能。通常,这是由Dispatch应用程序执行的,该应用程序获取消息,找出它的位置,然后将其放入另一个队列并COMMIT进行GETPUT操作。但是,如果调度应用程序必须解析XML以确定正确的队列,则必须对消息进行两次解析 - 一次由调度程序解析,一次由接收应用程序解析。

答案 1 :(得分:1)

我认为你可以做到:

传入消息的文件名是否在邮件正文的开头?在这种情况下,收到消息后,您的应用程序可以读取前几个字节以获取文件名。根据文件名,应用程序可以使用适当的Xsd并传递整个邮件正文。