1

我正在创建骆驼路线,第一步还可以,但我无法调用我制作的另一个 osgi 包的方法。我的服务期望参数中有一个 Long 值,而我的 pojo 只有这个 id。

我的服务:

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,但我有同样的错误。

任何的想法?

4

2 回答 2

2

正如Christian所说,或者在body上调用getMyId方法

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

查看更多详情

于 2014-05-06T06:13:05.037 回答
0

您可以在从 MyDto 转换为 Long 的路径中添加一个步骤。例如,使用这种方法的简单 bean: Long getId(MyDto dto);

或者,您可以在调用它时简单地将 long 放入路由主体中。

如果您想在服务和路由之间共享 MyDto,请确保将其与服务接口一起放在单独的捆绑包中,以避免类加载问题。不要嵌入共享类/接口。

于 2014-05-05T16:02:23.423 回答