Mulesoft Web服务XML输出到JSON

问题描述:

我是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”节点内的值,有人能告诉我如何我会做到这一点。

方案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://*.com/q/37801082/2665819 – user2665819

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

我使用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 XSL:模板> \t \t \t XSL:样式表> mulexml:XSLT文本> mulexml:XSLT变压器>' – user2665819

+0

你能告诉XML配置的一部分,我想TI怎么看你申请了这个XSL零件 – user2665819

+0

非常感谢解决方案。出于某种原因,尽管DOM-XML给了我XML输出,但XSLT并没有给我输出。因此尝试了明星的选择并且工作。无论如何,非常感谢您的时间 – user2665819

这是因为你的XML是字符串格式,所以首先将其转换或使用XML文件。那么你可以通过转换消息组件轻松转换。