我有一个 .NET Web 服务,它有一个接受字符串的方法。在 Mulesoft 的 Anypoint 工作室中,我成功地构建了一个接受 POST 的流,将 POST 字符串传递到服务中,并返回一个经过处理的结果。
我现在正在尝试为类似的服务创建一个流程,但该服务接受自定义对象,而不是字符串。当我使用 SOAP UI 直接测试我的服务时,我传入了以下 XML,它成功地在我的服务中构建了对象,并且 MyFirstString 和 MySecondString 值可用于服务。
SOAP 用户界面 XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:pra="http://schemas.datacontract.org/2004/07/Pra.Lib.Transformation">
<soapenv:Header/>
<soapenv:Body>
<tem:Transform>
<tem:transformationData>
<pra:MyFirstString>test1</pra:MyFirstString>
<pra:MySecondString>test2</pra:MySecondString>
</tem:transformationData>
</tem:Transform>
</soapenv:Body>
</soapenv:Envelope>
但是,当我使用我的 Mule 流并将我的 DataWeave 放在我的 Web 服务使用者前面时,它会自动构建一个不适用于该服务的 XML 字符串。当我将调试器附加到服务时,它显示对象未成功构建/映射...在进行 Web 服务使用者调用后,MyFirstString 和 MySecondString 为空。
数据编织代码:
%dw 1.0
%output application/xml
%namespace ns0 http://tempuri.org/
---
//Some output fields where skipped as the structure is too deep (more than 2 levels).
//To add missing fields click on the scaffold icon (second on the toolbar).
{
ns0#Transform: {
ns0#transformationData: {
Xml: "test1",
Xslt: "test2"
}
}
}
数据编织输出:
<?xml version='1.0' encoding='windows-1252'?>
<ns0:Transform xmlns:ns0="http://tempuri.org/">
<ns0:transformationData>
<Xml>test1</Xml>
<Xslt>test2</Xslt>
</ns0:transformationData>
</ns0:Transform>
返回的错误消息是“反序列化操作'Transform'的请求消息正文时出错。OperationFormatter遇到无效的消息正文。应找到名称为'Transform'和命名空间'的节点类型'Element' http://tempuri.org/ '。找到名称为'EXTRACT_DETAIL'和命名空间''的节点类型'Element'。消息有效负载的类型为:ElementNSImpl"
因此,如果我理解此错误...我的问题是如何将 DataWeave 编码为以 SOAP UI 使用的肥皂信封格式输出...因为似乎 DataWeave 生成的元素结构给我带来了问题?非常感谢。