unmarshal marshall marshal convert camel java json jackson apache-camel

java - marshall - camello apache y jackson



camel unmarshal json to pojo (1)

Estoy probando apache-camel, y he configurado una ruta básica que llama a un servicio http a través del componente http4, transforma el resultado a través de unmarshal (). Json (JsonLibrary.Jackson), y luego imprime parte de la respuesta en un componente de frijol

El problema que tengo es que explota en tiempo de ejecución cuando llega al json unmarhsaller:

No hay convertidor de tipos disponible para convertir de tipo: java.util.HashMap al tipo requerido: com.xxx.MyType

La respuesta es de este formato:

{"data":[{"x":"y"},{"x":"z"}]}

Y mi modelo de objetos es como:

@lombok.Data class Response { private List<Elem> data; } @lombok.Data class Elem { private String x; }

Entonces, parece que el unmarshaller cree que la respuesta es un mapa hash, mientras que yo quiero que se desmarque en una estructura de objeto. ¿Hay alguna manera de hacer que haga lo que yo quiero?


Encontré la respuesta, publicando en caso de que alguien más se encuentre con esto. El generador de rutas debe configurarse como:

from("direct:start").to("http4://...").unmarshal().json(JsonLibrary.Jackson,com.xxx.Response) .to("bean:com.xxx.MyResponseEchoer")

Es decir, pasar el tipo de clase al método json.