Web services MuleSoft DataWeave-通过Web服务使用者调用.NET SOAP服务

Web services MuleSoft DataWeave-通过Web服务使用者调用.NET SOAP服务,web-services,soap,mule,anypoint-studio,dataweave,Web Services,Soap,Mule,Anypoint Studio,Dataweave,我有一个.NETWeb服务,它有一个接受字符串的方法。在Mulesoft的Anypoint studio中,我成功构建了一个流,该流接受POST,将POST字符串传递到服务中,并返回一个经过处理的结果 我现在尝试为一个类似的服务创建一个流,只是这个服务接受一个自定义对象,而不是字符串。当我使用soapui直接测试我的服务时,我传入了以下XML,它成功地在我的服务中构建了对象,并且MyFirstString和MySecondString值对服务可用 SOAP UI XML: <soapenv

我有一个.NETWeb服务,它有一个接受字符串的方法。在Mulesoft的Anypoint studio中,我成功构建了一个流,该流接受POST,将POST字符串传递到服务中,并返回一个经过处理的结果

我现在尝试为一个类似的服务创建一个流,只是这个服务接受一个自定义对象,而不是字符串。当我使用soapui直接测试我的服务时,我传入了以下XML,它成功地在我的服务中构建了对象,并且MyFirstString和MySecondString值对服务可用

SOAP UI 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>
数据编织输出:

<?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”。找到名为“EXTRACT_DETAIL”和命名空间的节点类型“Element”。消息负载的类型为:ElementNSImpl


所以,如果我理解了这个错误…我的问题是如何将DataWeave编码为soap UI使用的soap信封格式输出…因为看起来DataWeave生成的元素结构是给我带来问题的原因?多谢

一位开发者同事为我指出了正确的方向。在AnyPoint Studio中,在DataWeave/TransformMessage组件的属性选项卡上,我必须单击按钮来构建输出结构。生成以下输出语法更改(粗体显示在下面)。我最初的印象是,当第一次将组件放入流中时,所有脚手架都是自动的

更改的语法:

                ns1#Xml: "test1",
                ns1#Xslt: "test2"
整个脚手架:

%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: {
            ns1#Xml: "test1",
            ns1#Xslt: "test2"
        }
    }
}
单击此处查看脚手架按钮

是的,在配置WSDL之后,您可以拖放数据编织,然后单击scaffold,它将为您生成适当的结构

%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: {
            ns1#Xml: "test1",
            ns1#Xslt: "test2"
        }
    }
}