Camel-Exchange-Eigenschaft nicht in die Auswertung mit einfachen, in xml
Ich versuche, um eine Immobilie isEven an der Börse.Eigenschaft und verwenden Sie dann Wahl wenn zu bewerten, es in der route.
Die Eigenschaft wird eingestellt, aber ich bin immer der sonst Ergebnis (NACK) egal was isEven festgelegt ist.
Hier ist, wo ich es:
//Below is used for development
//If the property.isEven == true then an ACK will be returned from the Mock HRM
//If false then NACK
int lastDigit = Integer.parseInt(exchange.getExchangeId().substring(exchange.getExchangeId().length() - 1));
//check if lastDigit is odd or even
if ((lastDigit & 1) == 0)
{
exchange.setProperty("isEven", Boolean.TRUE);
System.out.println("\n\n\n********** Exchange Id lastDigit " + lastDigit + " isEven: " + exchange.getProperty("isEven") + " ***********");
}
else
{
exchange.setProperty("isEven", Boolean.FALSE);
System.out.println("\n\n\n********** Exchange Id lastDigit " + lastDigit + " isEven: " + exchange.getProperty("isEven") + " ***********");
}
Die println ' s zeigen, dass ich die Einstellung isEven die Weise, die ich erwarte.
Hier ist die route:
<!-- Used to ramdomly send Ack or Nack -->
<log message="isEven property is :: ${property[isEven]}" />
<camel:choice>
<camel:when>
<simple>"${property[isEven]}"</simple>
<transform>
<constant>ACK</constant>
</transform>
</camel:when>
<camel:otherwise>
<transform>
<constant>NACK</constant>
</transform>
</camel:otherwise>
</camel:choice>
Log-Nachricht, die niemals wertet den Ausdruck ${property[isEven]}
Hier ist die Ausgabe
log[isEven Eigenschaft :: ${property[isEven]}]
wenn ich den einfachen Ausdruck um explizit zu überprüfen, für wahr, ich alway get ACK egal, was die Eigenschaft festgelegt ist.
<simple>"${property[isEven]} == true"</simple>
Ich habe gesucht im Internet aber nicht finden konnten eine Menge von Beispielen mit einfachen und Exchange-Eigenschaft.
Kann jemand sehen, was ich bin fehlt?
Dank,
Andrew
Nachdem Peter zeigte, konnte er es einfach tun ich habe versucht, seine 2 Beispiele, ich hätte nicht bereits versucht. Hier ist eine. Es hat bei mir nicht funktioniert. Es erzeugt Hallo :: NACK, ob isEven ist true oder false:
<camel:choice>
<camel:when>
<simple>${property[isEven]} == "true"</simple>
<log message="HELLO :: ACK" />
<!-- <transform>
<constant>ACK</constant>
</transform> -->
</camel:when>
<camel:otherwise>
<log message="HELLO :: NACK" />
<!-- <transform>
<constant>NACK</constant>
</transform> -->
</camel:otherwise>
</camel:choice>
Ist hier etwas Interessantes. Es unten aussieht wie das Protokoll sagt, dass die leere Auf dem letzten wie
********** Exchange Id lastDigit 2 isEven: true ***********
14/02/20 14:09:13 INFO interceptor.Tracer: >>> (toHRMRoute) bean://hl7handler?method=handleORM --> log[isEven property is :: ${property[isEven]}] <<< Pattern:InOut, Properties {CamelToEndpoint=bean://hl7handler?method=handleORM, CamelMessageHistory [DefaultMessageHistory[routeId=toHRMRoute, node=to3], DefaultMessage History[routeId=toHRMRoute, node=log1]], CamelCreatedTimestamp=Thu Feb 20 14:09:13 CST 2014}
14/02/20 14:09:13 INFO toHRMRoute: ** isEven property is :: **
Ich denke, Peter ist richtig, dass es die Art und Weise habe ich meine Routen einrichten.
<endpoint id="hrmMockHL7Listener"
uri="netty:tcp://localhost:9200?sync=true" />
<!-- Sending data using postman to a rest server-->
<route id="pushRESTRoute">
<from uri="cxfrs://bean://pushRESTServer" />
<!-- this process is where we set isEven on the Exchange-->
<process ref="transformer"/>
<!-- Send it to a tcp listener at port 9200-->
<to ref="hrmMockHL7Listener" />
</route>
<!-- Changed routes does the Exchange keep properties? -->
<route id="toMRoute">
<from uri="hrmMockHL7Listener" />
<to uri="bean:hl7handler?method=handleORM" />
<!-- Used to ramdomly send Ack or Nack -->
<log message="isEven property is :: ${property[isEven]}">
//see the beginning of the question for choice code.
Blick auf die Ausgabe, die es scheint, die isEven Eigenschaft verworfen wird zwischen Routen:
14/02/21 09:37:26 INFO interceptor.Tracer: >>> (pushRESTRoute) ref:transformer --> tcp://localhost:9200 <<< Pattern:InOut, Properties {CamelMessageHistory=[DefaultMessageHistory[routeId=pushRESTRoute, node=process1], DefaultMessageHistory[routeId=pushRESTRoute, node=to1]], CamelCreatedTimestamp=Fri Feb 21 09:37:26 CST 2014, isEven=true}
Sehen isEven am Ende? Der nächste tracer, die kommt nicht es
/02/21 09:37:26 INFO interceptor.Tracer: >>> (toMRoute) from(tcp://localhost:9200) --> bean://hl7handler?method=handleORM <<< Pattern:InOut, Properties:{CamellMessageHistory=[DefaultMessageHistory[routeId=toMRoute, node=to3]], CamelCreatedTimestamp=Fri Feb 21 09:37:26 CST 2014}
Vom Exchange-javadoc
An Exchange is the message container holding the information during the entire routing of a Message received by a Consumer.
Tut gesamte gehören über differents Routen?
Ich bin mit 2.12.2
InformationsquelleAutor KingAndrew | 2014-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den Test änderte ich die route ein wenig:
Der Prozessor ist wie folgt definiert:
Für mich, folgende Ausdrücke wie erwartet funktionierte:
oder
oder
oder
oder
oder
Bevorzuge ich die Letzte version.
EDIT:
Um zu Debuggen, wenn die Eigenschaft richtig eingestellt ist, aktivieren
showProperties
in der Spring-Konfigurationsdatei:Dann sollten Sie folgende Ausgabe in Ihrem log (verkürzt für bessere Lesbarkeit):
Ist der wichtige Teil
isEven=true
.EDIT:
Die Immobilie gehalten wird, wenn die Weiterleitung auf eine andere route, die nachgewiesen werden können, wie folgt:
Ausgabe:
Selbst wenn ich auf eine bean vor der Weiterleitung der Nachricht an die andere route, die Immobilie gehalten wird. So, ich denke, dein Problem ist in
<to uri="bean:hl7handler?method=handleORM" />
. Versuchen Sie, melden Sie die Eigenschaft vor dem Aufruf dieser Bohne, und sehen, ob die Immobilie ist immer noch gesetzt. Wenn nicht, haben Sie einen Blick auf die bean.Peter werden Sie die Einstellung mit "Boolean".TRUE & Boolean.Falsch? Wenn Ihr einfache Ausdrücke handelt, die nicht für mich arbeiten, vielleicht ist es wie ich die Einstellung ändern?
Ich tatsächlich verwendet, ist Ihr Prozessor. Aber vielleicht hat es damit zu tun a) mit wie rufen Sie Ihre route (siehe meine erweiterte Beispiel oben), b) mit, wenn Ihr
myProcessor
hatsingelton
(Standard) oderprototype
Umfang..+1 für die multicast-Beispiel. Ich doppelt überprüft ich nicht angeben, singelton oder Prototypen, so bin ich mit singleton standardmäßig. Hast du gesehen, ich fügte hinzu, die Frage nach dem detail, dass die log-Nachricht zeigt, isEven als leer. Die log-Meldung beginnt mit INFO.
Ich fügte hinzu, wie zum Debuggen, wenn die Eigenschaft korrekt eingestellt ist, in meiner Antwort oben.
InformationsquelleAutor
Müssen Sie nicht verwenden Sie Zitate. Probieren Sie es einfach
InformationsquelleAutor Ben Goldin