апач верблюд и джексон - PullRequest
7 голосов
/ 28 июня 2011

Я пробую apache-camel, и я настроил базовый маршрут, который вызывает службу http через компонент http4, преобразует результат через unmarshal (). Json (JsonLibrary.Jackson), а затем распечатывает частьответа в компоненте бина.

Проблема, с которой я сталкиваюсь, заключается в том, что она взрывается во время выполнения, когда попадает в jmar unmarhsaller:

Нет доступных преобразователей типов для преобразования из типа: java.util.HashMapк требуемому типу: com.xxx.MyType

Ответ имеет следующий формат:

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

И моя объектная модель имеет вид:

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

@lombok.Data 
class Elem {
    private String x;
}

Таким образом, может показаться, что unmarshaller думает, что ответом является хеш-карта, тогда как я хочу, чтобы он распаковывался в структуру объекта.Есть ли способ заставить его делать то, что я хочу?

1 Ответ

12 голосов
/ 28 июня 2011

Нашел ответ, публикуя сообщения на случай, если кто-то еще столкнется с этим. Построитель маршрута должен быть настроен так:

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

т.е. передать тип класса методу json.

...