Apache Camel JSON regroupement pour POJO Java Bean
Je pense que j'ai une simple question, mais n'arrive pas à le comprendre.
Je suis en invoquant un POJO avec une classe créée à partir de unmarshalling JSON en tant que paramètre de la méthode. La question est, comment puis-je le maréchal le retour de la méthode de retour JSON?
Mon itinéraire est ci-dessous;
from("direct:start")
.choice()
.when(header("methodname").isEqualTo("listCases"))
.unmarshal().json(JsonLibrary.Jackson, UserDetails.class)
.to("bean:com.xxx.BeanA")
.when(header("methodName").isEqualTo("listPersons"))
.unmarshal().json(JsonLibrary.Jackson, CaseDetails.class)
.to("bean:com.xxx.BeanB");
...et je suis en invoquant l'itinéraire ci-dessous;
ProducerTemplate template = camelContext.createProducerTemplate();
template.setDefaultEndpoint(camelContext.getEndpoint("direct:start"));
InvocationResult result = (InvocationResult)template.requestBodyAndHeader(payload, "methodName", methodName);
Charge utile est JSON, et la methodName est soit listCases ou listPersons dans cet exemple.
Mon InvocationResult classe est générique et contient une Chaîne code_retour attribut ainsi que d'une référence d'objet à l'objet que je tiens à être converti en JSON. Cet objet sera différent selon que listCases ou listPersons est exécutée.
Merci,
Bic
unmarshall()
avec Jackson. Avez-vous un problème avec l'aide de marshall()
de la même façon? Tant que la réponse peut être convoquée par Jackson, il devrait être assez simple?Le unmarshalling fonctionne bien - ainsi, dans l'exemple ci-dessus, je vois ma charge utile JSON est converti à un UserDetails classe. Le problème est que je ne sais pas comment le maréchal de l'un des champs de la InvocationResult de la classe de l'Objet qui doit être converti en JSON.
Donc, étant donné que je peux unmarshall JSON d'un POJO de passer d'une fève, je suppose que ma question se résume à la façon dont je fais l'inverse de maréchal de l'objet renvoyé par la fève de retour JSON?
OriginalL'auteur bicster | 2016-11-23
Vous devez vous connecter pour publier un commentaire.
Mon impression est que votre problème n'est pas à propos de triage (qui devrait être tout à fait simple), mais sur le traitement d'une réponse après avoir acheminé le message à l'aide de
choice()
. Vous devez fermer lachoice()
bloc à l'aide d'end()
(en supposant que le résultat de chaque branche seront traitées de la même manière), puis assurez-vous que la réponse est écrite à laout
corps du message dans la dernière étape de l'itinéraire.De toute façon, ici, c'est un exemple que je viens de le tester:
Affichage
{"foo":"toto"}
retourne{"bar1":"totoA"}
(et les journauxsending to beanA
).Affichage
{"foo":"titi"}
retourne{"bar2":"titiB"}
(et les journauxsending to beanB
).OriginalL'auteur Cyäegha
inclure les éléments suivants de la dépendance à
Définir le Format JSON dans le RouteBuilder classe-
Également dans le routebuilder classe utiliser le format ci-dessus comme suit -
Code Source et plus de détails - Apache Camel - Marshalling/Unmarshalling XML/JSON Données
OriginalL'auteur Rehan
C'est aussi simple que cela
.marshal().json(JsonLibrary.Jackson)
(c'est ce que vous voulez)from("direct:start") .choice() .when(header("methodname").isEqualTo("listCases")) .unmarshal().json(JsonLibrary.Jackson, UserDetails.class) .to("bean:com.xxx.BeanA") .when(header("methodName").isEqualTo("listPersons")) .unmarshal().json(JsonLibrary.Jackson, CaseDetails.class) .to("bean:com.xxx.BeanB") .marshal().json(JsonLibrary.Jackson);
Mon InvocationResult objet est rendu comme tel, ni lui ni aucun de ses attributs sont converties au format JSON - ce qui me manque?OriginalL'auteur Sagar