用xquery过滤jms消息,使用apache camel wildfly

时间:2016-12-08 20:39:43

标签: apache-camel xquery wildfly

我有问题在使用apache camel和JMS消息上使用xquery wildfly。

我的代码从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");

当我使用消息运行代码时 <person><name>james</name><person>我收到错误:

  

消息历史记录   -------------------------------------------------- -------------------------------------------------- ----------------------------------- RouteId ProcessorId Processor
  经过(ms)[测试] [测试]   [JMS://队列:TEST1
  ] [5] [测试] [to7]   [日志:JMS SHOWALL =真
  ] [1] [测试] [filter7]   [过滤器[{的XQuery的XQuery [net.sf.saxon.query.XQueryExpression@3af367ad]}]   ] [2]

     

堆栈跟踪   -------------------------------------------------- -------------------------------------------------- -----------------------------------:org.apache.camel.RuntimeExpressionException:   java.lang.NullPointerException:外部对象无法包装Java   null at   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.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)     在   org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)

我不明白为什么!任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

遇到与独立骆驼2.18.1相同的问题。

我相信这是由升级到Saxon版本9.7.0引起的驼峰错误,它不再允许将null值放入查询上下文中 该错误位于org.apache.camel.component.xquery.XQueryBuilder类中。它尝试将所有Exchange标头和属性添加到方法org.apache.camel.component.xquery.XQueryBuilder #configureQuery中查询执行上下文。如果任何标头或属性具有空值(并且在JMS消息的情况下将有许多标头),则抛出异常。

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

我已经记录了jira问题https://issues.apache.org/jira/browse/CAMEL-10653