Mule: неправильное преобразование XML в JSON

У меня есть простой поток в AnyPointStudio, который использует веб-сервисы и преобразует их в JSON.

введите здесь описание изображения

Я использую веб-сервис с периодической таблицей: http://www.webservicex.net/periodictable.asmx?WSDL

введите здесь описание изображения

Однако при использовании службы getAtomicNumber я получаю данные xml в виде строки, а XML в JSON дает следующий результат:

{
    "GetAtomicNumberResponse" : {
        "@xmlns:xsd" : "http://www.w3.org/2001/XMLSchema",
        "@xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance",
        "@xmlns:xmlns" : "http://www.webserviceX.NET",
        "GetAtomicNumberResult" : "<NewDataSet>\n  <Table>\n    <AtomicNumber>49</AtomicNumber>\n    <ElementName>Indium</ElementName>\n    <Symbol>In</Symbol>\n    <AtomicWeight>114.82000000000001</AtomicWeight>\n    <BoilingPoint>2300</BoilingPoint>\n    <IonisationPotential>5.79</IonisationPotential>\n    <EletroNegativity>1.49</EletroNegativity>\n    <AtomicRadius>1.5</AtomicRadius>\n    <MeltingPoint>430</MeltingPoint>\n    <Density>7310</Density>\n  </Table>\n</NewDataSet>"
    }
}

Как видите, он не анализирует GetAtomicNumberResult.

Как я могу получить весь результат, проанализированный как JSON?


person Pablo Estrada    schedule 06.10.2016    source источник


Ответы (1)


Проблема, с которой вы столкнулись, заключается в том, что объект ответа мыла имеет встроенный объект с деталями элемента. Что бы вы сделали, так это извлеките объект ответа и после этого выполните xml в json. Смотри ниже:

    <flow name="periodic_tableFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/table" doc:name="HTTP"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
%namespace ns0 http://www.webserviceX.NET
---
{
       ns0#GetAtomicNumber: {
              ns0#ElementName: "Indium"
       }
}]]></dw:set-payload>
        </dw:transform-message>
        <logger message="#[message.payloadAs(String)]" level="INFO" doc:name="Logger"/>
        <ws:consumer config-ref="Web_Service_Consumer" operation="GetAtomicNumber" doc:name="Web Service Consumer"/>
        <dw:transform-message metadata:id="021335ff-1e33-4cdd-be35-49d95f93b8bc" doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/java
%namespace ns0 http://www.webserviceX.NET
---
payload.ns0#GetAtomicNumberResponse.ns0#GetAtomicNumberResult]]></dw:set-payload>
        </dw:transform-message>
        <json:xml-to-json-transformer doc:name="XML to JSON"/>
        <logger message="Before transformer - #[payload]" level="INFO" doc:name="Logger"/>
        <echo-component doc:name="Echo"/>
    </flow>
</mule>
person jvas    schedule 20.10.2016