Преобразование параметров метода бобов верблюда
Я создаю верблюжий маршрут, первые шаги в порядке, но у меня проблемы с вызовом метода другого пакета osgi, который я сделал. Мой сервис ожидает длинное значение в параметре, и у моего pojo был только этот идентификатор.
Мой сервис:
public interface FooService {
void bar(Long id);
}
Мой маршрут:
<route>
<from uri="direct:anEntry"/>
<bean ref="myBean" method="bar"/>
</route>
И мой формат данных для маршрута:
public class MyDto implements Serializable {
private static final long serialVersionUID = 1L;
private Long myId;
public Long getMyId() {
return myId;
}
public void setMyId(Long myId) {
this.myId= myId;
}
@Override
public String toString() {
return "MyDto [myId=" + myId+ "]";
}
}
С этим кодом вы получили исключение NoTypeConversionAvailableException
Нет доступных преобразователей типов для преобразования из типа: my.company.MyDto в требуемый тип: java.lang.Long со значением MyDto [myId=141564]
Я не могу найти место, чтобы преобразовать Dto.
Я пытался заставить мой Сервис ожидать, что dto с той же структурой, что и маршрут, но у меня та же ошибка.
Любая идея?
2 ответа
Как говорит Кристиан, или вызовите метод getMyId для тела
<bean ref="myBean" method="bar(${body.myId})"/>
Смотрите подробности на
Вы можете добавить шаг в маршрут, где вы конвертируете из MyDto в Long. Например, для простого компонента с одним этим методом: Long getId(MyDto dto);
Или вы можете просто вставить длинную в тело маршрута, когда вы его называете.
Если вы хотите разделить MyDto между службой и маршрутом, убедитесь, что оно есть в отдельном комплекте вместе с интерфейсом службы, чтобы избежать проблем с загрузкой классов. Не встраивайте общие классы / интерфейсы.