2016-06-12 12 views
0

Ich bin neu bei Mulesoft und arbeiten, um einen Fluss zu erstellen, wo ich einen Web-Service konsumiere, der XML als Ausgabe gibt und ich XML zu JSON in Mule konvertieren muss.Mulesoft Web Service XML-Ausgabe zu JSON

Unten ist mein Mule Fluss,

Unterhalb der Postbote Hübscher Wert ist,

<?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> 

Aber meine JSON sieht wie folgt aus,

{ 
    "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>" 
    } 
} 

Meine eigentliche XML ist der Wert innerhalb des "GetProjectResult" -Knotens, kann mir jemand sagen, wie Ich werde das erreichen.

Antwort

0

Option 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> 

ich direkt Ihre XML als Eingabe in meinem Briefträger gegeben haben. Kann das oben genannte Ergebnis erzielen.

Als eine andere Möglichkeit json-to-object-transformer und Sie können die Nutzlast extrahieren. https://docs.mulesoft.com/mule-user-guide/v/3.7/mule-expression-language-tips (Siehe JSON-Verarbeitungsteil in dieser URL). Hoffe das hilft.

+0

es funktioniert. Vielen Dank – user2665819

+0

Star, können Sie überprüfen, ob Sie in der Lage sein werden, auf mein anderes Problem auf http://StackOverflow.com/q/37801082/2665819 zu überprüfen – user2665819

0

3 Optionen

1.You Xpath oder Xpath3 Ausdruck verwenden kann (basierend auf Mule-Version) und extrahieren Sie die GetProjectResult und dann können Sie konvertieren, um Json mit xmlToJson Transformator, der eine einfachere Möglichkeit wäre.

2.Once xml in dem Strömungs trat der Namensraum entfernt dann in zu Json

3.Use Direkt xmlToJson Transformator (Zur Zeit, die Sie tun) umgewandelt, konvertieren, um JSONtoObject und extrahieren Sie die erforderlichen Wert, wie in dieser Verbindung wie erwähnt in diesem Link Extract values from a json response in mule flow (oder) direkt auswerten how to access json data mule esb

+0

Ich habe Ihre Möglichkeiten versucht, aber kein Glück. nicht sicher, wo ich vermisse. Angesichts der Details als eine andere Antwort, um ein gutes Format zu haben – user2665819

0

I verwendet XSLT verwenden erwähnte das ‚GetProjectResult‘ Objekt und dann angewandt einen eingebauten XmlToJson Transformator zu erhalten.

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 FLOW:

<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 Antwort nach oben fließen Anwendung ist wie folgt:

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

}

Ist das Ihr gewünschte json?

+0

Ja genau, das ist meine gewünschte JSON. Danke vielmals. Können Sie mir sagen, \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t ' – user2665819

+0

können Sie die Konfiguration XML-Teil zeigen, ich will ti sehen, wie Sie haben diesen XSL-Teil angewendet – user2665819

+0

Vielen Dank für die Lösungen. Aus irgendeinem Grund gibt XSLT mir keine Ausgabe, obwohl DOM-XML mir XML-Ausgabe gibt. Daher versuchte Stern Option und arbeitete. Jedenfalls vielen Dank für Ihre Zeit – user2665819

0

Dies liegt daran, dass Sie XML im String-Format haben, also konvertieren Sie es zuerst oder verwenden Sie eine XML-Datei dafür. dann können Sie leicht durch Umwandeln der Nachrichtenkomponente konvertieren.