Mule-从Soap Envelope

时间:2017-01-31 07:14:58

标签: soap mule

我有一个SOAP请求信封,看起来像这样:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tsh="http://mulesoft.org/tshirt-service">
   <soapenv:Header>
      <tsh:AuthenticationHeader>
         <apiKey>?</apiKey>
      </tsh:AuthenticationHeader>
   </soapenv:Header>
   <soapenv:Body>
      <tsh:OrderTshirt>
         <size>xxl</size>
         <email>abcd.@dfg.com</email>
         <name>xyz</name>
         <address1>aaaa</address1>
         <address2>asdf</address2>
         <city>werty</city>
         <stateOrProvince>sdd</stateOrProvince>
         <postalCode>111111</postalCode>
         <country>India</country>
      </tsh:OrderTshirt>
   </soapenv:Body>
</soapenv:Envelope>

现在,我需要解析<tsh:OrderTshirt>的所有子元素,即在解析输出之后应该是这样的:

<tsh:OrderTshirt>
         <size>xxl</size>
         <email>abcd.@dfg.com</email>
         <name>xyz</name>
         <address1>aaaa</address1>
         <address2>asdf</address2>
         <city>werty</city>
         <stateOrProvince>sdd</stateOrProvince>
         <postalCode>111111</postalCode>
         <country>India</country>
      </tsh:OrderTshirt>

我想通过在Mule的命名空间管理器中声明命名空间来解析一个元素。 (提到reading soap header element in payload)。

不确定如何使用它的子元素解析节点。

请分享您的想法:)

1 个答案:

答案 0 :(得分:0)

取决于你想要实现的目标。 需要将主体发送到SOAP Web服务吗?

或者您想要提取值?

使用DataWeave可以轻松实现,并且代码中不需要额外的命名空间声明。

XML将是您的有效负载,您可以通过以下方式引用正文:

%dw 1.0
%output application/xml
---
payload.Envelope.Body

但是它会在顶部输出一个额外的XML标头。

看看如何删除它:

https://forums.mulesoft.com/questions/51394/remove-xml-definition-from-dataweave-output.html

否则使用名称空间声明并使用Set Payload作为值使用引用XML主体的Xpath表达式,以便成为有效负载。