【问题标题】:filter jms message with xquery, using apache camel wildfly使用 xquery 过滤 jms 消息,使用 apache camel wildfly
【发布时间】:2017-04-24 05:22:35
【问题描述】:

我在使用 apache camel 的 JMS 消息上使用 xquery 时遇到问题,并且 野蝇。

我的代码从 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 处理器
经过(毫秒)[测试] [测试] [jms://queue:test1
] [ 5] [测试] [to7 ] [日志:jms?showAll=true
] [ 1] [测试] [过滤器7] [过滤器[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.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)

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

【问题讨论】:

  • 以上代码适用于 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。如果消息来自文件端点,该代码也适用于所有版本。

标签: apache-camel xquery wildfly


【解决方案1】:

在独立的 camel 2.18.1 中遇到了同样的问题。

我认为这是由于升级到 Saxon 版本 9.7.0 导致的骆驼错误,它不再允许将空值放入查询上下文中 该错误位于类 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 2014-12-30
    • 1970-01-01
    • 2019-10-12
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多