无法在Mule4中的变量中设置XML有效负载

无法在Mule4中的变量中设置XML有效负载,mule,mule-studio,anypoint-studio,Mule,Mule Studio,Anypoint Studio,我是Mule4的新手。我的输入消息是XML,它没有在变量中设置 我也尝试过使用不同的mime类型,但不起作用。但是,当我以JSON格式而不是XML格式发送输入时,它确实可以工作 我通过postman使用以下XML <Weather> <City>London,uk</City> <appid>b6907d289e10d714a6e88b30761fae22</appid> <CIF>CIF20257&

我是Mule4的新手。我的输入消息是XML,它没有在变量中设置

我也尝试过使用不同的mime类型,但不起作用。但是,当我以JSON格式而不是XML格式发送输入时,它确实可以工作

我通过postman使用以下XML

<Weather>
    <City>London,uk</City>
    <appid>b6907d289e10d714a6e88b30761fae22</appid>
    <CIF>CIF20257</CIF>
</Weather>

英国伦敦
b6907d289e10d714a6e88b30761fae22
CIF20257
我讨论的代码的配置XML是

<set-variable value="#[payload.Weather.City]" doc:name="Set Variable" doc:id="b98b3ec8-c1f7-436d-9bcf-49eb0ca8a033" variableName="test" mimeType="application/xml"/>

显示的错误为

“javax.xml.stream.XMLStreamException-尝试在主元素树之外输出非空白字符(在prolog或 在编写Xml.Trace:at main(未知)时 表达方式:“有效载荷、天气、城市”。


有两种方法可以实现设置变量

  • 使用set变量组件
  • 正在使用dataweave转换
  • 我使用了第二种方法,我可以看到我能够设置变量

    以下是小样本应用程序的完整代码:

        <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
        xmlns="http://www.mulesoft.org/schema/mule/core"
        xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
        <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="23645d25-1194-4fcd-ae19-ffae9b9388f8" basePath="/play" >
            <http:listener-connection host="localhost" port="8081" />
        </http:listener-config>
        <flow name="z_playFlow" doc:id="2ae13c16-4e1e-4203-96c3-9d372ce41c63" >
            <http:listener doc:name="Listener" doc:id="9fa851c0-a05b-46e1-9ba4-f2433c80d67a" config-ref="HTTP_Listener_config" path="/setxml"/>
            <set-payload value="&lt;Weather&gt;
        &lt;City&gt;London,uk&lt;/City&gt;
        &lt;appid&gt;b6907d289e10d714a6e88b30761fae22&lt;/appid&gt;
        &lt;CIF&gt;CIF20257&lt;/CIF&gt;
    &lt;/Weather&gt;" doc:name="Set Payload" doc:id="7d122f45-6025-4fb8-a7d4-e1ec0873f40b" mimeType="application/xml"/>
            <ee:transform doc:name="Transform Message" doc:id="af6467e5-7177-403c-b9c0-62fb816b8f60" >
                <ee:message >
                </ee:message>
                <ee:variables >
                    <ee:set-variable variableName="var" ><![CDATA[%dw 2.0
    output application/xml
    ---
    
    city: payload.Weather.City]]></ee:set-variable>
                </ee:variables>
            </ee:transform>
            <logger level="INFO" doc:name="Logger" doc:id="8cbdcf0f-8b3e-4645-9475-887b9628bc05" message="#[payload]"/>
        </flow>
    </mule>
    
    
    
    如果您对如何通过“transform message”组件定义变量有疑问,请告诉我,我可以向您演示


    在转换消息中定义变量

  • 当您拉入转换消息组件时,默认输出类型是该组件的有效负载。这样地

  • 单击编辑当前目标(笔)选项,该选项将打开选择对话框,并在输出下拉列表下选择变量并提供变量名称:


  • 有两种方法可以实现设置变量

  • 使用set变量组件
  • 正在使用dataweave转换
  • 我使用了第二种方法,我可以看到我能够设置变量

    以下是小样本应用程序的完整代码:

        <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
        xmlns="http://www.mulesoft.org/schema/mule/core"
        xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
        <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="23645d25-1194-4fcd-ae19-ffae9b9388f8" basePath="/play" >
            <http:listener-connection host="localhost" port="8081" />
        </http:listener-config>
        <flow name="z_playFlow" doc:id="2ae13c16-4e1e-4203-96c3-9d372ce41c63" >
            <http:listener doc:name="Listener" doc:id="9fa851c0-a05b-46e1-9ba4-f2433c80d67a" config-ref="HTTP_Listener_config" path="/setxml"/>
            <set-payload value="&lt;Weather&gt;
        &lt;City&gt;London,uk&lt;/City&gt;
        &lt;appid&gt;b6907d289e10d714a6e88b30761fae22&lt;/appid&gt;
        &lt;CIF&gt;CIF20257&lt;/CIF&gt;
    &lt;/Weather&gt;" doc:name="Set Payload" doc:id="7d122f45-6025-4fb8-a7d4-e1ec0873f40b" mimeType="application/xml"/>
            <ee:transform doc:name="Transform Message" doc:id="af6467e5-7177-403c-b9c0-62fb816b8f60" >
                <ee:message >
                </ee:message>
                <ee:variables >
                    <ee:set-variable variableName="var" ><![CDATA[%dw 2.0
    output application/xml
    ---
    
    city: payload.Weather.City]]></ee:set-variable>
                </ee:variables>
            </ee:transform>
            <logger level="INFO" doc:name="Logger" doc:id="8cbdcf0f-8b3e-4645-9475-887b9628bc05" message="#[payload]"/>
        </flow>
    </mule>
    
    
    
    如果您对如何通过“transform message”组件定义变量有疑问,请告诉我,我可以向您演示


    在转换消息中定义变量

  • 当您拉入转换消息组件时,默认输出类型是该组件的有效负载。这样地

  • 单击编辑当前目标(笔)选项,该选项将打开选择对话框,并在输出下拉列表下选择变量并提供变量名称:


  • 当我从Mule 3心态转向Mule 4时,我遇到了这个问题。错误的原因是变量的类型是XML,但您正在尝试向其写入非XML

    payload.Weather.City
    的输出是字符串literal
    London,uk
    ,它不是有效的XML。有几个选项可以解决这个问题

  • 将有效的XML输出到变量中

  • 当我从Mule 3心态转向Mule 4时,我遇到了这个问题。错误的原因是变量的类型是XML,但您正在尝试向其写入非XML

    payload.Weather.City
    的输出是字符串literal
    London,uk
    ,它不是有效的XML。有几个选项可以解决这个问题

  • 将有效的XML输出到变量中

  • 您是否尝试过为映射创建元数据?您是否尝试过为映射创建元数据?非常感谢,先生,两种解决方案都工作得非常好。非常感谢,先生,两种解决方案都工作得非常好。尽管我的查询已通过将set变量组件的输出类型更改为java得到解决。但我仍然很想知道如何通过转换消息设置变量。谢谢,尽管我的查询已经通过将set变量组件的输出类型更改为java来解决。但我仍然很想知道如何通过转换消息设置变量。非常感谢
    <set-variable value="#[output application/java --- payload.Weather.City]" doc:name="Set Variable" variableName="test" />