繁体   English   中英

如何在 Mule Dataweave/Transform 中请求 map SOAP

[英]How to map SOAP request in Mule Dataweave/Transform

我在 Mule 3.8.3 上使用 SOAP 服务,遇到了我自己无法解决的情况。 我有以下看起来直截了当的流程。

SOAP 服务消费流

SOAP 请求如下所示:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:jcm="http://www.oracle.com/JCM">
   <soapenv:Header/>
   <soapenv:Body>
      <jcm:GenericRequest webKey="cs">
         <jcm:Service ServiceId="GET_FILE">
            <jcm:Document>
               <!--Zero or more repetitions:-->
               <jcm:Field name="documentName">abcd.pdf</jcm:Field>
               <jcm:Field name="documentID">156</jcm:Field>
            </jcm:Document>
         </jcm:Service>
      </jcm:GenericRequest>
   </soapenv:Body>
</soapenv:Envelope>

如何从 Mule 转换中的有效负载正确 map 输入参数(webKey、ServiceId、documentName 和 documentID)? 显然,以下尝试是不正确的,因此感谢您的帮助。

%dw 1.0
%output application/xml
%namespace ns0 http://www.oracle.com/JCM
---
{
    ns0#GenericRequest @(webKey: payload.WebKey): {
        ns0#Service @(ServiceId: payload.IdcService): {
            ns0#Document: {
                ns0#Field @(name: payload.DocIDName): null
++ payload.DocID
                ns0#Field @(name: payload.DocumentName): null
++ payload.DocName
            }
        }
    }
}

Xml 到 Json

%dw 1.0
%output application/json
---
{
    webKey: payload.Envelope.Body.GenericRequest.@webKey,
    serviceId: payload.Envelope.Body.GenericRequest.Service.@ServiceId,
    documents: payload.Envelope.Body.GenericRequest.Service.*Document map {
        documentName: $[?($.@name == 'documentName')][0],
        documentID: $[?($.@name == 'documentID')][0]
    }
}

产生:

{
  "webKey": "cs",
  "serviceId": "GET_FILE",
  "documents": [
    {
      "documentName": "abcd.pdf",
      "documentID": "156"
    },
    {
      "documentName": "efgh.pdf",
      "documentID": "850"
    }
  ]
}

Json 到 Xml

%dw 1.0
%output application/xml
%namespace soapenv http://schemas.xmlsoap.org/soap/envelope/
%namespace jcm http://www.oracle.com/JCM
---
{
    soapenv#Envelope: {
        soapenv#Header: '',
        soapenv#Body:
            jcm#GenericRequest @(webkey: payload.webKey):
                jcm#Service @(ServiceId: payload.serviceId):
                    {(payload.documents map (
                        jcm#Document: $ mapObject {
                            jcm#Field @(name: $$): $
                        }
                    ))}
    }
}

产生:

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header></soapenv:Header>
  <soapenv:Body>
    <jcm:GenericRequest xmlns:jcm="http://www.oracle.com/JCM" webkey="cs">
      <jcm:Service ServiceId="GET_FILE">
        <jcm:Document>
          <jcm:Field name="documentName">abcd.pdf</jcm:Field>
          <jcm:Field name="documentID">156</jcm:Field>
        </jcm:Document>
        <jcm:Document>
          <jcm:Field name="documentName">efgh.pdf</jcm:Field>
          <jcm:Field name="documentID">850</jcm:Field>
        </jcm:Document>
      </jcm:Service>
    </jcm:GenericRequest>
  </soapenv:Body>
</soapenv:Envelope>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM