BizTalk映射:从soapenv:Header获取值

时间:2019-05-16 08:52:17

标签: xslt soap mapping biztalk soapheader

我正在尝试通过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来实现?

1 个答案:

答案 0 :(得分:1)

假设您使用 WCF-BasicHttp 适配器,则可以按需要使用xslt,但前提是您指定了Envelope -- entire <soap:Envelope>作为SOAP Body元素的数据选择。如果未指定,则标题将从消息正文中删除,并且标题上的xpath语句将是不可能的。

您的另一个选择是从名称空间为http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties的上下文属性InboundHeaders获取值。默认情况下,适配器将SOAP标头值放入该InboundHeaders上下文属性中。如果您需要在没有业务流程的情况下进行映射的上下文值,请尝试查看社区制作的Context Accessor Functoid

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