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