2016-06-12 79 views
0

我是Mulesoft的新手,正在創建一個流程,我正在使用一個將XML作爲輸出的Web服務,並且需要將XML轉換爲Mule中的JSON。Mulesoft Web服務XML輸出到JSON

下面是我的騾子流,

下面是郵差漂亮值,

<?xml version="1.0" encoding="UTF-8"?> 
<GetProjectResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="namespaceName"> 
    <GetProjectResult>&lt;root&gt; 
    &lt;header&gt; 
    &lt;status&gt; 
     &lt;message&gt;Success&lt;/message&gt; 
    &lt;/status&gt; 
    &lt;/header&gt; 
    &lt;data&gt; 
    &lt;Project&gt; 
     &lt;ProjectId&gt;12345&lt;/ProjectId&gt; 
     &lt;ProjectShortName&gt;ABCDEF&lt;/ProjectShortName&gt; 
     &lt;BusinessGroupName&gt;ABCDEF GROUP&lt;/BusinessGroupName&gt; 
     &lt;InstitutionShortName&gt;Country&lt;/InstitutionShortName&gt; 
     &lt;CountryName&gt;Sample&lt;/CountryName&gt; 
     &lt;Code&gt;Sample&lt;/Code&gt; 
    &lt;/Project&gt; 
    &lt;/data&gt; 
&lt;/root&gt;</GetProjectResult> 
</GetProjectResponse> 

但我的JSON看起來像這樣,

{ 
    "GetProjectResponse": { 
    "@xmlns:xsd": "http://www.w3.org/2001/XMLSchema", 
    "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", 
    "@xmlns:xmlns": "namespaceName", 
    "GetProjectResult": "<root>\n <header>\n <status>\n  <message>Success</message>\n </status>\n </header>\n <data>\n <Project>\n  <ProjectId>12345</ProjectId>\n  <ProjectShortName>ABCDEF</ProjectShortName>\n  <BusinessGroupName>ABCDEF GROUP</BusinessGroupName>\n  <InstitutionShortName>Country</InstitutionShortName>\n  <CountryName>Sample</CountryName>\n  <Code>Sample</Code>\n </Project>\n </data>\n</root>" 
    } 
} 

我實際的XML是「GetProjectResult」節點內的值,有人能告訴我如何我會做到這一點。

回答

0

方案3:

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8083" basePath="test3" doc:name="HTTP Listener Configuration"/> 

    <flow name="removeFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/> 
    <json:xml-to-json-transformer doc:name="XML to JSON"/> 
    <logger message="#[json:GetProjectResponse/GetProjectResult]" level="INFO" doc:name="Logger"/> 
    <set-variable variableName="extractJsondata" value="#[json:GetProjectResponse/GetProjectResult]" mimeType="application/json" doc:name="Variable"/> 
    <set-payload value="#[flowVars.extractJsondata]" doc:name="Set Payload"/> 
    <echo-component doc:name="Echo"/> 
    </flow> 

我已經給你的直接XML作爲我的郵遞員輸入。能夠得到上述結果。

作爲另一種方式 json-to-object-transformer並且您可以提取有效負載。 https://docs.mulesoft.com/mule-user-guide/v/3.7/mule-expression-language-tips(請參閱此URL中的JSON處理部分)。希望這可以幫助。

+0

它的工作。非常感謝 – user2665819

+0

明星,你能檢查一下你是否能夠檢查我的另一個問題http://stackoverflow.com/q/37801082/2665819 – user2665819

0

3個選項

1.You可以使用XpathXpath3表達(基於騾子版本),並提取GetProjectResult第一,那麼您可以在使用xmlToJson變壓器這將是一個更簡單的選擇轉換成JSON。

2.接通到流進入XML刪除的時候,名字空間轉換中的Json

3.使用直接xmlToJson變壓器(目前你正在做的),轉換到JSONtoObject,並提取所需值在此鏈接中提到Extract values from a json response in mule flow(或)直接使用此鏈接中提到的Evaluate how to access json data mule esb

+0

我試過了你的選擇,但沒有運氣。不知道Iam在哪裏失蹤。給出詳細信息作爲具有良好格式的另一個答案 – user2665819

0

我使用XSLT獲取'GetProjectResult'對象,然後應用內置的XmlToJson轉換器。

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" /> 
<xsl:template match="/"> 
     <xsl:value-of disable-output-escaping="yes" select="//GetProjectResult" /> 
</xsl:template> 
</xsl:stylesheet> 

FLOW

Flow Used to convert to json

XML流量:

<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/> 
    <mulexml:xslt-transformer xsl- file="test.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"/> 
    <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
    <json:xml-to-json-transformer doc:name="XML to JSON"/> 
    <logger message="#[payload:java.lang.String]" level="INFO" doc:name="Logger"/> 
應用上述流程後,

JSON響應是如下:

{ 
"root" : { 
    "header" : { 
     "status" : { 
      "message" : "Success" 
     } 
    }, 
    "data" : { 
     "Project" : { 
      "ProjectId" : "12345", 
      "ProjectShortName" : "ABCDEF", 
      "BusinessGroupName" : "ABCDEF GROUP", 
      "InstitutionShortName" : "Country", 
      "CountryName" : "Sample", 
      "Code" : "Sample" 
     } 
    } 
} 

}

這是你想要的JSON?

+0

是的,這是我想要的JSON。非常感謝。你能告訴我: \t \t \t的 \t \t \t的 \t \t \t的 \t \t \t的 \t \t \t \t \t \t ' – user2665819

+0

你能告訴XML配置的一部分,我想TI怎麼看你申請了這個XSL零件 – user2665819

+0

非常感謝解決方案。出於某種原因,儘管DOM-XML給了我XML輸出,但XSLT並沒有給我輸出。因此嘗試了明星的選擇並且工作。無論如何,非常感謝您的時間 – user2665819

0

這是因爲你的XML是字符串格式,所以首先將其轉換或使用XML文件。那麼你可以通過轉換消息組件輕鬆轉換。