![](/img/trans.png)
[英]How to externalise repeated SOAP response attributes in mule dataweave?
[英]How to map SOAP request in Mule Dataweave/Transform
我在 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>
如何从 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
}
}
}
}
%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"
}
]
}
%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.