我正在尝试在拦截器中调用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工作?
答案 0 :(得分:1)
使用OSGi蓝图AFAIR时,Camel中有一个错误导致bean参数上的@XPath不起作用。
最近发布的Camel已经修复,并且还在客户门户网站上提供了JBoss Fuse补丁。
作为一种解决方法,您始终可以自己在bean中执行xpath。