2011-03-28 2 views
0

nous avons cette route de chameau apache,routes Apache Camel InOut, sur l'échange marshaling/unmarshaling avec JAXB

from(commandDrop).marshal(jaxbDataFormat).to(jmsQueue);  
from(jmsQueue).inOut("jms:doCommand?requestTimeout=500000");   
from("jms:doCommand").unmarshal(jaxbDataFormat).beanRef("bean"); 

.... et une classe de haricots comme celui-ci

class BeanClass { 
     public void doCommand(Command command, Exchange exchange){ 
    {  
     command.run();  
     exchange.getOut().setBody(command);  
    } 
} 

nous essayer de mettre un message et attendre une réponse sur l'itinéraire comme ceci

Object ret = template.requestBody(commandDrop, new TestCommand()); 

Objets sur la route dans la direction de l'avant sont gett marshaled/unmarshaled magnifiquement. Mais l'appel setBody provoque une exception java.io.NotSerializableException. Existe-t-il un moyen de configurer l'itinéraire pour utiliser le même marshaling/unmarshaling jaxb sur le chemin du retour? Ma classe de commande contient des objets de classe générés par jaxb qui ne sont pas sérialisables. Ils sont bien gérés par le maréchal/unmarshal dans la direction avant et serait génial s'ils peuvent être sur le chemin du retour. Je suis relativement nouveau à chameau, donc je ne sais pas si c'est la meilleure façon d'y parvenir.

merci beaucoup.

Répondre

1

Vous pouvez maréchal après l'invocation de haricot

from("jms:doCommand").unmarshal(jaxbDataFormat).beanRef("bean").marshal(jaxbDataFormat); 
+0

aha. Cela renvoie un tableau d'octets à la fin de l'appel. Ce que je peux unmarshal comme ceci, retCommand = (commande) jaxbContext.createUnmarshaller(). Unmarshal (nouveau ByteArrayInputStream (ret)); Je vous remercie! – Mustafa