使用信封模式在 xmlDisassembler 中进行分批处理,出现空消息时失败
Debatching in xmlDisassembler using envelope schema, failing on empty message
我正在使用信封架构对 BizTalk 接收管道中的传入 xml 消息进行分批处理。对于任何包含我正在尝试取消批处理的子消息的 xml,取消批处理工作正常,但如果消息不包含任何子消息,则会失败。
我已经在 xpath 中的元素的架构中将 "min occurs" 设置为 0 和 nillable = true 以进行分批处理。在下面的示例中,"entry" 和 "resource" 元素将 min occurrence 设置为 0,我认为这会让 debatching 函数在没有要 debatched 的情况下工作。
这是信封架构的注释。
<xs:annotation>
<xs:appinfo>
<schemaInfo xmlns="http://schemas.microsoft.com/BizTalk/2003" is_envelope="yes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="Bundle">
<xs:annotation>
<xs:appinfo>
<recordInfo xmlns="http://schemas.microsoft.com/BizTalk/2003" body_xpath="/*[local-name()='Bundle' and namespace-uri()='']/*[local-name()='entry' and namespace-uri()='']/*[local-name()='resource' and namespace-uri()='']"/>
</xs:appinfo>
</xs:annotation>
没有要分批的消息的示例消息
<Bundle >
<type value="searchset"/>
<total value="0"/>
</Bundle>
存在子消息时用于分批处理的 xpath 示例。
<Bundle >
<type value="searchset"/>
<total value="46"/>
<entry>
<resource>
<Encounter>
任何包含 entry/resource/encounters 元素的消息都成功分批,但不包含 "entry" 元素的消息(没有要分批的消息)抛出以下错误。
Reason: This Disassembler cannot retrieve body nodes using this XPath: "/[local-name()='Bundle' and namespace-uri()='']/[local-name()='entry' and namespace-uri()='']/[local-name()='resource' and namespace-uri()='']".
/[local-name()='Bundle' and namespace-uri()='']/[local-name()='entry' and namespace-uri()='']/[local-name()='resource' and namespace-uri()='']
我希望将没有任何内容的消息简单地分解为 "disappear",但我最终在组中心出现错误。任何关于如何消除此错误的想法或建议将不胜感激。
那是因为您将正文指向资源节点,当没有要分批的消息时资源节点甚至不存在。您需要指向始终存在于正文消息出现的信封中的节点。
您可能需要以下 emtpy
<Bundle >
<type value="searchset"/>
<total value="0"/>
<entries/>
</Bundle>
以及以下消息。
<Bundle >
<type value="searchset"/>
<total value="46"/>
<entries>
<entry>
<resource>
<Encounter>
然后将您的 body_xpath 指向条目。
您可以使用下面的 body_xpath 仅提取 'Bundle' 和 'entry' 条记录
body_xpath="/*[local-name()='Bundle' and namespace-uri()=''][*[local-name()='entry' and namespace-uri()=''][count(*)>0]]/*[local-name()='entry' and namespace-uri()='']/*[local-name()='resource' and namespace-uri()='']"
或
body_xpath="/*[local-name()='Bundle' and namespace-uri()=''][*[local-name()='entry' and namespace-uri()=''][count(*)>0]]/*[local-name()='entry' and namespace-uri()='']/*[local-name()='resource' and namespace-uri()='']"
我正在使用信封架构对 BizTalk 接收管道中的传入 xml 消息进行分批处理。对于任何包含我正在尝试取消批处理的子消息的 xml,取消批处理工作正常,但如果消息不包含任何子消息,则会失败。
我已经在 xpath 中的元素的架构中将 "min occurs" 设置为 0 和 nillable = true 以进行分批处理。在下面的示例中,"entry" 和 "resource" 元素将 min occurrence 设置为 0,我认为这会让 debatching 函数在没有要 debatched 的情况下工作。
这是信封架构的注释。
<xs:annotation>
<xs:appinfo>
<schemaInfo xmlns="http://schemas.microsoft.com/BizTalk/2003" is_envelope="yes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="Bundle">
<xs:annotation>
<xs:appinfo>
<recordInfo xmlns="http://schemas.microsoft.com/BizTalk/2003" body_xpath="/*[local-name()='Bundle' and namespace-uri()='']/*[local-name()='entry' and namespace-uri()='']/*[local-name()='resource' and namespace-uri()='']"/>
</xs:appinfo>
</xs:annotation>
没有要分批的消息的示例消息
<Bundle >
<type value="searchset"/>
<total value="0"/>
</Bundle>
存在子消息时用于分批处理的 xpath 示例。
<Bundle >
<type value="searchset"/>
<total value="46"/>
<entry>
<resource>
<Encounter>
任何包含 entry/resource/encounters 元素的消息都成功分批,但不包含 "entry" 元素的消息(没有要分批的消息)抛出以下错误。
Reason: This Disassembler cannot retrieve body nodes using this XPath: "/[local-name()='Bundle' and namespace-uri()='']/[local-name()='entry' and namespace-uri()='']/[local-name()='resource' and namespace-uri()='']". /[local-name()='Bundle' and namespace-uri()='']/[local-name()='entry' and namespace-uri()='']/[local-name()='resource' and namespace-uri()='']
我希望将没有任何内容的消息简单地分解为 "disappear",但我最终在组中心出现错误。任何关于如何消除此错误的想法或建议将不胜感激。
那是因为您将正文指向资源节点,当没有要分批的消息时资源节点甚至不存在。您需要指向始终存在于正文消息出现的信封中的节点。
您可能需要以下 emtpy
<Bundle >
<type value="searchset"/>
<total value="0"/>
<entries/>
</Bundle>
以及以下消息。
<Bundle >
<type value="searchset"/>
<total value="46"/>
<entries>
<entry>
<resource>
<Encounter>
然后将您的 body_xpath 指向条目。
您可以使用下面的 body_xpath 仅提取 'Bundle' 和 'entry' 条记录
body_xpath="/*[local-name()='Bundle' and namespace-uri()=''][*[local-name()='entry' and namespace-uri()=''][count(*)>0]]/*[local-name()='entry' and namespace-uri()='']/*[local-name()='resource' and namespace-uri()='']"
或
body_xpath="/*[local-name()='Bundle' and namespace-uri()=''][*[local-name()='entry' and namespace-uri()=''][count(*)>0]]/*[local-name()='entry' and namespace-uri()='']/*[local-name()='resource' and namespace-uri()='']"