【问题标题】:Getting Soap Body from Web Service Consumer从 Web 服务使用者获取肥皂体
【发布时间】:2016-08-14 09:52:41
【问题描述】:

我有一个流中的 Web 服务使用者,我只是想提取包含在 soap 信封中的 XML 以放入出站 vm 队列。我如何在流程中实现这一点,我已经展示了一个肥皂消息的示例;

<ws:consumer-config name="WS_Connector"
            connector-ref="HTTP_HTTPS" wsdlLocation="orderService.wsdl"
            service="OrderService" port="OrderServiceWS"
            serviceAddress="http://ws-orders.com?responseTimeout=60000"
            doc:name="Web Service Consumer" />

            <flow name="mainFlow">  
                <vm:inbound-endpoint path="request.queue"/>
           <ws:consumer config-ref="WS_Connector"
            operation="orderTShirts" doc:name="TShirt Service Consumer">
           </ws:consumer>
        <!-- Get Just the XML Payload without the Soap Envelope 
          for the vm outbound queue
             <tshirt xmlns="http://www.webservice.order-service">
                  <size>17</size>
                       <color>red</color> 
              </tshirt>
            -->
        <vm:outbound-endpoint path="response.queue"/>
      </flow>



                      <?xml version="1.0" encoding="utf-8"?>
                  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                     xmlns:xsd="http://www.w3.org/2001/XMLSchema">

                  <soap:Body>
                    <tshirt xmlns="http://www.webservice.order-service">
                       <size>17</size>
                       <color>red</color> 
                       </tshirt>
                   </soap:Body>
                </soap:Envelope>

【问题讨论】:

    标签: soap mule


    【解决方案1】:

    web-service-consumer 被设计为只接受 XML 文档的正文/操作部分,并将生成正文/操作作为响应。
    请仔细阅读 dataweave 文档:- https://docs.mulesoft.com/mule-user-guide/v/3.7/web-service-consumer

    您可以在此处使用 XSLT 转换器或 DataWeave 在响应中的 &lt;ws:consumer/&gt; 之后添加您的肥皂信封,如下例所示:-

    <!-- your code above -->
        <ws:consumer config-ref="WS_Connector" operation="orderTShirts" doc:name="TShirt Service Consumer"/>
            <dw:transform-message doc:name="XML to JSON" >
                    <dw:input-payload doc:sample="ListInventoryResponse.xml"/>
                    <dw:set-payload><![CDATA[%dw 1.0
        %output application/xml
        %namespace ns0 http://mulesoft.org/tshirt-service
        %namespace soap http://schemas.xmlsoap.org/soap/envelope/
        ---
        soap#Envelope : {
    
        soap#Body:payload
    
        }]]></dw:set-payload>
          </dw:transform-message>       
    

    【讨论】:

    • 谢谢,但我用 dom 到 xml 转换器解决了这个问题。我正在寻找删除肥皂信封而不是添加它。
    • 你在这里说“只是想提取包含在soap信封中的XML,然后放到出站vm队列中”这意味着你想提取包含在Soap中的响应信封(这意味着带有肥皂信封的响应)...否则您将始终在&lt;ws:consumer/&gt; 之后得到响应而没有肥皂信封和标题,因为 web-service-consumer 设计为在没有肥皂信封和标题的情况下工作...默认情况下此功能...只有您需要将其转换为 xml
    【解决方案2】:

    我找到的解决方法很简单

         <mulexml:dom-to-xml-transformer doc:name="SOAP Response to XML" encoding="UTF-8" mimeType="application/xml" outputEncoding="UTF-8"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多