在bean调用中忽略了Camel @XPath和@Body

时间:2014-01-02 09:25:41

标签: xpath apache-camel blueprint-osgi

我正在尝试在拦截器中调用bean并使用注释绑定一些参数但是当调用该方法时,似乎忽略了注释,而是将body绑定到第一个参数,第二个参数为null

我使用Blueprint DSL尝试了相同的XPath,它工作正常,所以我确定这不是问题。我的方法是这样的: -

public void intercept(
        @XPath(value = "//custom:myElement/text()", 
               namespaces = { @NamespacePrefix(prefix = "custom", uri = "http://my.website.com/custom") }, 
               resultType = String.class) String elementValue,
        @Body String body) {
    LOG.info("elementValue {}", elementValue);
    LOG.info("body {}", body);
}

我的拦截器是这样的。

<camel:interceptSendToEndpoint uri="direct:core-service">
    <camel:to uri="bean:interceptor?method=intercept" />
</camel:interceptSendToEndpoint>

当调用拦截器时,我会为第一个日志语句打印一个完整的肥皂信封,为另一个日志语句打印null。

我是否需要做任何事情来使这个bean注释明白?从documentation看起来我只需要添加如上所述的注释。我无法相信它只是不起作用。

这是在JBose Fuse中运行的,所以如果它有所不同,那就是它的骆驼2.10。

更新

我已经尝试从问题中移除拦截器,只是在一个简单的路线中执行它仍然无法正常工作。我是否需要以某种方式将传入的String类型转换为XML,或者它是否需要是正文中的JAXB实体才能使@XPath工作?

1 个答案:

答案 0 :(得分:1)

使用OSGi蓝图AFAIR时,Camel中有一个错误导致bean参数上的@XPath不起作用。

最近发布的Camel已经修复,并且还在客户门户网站上提供了JBoss Fuse补丁。

作为一种解决方法,您始终可以自己在bean中执行xpath。