【问题标题】:To identify the xsd of xml message which is received from MQ识别从MQ接收到的xml消息的xsd
【发布时间】:2015-03-28 12:49:07
【问题描述】:

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

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

我的选项是在消息的标头中设置一个属性,但是将消息放入 MQ 的一方还没有准备好。

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

【问题讨论】:

    标签: ibm-mq


    【解决方案1】:

    将 MQ 想象成邮局。当你收到一封信时,邮局不会弄乱内部的任何东西(有效载荷),如果它改变了外部,它只会改变路由信息。如果您想将收到的邮件分类给不同的收件人,发送邮件的人必须将排序标准所依据的数据放在信封的外部。如果这不起作用,您必须打开信封并在里面的文件上查找收件人姓名、部门或任何内容。

    您的 MQ 消息那个信封。排序标准可以是不同的队列名称、消息的属性、消息头的属性或负载中的某些内容。但除非发送者根据选择标准明确设置目标队列名称,或者设置消息或标头属性,否则您唯一的选择是检查有效负载并找出答案。

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

    【讨论】:

      【解决方案2】:

      我认为你可以做到:

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

      【讨论】:

        猜你喜欢
        • 2019-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-19
        • 2016-04-08
        • 1970-01-01
        • 2016-10-31
        • 2015-04-20
        相关资源
        最近更新 更多