2016-10-06 2 views
0

У меня есть простой поток на AnyPointStudio, который потребляет веб-службы и преобразует его в JSON.Mule: Неправильно преобразовывается XML в JSON

enter image description here

Im потребляя WebService, который имеет периодическую таблицу: http://www.webservicex.net/periodictable.asmx?WSDL

enter image description here

Однако при использовании службы IM 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?

ответ

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> 
Смежные вопросы