camel bean方法参数转换

时间:2014-05-05 15:36:04

标签: apache osgi apache-camel spring-dm

我正在创建一个骆驼路线,第一步是可以的,但我无法调用我制作的另一个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具有与其中一条路线相同的结构,但我有同样的错误。

任何想法?

2 个答案:

答案 0 :(得分:1)

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

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

详情请见

答案 1 :(得分:0)

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

或者,当你打电话时,你可以简单地将一条龙放入路线中。

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