Mule:没有正确地将XML转换为JSON

时间:2016-10-06 01:18:07

标签: json xml web-services mule

我在AnyPointStudio上有一个简单的流程,它使用Web服务并将其转换为JSON。

enter image description here

我正在使用具有元素周期表的web服务: http://www.webservicex.net/periodictable.asmx?WSDL

enter image description here

然而,当使用getAtomicNumber服务时,我将xml的数据作为字符串获取,而XML to 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?

1 个答案:

答案 0 :(得分:1)

您面临的问题是因为s​​oap响应对象具有包含元素详细信息的嵌入对象。你要做的是,提取响应对象并在此之后执行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>