Mule: tidak mengonversi XML ke JSON dengan benar

Saya memiliki aliran sederhana di AnyPointStudio yang menggunakan layanan web dan mengubahnya menjadi JSON.

masukkan deskripsi gambar di sini

Saya menggunakan layanan web yang memiliki tabel periodik: http://www.webservicex.net/periodictable.asmx?WSDL

masukkan deskripsi gambar di sini

Namun ketika menggunakan layanan getAtomicNumber saya mendapatkan data xml sebagai string dan XML ke JSON memberikan hasil ini:

{
    "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>"
    }
}

Seperti yang Anda lihat, ini tidak menguraikan GetAtomicNumberResult.

Bagaimana saya bisa membuat seluruh hasil diurai sebagai JSON?


person Pablo Estrada    schedule 06.10.2016    source sumber


Jawaban (1)


Masalah yang Anda hadapi adalah karena objek respon sabun memiliki objek yang tertanam dengan detail elemen. Yang akan Anda lakukan adalah mengekstrak objek respons dan menjalankan xml ke json setelah itu. Lihat di bawah:

    <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