Apache camel 使用ApacheCamel wildfly使用xquery过滤jms消息
我在使用ApacheCamel和 野蝇 我的代码从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
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。如果消息来自文件端点,则代码也适用于所有版本。