【问题标题】:BizTalk mapping: Getting a value from soapenv:HeaderBizTalk 映射:从 soapenv:Header 获取值
【发布时间】:2019-05-16 08:52:17
【问题描述】:

我正在尝试通过 xslt 映射以下格式的消息:

<soapenv:Envelope xmlns:soapenv="..." ns...>
   <soapenv:Header>
      <ns:myHeader>
         <ns1:myData>VALUE_I_WANT</ns1:myData>
      </ns:myHeader>
   </soapenv:Header>
   <soapenv:Body>
      <ns2:otherData>
         ...
      </ns2:otherData>
   </soapenv:Body>
</soapenv:Envelope>

目前我的映射处理soapenv:Body 标记中的所有字段,但对于我的一个映射节点,我需要soapenv:Header > ns:myHeader > ns1:myData 中的值。

是否可以从 XSLT 中的 soap 标头获取一个值,我需要什么样的 xpath 来实现这一点?

【问题讨论】:

  • 你能分享你的 xslt 吗?您是否尝试过提供命名空间的 XPath soapenv:Envelope/soapenv:Header/ns:myHeader/ns1:myData
  • 这对你也有帮助/*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='myHeader']/*[local-name()='myData']
  • 如果我可以在我的 xslt.我正在研究上面的建议。
  • 非常重要的问题:您使用什么适配器来接收消息?

标签: xslt soap mapping biztalk soapheader


【解决方案1】:

假设您使用 WCF-BasicHttp 适配器,您可以按照自己的意愿使用 xslt,但前提是您将 Envelope -- entire &lt;soap:Envelope&gt; 指定为 SOAP Body 元素的数据选择。如果您不指定,您的标头将从邮件正文中删除,并且标头上的 xpath 语句将无法使用。

您的另一个选择是从上下文属性InboundHeaders 和命名空间http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties 中获取值。默认情况下,适配器将 SOAP 标头值放入该 InboundHeaders 上下文属性中。如果您需要映射中的上下文值,而无需编排,请尝试查看Context Accessor Functoid 制作的社区。​​p>

也可以像在 cmets 中要求的那样对标头值进行自己的属性提升,但在 xslt 中不行。仅当您添加XML Disassembler Pipeline Component,然后制作整个soap消息的架构,然后在架构上设置促销,最后;在管道组件的Document schemas 部分中指定架构。我不建议使用这种方法,因为它需要您部署一个将与默认 BizTalk soap 架构重复的soap 架构。

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多