我在AnyPointStudio上有一个简单的流程,它使用Web服务并将其转换为JSON。
我正在使用具有元素周期表的web服务: http://www.webservicex.net/periodictable.asmx?WSDL
然而,当使用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?
答案 0 :(得分:1)
您面临的问题是因为soap响应对象具有包含元素详细信息的嵌入对象。你要做的是,提取响应对象并在此之后执行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>