Usando o Apache Camel, como faço para soltar meu objeto desaperializado que entra através de um terminal CXF?
-
26-09-2019 - |
Pergunta
Eu tenho uma rota de camelo muito simples. Começa com um ponto de extremidade CXF exposto como um serviço da Web. Eu então quero convertê -lo para XML e chamar um método em um feijão.
Atualmente, estou recebendo um objeto específico da CXF após a chamada do serviço da web. Como faço para tirar meu objeto serializado do CXF Messagelist e usá -lo daqui para frente?
Minha rota:
<camel:route>
<camel:from uri="cxf:bean:helloEndpoint" />
<camel:marshal ref="xstream-utf8" />
<camel:to uri="bean:hello?method=hello"/>
</camel:route>
A mensagem serializada XML:
<?xml version='1.0' encoding='UTF-8'?>
<org.apache.cxf.message.MessageContentsList serialization="custom">
<unserializable-parents />
<list>
<default>
<size>1</size>
</default>
<int>6</int>
<com.whatever.Person>
<firstName>Joe</firstName>
<middleName></middleName>
<lastName>Buddah</lastName>
<dateOfBirth>2010-04-13 12:09:00.137 CDT</dateOfBirth>
</com.whatever.Person>
</list>
</org.apache.cxf.message.MessageContentsList>
Eu esperaria que o XML fosse mais assim:
<com.whatever.Person>
<firstName>Joe</firstName>
<middleName></middleName>
<lastName>Buddah</lastName>
<dateOfBirth>2010-04-13 12:09:00.137 CDT</dateOfBirth>
</com.whatever.Person>
Solução
Eu encontrei. Eu só tinha que usar isso.
<camel:convertBodyTo type="com.whatever.Person"/>
Outras dicas
Você também pode usar o formato de dados JAXB, que eu acho que o CXF suporta fora da caixa.
Suponho que você tenha usado o CXF WSDL2Java para gerar os objetos modelo gerados automaticamente? Nesse caso, você pode olhar para o código -fonte gerado que deve ter @ JAXB Anotações