Mule ESB Transform Messgae xml转换

时间:2016-05-16 07:02:16

标签: mule mule-studio mule-component mule-el

我在mule转换消息中进行xml格式转换时遇到一个问题。

我有一个输入xml文件。

我必须将输入xml转换为输出xml,其中节点结构不同且节点名称不同。 我使用数据转换消息进行此转换,但是在某一点上,它显示了预期的格式是object和found string。 任何人都可以帮助我。

  

“类型不匹配        发现:name,:string     required:name,:object(com.mulesoft.weave.mule.exception.WeaveExecutionException)。消息有效负载的类型为:WeaveMessageProcessor $ WeaveOutputHandler“

input payload 
<?xml version="1.0" encoding="utf-8"?>
 <AGREEMENT>
  <details>
  <newTransaction>N</newTransaction> 
   <type>ddd</type> 
   </details>
 </AGREEMENT>

output Payload

 <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<TestHeader xmlns="TestWebService">
    <Username>aaa</Username>
    <Password>aaa</Password>
</TestHeader>
 </soap:Header>
    <soap:Body>
        <AGRMNT>
        <testId>
        <_-Test_Agrmnt- SEGMENT="1">
            <transaction>N</transaction>
        </__-Test_Agrmnt->
    </testId>
  </AGRMNT>
 </soap:Body>
</soap:Envelope>

DataWeave代码

%dw 1.0
%output application/xml
 %namespace soap http://schemas.xmlsoap.org/soap/envelope/

{
 soap#Envelope: {
    soap#Body: {

        AGREEMENT: {

            testId: {
            '_-Test_Agrmnt-': {

                    transaction: payload.AGREEMENT.details.newTransaction as   :string
                    }
                }
            }
        }}

1 个答案:

答案 0 :(得分:0)

我的输入和脚本输出

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <AGREEMENT>
      <testId>
         <_-Test_Agrmnt->
           <transaction>N</transaction>
         </_-Test_Agrmnt->
     </testId>
   </AGREEMENT>
 </soap:Body>
</soap:Envelope>

唯一的变化是在脚本

中添加---
<dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
                %output application/xml
                %namespace soap http://schemas.xmlsoap.org/soap/envelope/
                ---
                {
                 soap#Envelope: {
                    soap#Body: {

                        AGREEMENT: {

                            testId: {
                            '_-Test_Agrmnt-': {

                                    transaction: payload.AGREEMENT.details.newTransaction as :string
                                    }
                                }
                            }
                        }}}]]>
        </dw:set-payload>
        </dw:transform-message>