Apache camel 使用ApacheCamel wildfly使用xquery过滤jms消息

Apache camel 使用ApacheCamel wildfly使用xquery过滤jms消息,apache-camel,xquery,wildfly,Apache Camel,Xquery,Wildfly,我在使用ApacheCamel和 野蝇 我的代码从jms队列读取并尝试过滤消息 import org.apache.camel.builder.RouteBuilder; import org.apache.camel.cdi.ContextName; import org.apache.camel.component.jms.JmsComponent; import org.wildfly.extension.camel.CamelAware; import javax.annotation

我在使用ApacheCamel和 野蝇

我的代码从jms队列读取并尝试过滤消息

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.cdi.ContextName;
import org.apache.camel.component.jms.JmsComponent;
import org.wildfly.extension.camel.CamelAware;

import javax.annotation.Resource;
import javax.ejb.Startup;
import javax.enterprise.context.ApplicationScoped;
import javax.jms.ConnectionFactory;


@Startup
@CamelAware
@ApplicationScoped
@ContextName("test")
class MyRouteBuilder extends RouteBuilder {


    @Resource(mappedName = "java:jboss/DefaultJMSConnectionFactory")
    private ConnectionFactory connectionFactory;

    @Override
    public void configure() throws Exception {

        getContext().addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));


        from("jms:queue:test1").
                routeId("test").
                to("log:jms?showAll=true").
                filter().xquery("fn:contains(//person/name/text(),'james')").
                to("file://Users/asse/Outbound");
当我运行带有消息的代码时
james
我得到一个错误:

消息历史记录 ---------------------------------------------------------------------------------------------------------------------------------------RouteId处理器ID处理器
已用时间(毫秒)[测试][测试] [jms://queue:test1
][5][测试][to7] [日志:jms?showAll=true
][1][test][filter7] [filter[xquery{xquery[net.sf.saxon.query。XQueryExpression@3af367ad]}] ][2]

堆栈跟踪 ---------------------------------------------------------------------------------------------------------------------------------------:org.apache.camel.RuntimeExpressionException: java.lang.NullPointerException:外部对象无法包装java 无效于 org.apache.camel.component.xquery.XQueryBuilder.matches(XQueryBuilder.java:220) 在 org.apache.camel.processor.FilterProcessor.matches(FilterProcessor.java:65) 在 org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:51) 在 org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 在 org.apache.camel.processor.RedeliveryRorHandler.process(RedeliveryRorHandler.java:542) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)


我不明白为什么!有人能帮我解决这个问题吗?

在单机版camel 2.18.1中遇到了同样的问题

我相信这是由于升级到Saxon版本9.7.0导致的camel中的一个错误,该版本不再允许将空值放入查询上下文中 该bug位于org.apache.camel.component.xquery.XQueryBuilder类中。它试图将所有Exchange头和属性添加到方法org.apache.camel.component.xquery.XQueryBuilder#configureQuery中的查询执行上下文中。如果任何头或属性都有空值(在JMS消息的情况下会有很多头),则会引发异常

我能够重现这个问题,而且这似乎不是骆驼2.18中xquery的唯一问题


我已经记录了一个jira问题

上述代码适用于wildfly 9.0.2 final和wildfly-camel-patch-3.3.0,但不适用于wildfly 10.1.0 final和wildfly camel patch 4.3.0和4.4.0。如果消息来自文件端点,则代码也适用于所有版本。