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

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

Есть идеи?


person Ceddoc    schedule 05.05.2014    source источник


Ответы (2)


Как говорит Кристиан, или вызовите метод getMyId на теле

<bean ref="myBean" method="bar(${body.myId})"/>

Подробнее см. на

person Claus Ibsen    schedule 06.05.2014

Вы можете добавить шаг в маршруте, где вы конвертируете из MyDto в Long. Например, с простым bean-компонентом с помощью одного метода: Long getId(MyDto dto);

Или вы можете просто поместить длинное значение в тело маршрута, когда вы его вызываете.

Если вы хотите совместно использовать MyDto между сервисом и маршрутом, убедитесь, что он находится в отдельном пакете вместе с интерфейсом сервиса, чтобы избежать проблем с загрузкой классов. Не вставляйте общие классы/интерфейсы.

person Christian Schneider    schedule 05.05.2014