Ich habe ein bisschen Mühe, einen Rückgabewert von einer Bohne in Camel zu bekommen und sie auf meiner Route zu verwenden.Rückgabewert von einer Bean in Camel (Java)
Ich habe einen Weg, der wie folgt aussieht:
from(file:test/?delete=true)
.unmarshal(jaxb)
.bean(testBean, "testMethod")
.to(direct:nextRoute);
Die Bohne etwa wie folgt aussieht:
public void testBean (PojoName pojoInstance){
//do stuff
int i= 75; //a number I generate within the bean after I've started this method
}
Ich will die Nummer, die ich innerhalb meiner Bohne erzeugen verwenden und in meiner Route . Etwas wie folgt aus:
from(file:test/?delete=true)
.unmarshal(jaxb)
.bean(testBean, "testMethod")
.log(integer generated from testBean)
.to(direct:nextRoute);
Was ich versucht:
Also, statt der Rückkehr Leere in meinem Bohne, änderte ich den Rückgabetyp in einen int und brachte die ganze Zahl. Dann hatte ich gehofft, so etwas in meiner Route zu tun:
.log("${body.intFromBean}")
Mein Denken ist, dass wenn ich den Wert von einer Bohne zurückkehren, soll es diesen Wert in dem Austauschkörper speichern (zumindest das ist, was ich Ich komme von der Camel Dokumentation). Dann könnte ich auf meiner Route darauf zugreifen.
Das Problem:
Allerdings, wenn ich den testBean Rückgabetyp in einen int ändern, ich die folgenden Fehler erhalten.
org.apache.camel.CamelExecutionException: Execution occurred during execution on the exchange
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: PojoName but has value: numberIGenerated of type java.lang.Integer
(Leider habe ich den vollen Stack-Trace nicht habe ich ist die so mobile app)
Meine Frage mit:
Aus der Lektüre einig andere so Einreichungen, ich glaube, ich verstehe das Problem. Der Nachrichtentext ist von einem Typ und der Rückgabetyp ist ein anderer Typ. Aber auch wenn ich es versuchte.
.convertTo(Integer.class)
vor dem Aufruf der Bean, aber das hat auch nicht funktioniert. (Vom Konzept her würde das auch nicht funktionieren, denn wenn ich es direkt nach der Unmarsarstellung in einen int konvertiere, wäre ich nicht in der Lage, die entpackten Daten zu verwenden. Aber ich dachte, ich würde es trotzdem versuchen).
Kann mir jemand helfen zu verstehen, wie ich die ganze Zahl richtig zurückgeben und auf meiner Route verwenden kann?
Ich habe die Dokumentation über Bohnenbindung und den Austausch gelesen, und ich dachte, ich verstehe es gut genug, um dies zu tun. Aber ich muss etwas verpassen.
Vollständige Stack-Trace und vollständige Körper Ihrer Bohne (einschließlich testmethod-implementation) etc. wäre hilfreich, auch vollständige route wäre hilfreich, wo ist testBean definiert, etc. Auch das sieht mir eher zweifelhaft an: $ {body.intFromBean} aus deinem Log-Statement, benötige aber mehr Infos ... –
Hast du .log ("$ {body}") anstelle von $ {body.intFromBean} ausprobiert? camel speichert das Ergebnis als Ihren Nachrichtentext. –