Невозможно установить полезную нагрузку XML в переменной в Mule4 - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в Mule4.Мое входное сообщение - это XML, который не задается в переменной.

Я пробовал его также с разными типами MIME, но он не работает.Это работает, однако, когда я отправляю ввод в формате JSON вместо XML.

Я использую следующий XML через почтальона

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

И XML конфигурации моего обсуждаемого кодаis

<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 - Попытка вывести непробельные символы вне основного дерева элементов (в прологе илиepilog), при написании Xml. Trace: at main (Unknown) ", вычисляющее выражение:" payload.Weather.City ".

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Я столкнулся с этой проблемой при переходе от мышления Mule 3 к Mule 4. Причина вашей ошибки в том, что тип вашей переменной - XML, но вы пытаетесь записать в нем не-xml.

Вывод payload.Weather.City - это строковый литерал London,uk, который не является допустимым XML.Есть несколько вариантов решения этой проблемы.

  1. Вывести действительный XML в переменную
<set-variable value="#[City: payload.Weather.City]" doc:name="Set Variable" variableName="test" />

. Значение переменной будет установлено как <City>London,uk</City, чтодействителен XML

Измените тип переменной

Если вы просто надеетесь сохранить String London,uk для последующего использования, тогда вы можете явно установить тип вывода компонента set variable в java.

<set-variable value="#[output application/java --- payload.Weather.City]" doc:name="Set Variable" variableName="test" />
0 голосов
/ 25 июня 2019

Есть два способа установить переменную.

  1. с использованием заданного переменного компонента
  2. использует преобразование данных.

Я использовал второй подход и вижу, что могу установить переменную

enter image description here

вот полный код для небольшого примера приложения:

    <?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", дайте мне знать, и я могу продемонстрировать вам это.


определение переменной в сообщении преобразования

  1. при извлечении компонента сообщения преобразования тип вывода по умолчанию - это полезная нагрузка для этого. как это enter image description here

  2. нажмите на опцию редактирования текущей цели (пера), которая откроет диалоговое окно выбора, и в раскрывающемся списке выберите Variable и введите имя переменной:

    enter image description here

...