Преобразование параметров метода бобов верблюда

Я создаю верблюжий маршрут, первые шаги в порядке, но у меня проблемы с вызовом метода другого пакета 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 между службой и маршрутом, убедитесь, что оно есть в отдельном комплекте вместе с интерфейсом службы, чтобы избежать проблем с загрузкой классов. Не встраивайте общие классы / интерфейсы.

Другие вопросы по тегам