Как отобразить SOAP-запрос в Mule Dataweave / Transform - PullRequest
0 голосов
/ 29 октября 2019

Я использую сервис SOAP в Mule 3.8.3 и столкнулся со сценарием, в котором я не могу самостоятельно найти решение. У меня есть следующий поток, который выглядит прямо вперед.

Сервис 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>

Как мне правильносопоставить входные параметры (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
            }
        }
    }
}

1 Ответ

0 голосов
/ 30 октября 2019

Xml to 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 to 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>
...