2017-02-10 1 views
1

Scheint eine einfache Aufgabe zu sein, aber ich kann mich nicht damit abfinden.XML-Antwort von einem REST-Aufruf in Spring-Integration konsumieren

Ich habe eine Spring-Integrationskette, die einen externen Webservice aufruft, der ein XML zurückgibt. Ich möchte diese XML-Antwort in einem nachgelagerten XpathRouter verwenden.

Welchen erwarteten Antworttyp sollte ich verwenden?

<int:chain input-channel="filesChannel"> 

    <!-- ... some previous components in the chain --> 
    <int-http:outbound-gateway 
     http-method="POST" 
     url="http://web/service/url" 
     expected-response-type="java.lang.String" /> 

    <int-xml:xpath-router default-output-channel="resultChannel"> 
     <int-xml:xpath-expression expression="/order/status" /> 
     <int-xml:mapping value="Error" channel="importErrorChannel" /> 
    </int-xml:xpath-router> 
</int:chain> 

Es scheint nicht, wie die xpath-router können die XML durch den Webservice zurück verbrauchen. Wenn ich den Router mit einem Haltepunkt in der folgenden Zeile debuggen:

Node node = this.converter.convertToNode(message.getPayload()); 

Der Knoten ist null, obwohl die Nachricht gültiges XML enthält.

Liegt es daran, dass ich nicht das richtige expected-response-type setze?

Hier ist die Antwort XML ich aus dem Dienst erhalten:

<apiResponse version="1.0"> 
<orders> 
<order> 
     <orderReference>test_2_3045342</orderReference> 
     <status>Error</status> 
     <errors> 
      <error> 
       <errorCode>1100</errorCode> 
       <errorMessage><![CDATA[ "Field is required: dropWindow" ]]></errorMessage> 
      </error> 
     </errors> 
</order> 
</orders> 
</apiResponse> 

Antwort

2

Ok, fand ich meinen Fehler - es war tatsächlich in dem XPath-Ausdruck. Es sollte //order/status sein, um tiefe Suche zu ermöglichen.

Die java.lang.String expected-response-type funktioniert gut mit XML XpathRouter.

Danke

+0

So können Sie Ihre eigene Antwort jetzt akzeptieren! –