2016-12-08 4 views
1

У меня проблема с использованием xquery в сообщении JMS с использованием верблюда apache и wildfly.фильтр jms сообщение с xquery, используя apache camel 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> я получаю ошибку:

Message History --------------------------------------------------------------------------------------------------------------------------------------- RouteId ProcessorId Processor
Elapsed (ms) [test ] [test ] [jms://queue:test1
] [ 5] [test ] [to7 ] [log:jms?showAll=true
] [ 1] [test ] [filter7 ] [filter[xquery{XQuery[[email protected]]}] ] [ 2]

Stacktrace ---------------------------------------------------------------------------------------------------------------------------------------: org.apache.camel.RuntimeExpressionException: java.lang.NullPointerException: External object cannot wrap a Java null at org.apache.camel.component.xquery.XQueryBuilder.matches(XQueryBuilder.java:220) at org.apache.camel.processor.FilterProcessor.matches(FilterProcessor.java:65) at org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:51) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)

я не делаю понять почему! Может ли кто-нибудь помочь мне с этой проблемой?

+0

Приведенный выше код работает для wildfly 9.0.2 финал с wildfly-camel-patch-3.3.0, но не с wildfly 10.1.0 final и wildfly-camel-patch 4.3.0 и 4.4.0. Код также работает во всех версиях, если сообщение поступает из конечной точки файла. – anpt

ответ

1

Обнаружена та же проблема с автономным верблюдом 2.18.1.

Я считаю, что это ошибка на верблюде, вызванная обновлением до версии Saxon 9.7.0, которая больше не позволяет пустым значениям помещаться в контекст запроса. Ошибка находится в классе org.apache.camel.component.xquery. XQueryBuilder. Он пытается добавить все заголовки и свойства Exchange для запроса контекста выполнения в методе org.apache.camel.component.xquery.XQueryBuilder # configureQuery. Если какой-либо из заголовков или свойств имеет нулевые значения (а в случае JMS-сообщения будет много заголовков), генерируется исключение.

Я был в состоянии воспроизвести проблему, и кажется, что это не единственная проблема, с XQuery в верблюд 2,18

Я зарегистрировал Issue JIRA https://issues.apache.org/jira/browse/CAMEL-10653

Смежные вопросы