0

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

我已经使用 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 注释知道吗?从文档看来,我只需要像上面那样添加注释。我不敢相信它只是行不通。

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

更新

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

4

1 回答 1

1

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

它在最近发布的 Camel 中得到修复,并且在客户门户中提供的 JBoss Fuse 补丁中也得到了修复。

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

于 2014-01-02T16:03:16.233 回答