2017-02-17 5 views
0

Ich sende Seife Xml durch Exchange-Objekt.Wenn ich versuche, die Anfrage mit Xpath in Apache Kamel zu routen, ich bin nicht in der Lage, es richtig auszuführen.Bitte schlagen Sie Mein Exchange body xml istXpath funktioniert nicht in Kamel Route

<Envelope><Header> 
    </Header> 
    <Body> 
    <Choice> 
     <Selector>1</selector> 
    </Choice> 
    </Body> 
</Envelope> 

My Camel Strecke

from(direct:XX) 
    .to(when(xpath("body()/Choice/Selector/.",String.class)=='1') 
    .to("direct:X") 
    .otherwise() 
    .to("direct:Y") 
+1

Studieren, wie XPath funktioniert, und beachten Sie Namespaces –

Antwort

1
  1. Ihr Umschlag kann nicht so aussehen. es muss etwas sein wie:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
        <soapenv:Header/>  
        <soapenv:Body> 
        ... 
    
  2. body()/Choice/Selector/. kein XPath ist. Es gibt keine solche Sache wie body() in XPath.

Unter der Annahme, dass Sie einen SOAP Körpergehalt in der Exchange.body von einigem JAX-WS Endpunkt XPath

/Choice/Selector oder /Choice/Selector/text() wenn es ein Element mit gemischtem Inhalt

BTW wird bearbeitet haben : Wenn Ihr Envelope ein echtes Beispiel ist, versuchen Sie zu testen, vergessen Sie nicht, Ihr XML zu korrigieren - Sie haben falsch <Selector>1</selector> Tag-Namen sind Groß-und Kleinschreibung. Es muss sein <Selector>1</Selector>

+1

Und Sie müssen Namespace-Mapping auch für XPaths zu arbeiten. Lesen Sie die Dokumentation: http://camel.apache.org/xpath –