2016-12-08 2 views
1

Ich habe ein Problem, xquery auf eine JMS-Nachricht mit Apache Kamel und Wildfly verwenden.Filter JMS Nachricht mit Xquery, mit Apache Kamel Wildfly

Mein Code liest aus einer JMS-Warteschlange und versucht, die Nachricht

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"); 

zu filtern Wenn ich den Code mit der Nachricht ausführen <person><name>james</name><person> ich den Fehler:

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)

ich nicht tun verstehen warum! Kann mir jemand bei diesem Problem helfen ??

+0

Der obige Code funktioniert für Wildfly 9.0.2 final nicht das einzige Problem ist, mit wildfly-camel-patch-3.3.0 aber nicht mit wildfly 10.1.0 final und wildfly-camel-patch 4.3.0 und 4.4.0. Der Code funktioniert auch in allen Versionen, wenn die Nachricht von einem Dateiendpunkt kommt. – anpt

Antwort

1

Das gleiche Problem mit dem eigenständigen Kamel 2.18.1 wurde festgestellt.

Ich glaube, das ist ein Bug in camel verursacht durch ein Upgrade auf Saxon Version 9.7.0, die nicht mehr erlaubt, Null-Werte in Abfrage Kontext setzen Der Fehler ist in der Klasse org.apache.camel.component.xquery. XQueryBuilder. Es wird versucht, alle Exchange-Header und -Eigenschaften zum Abfrageausführungskontext in der Methode org.apache.camel.component.xquery.XQueryBuilder # configureQuery hinzuzufügen. Wenn einer der Header oder Eigenschaften NULL-Werte hat (und im Falle von JMS-Nachrichten viele Header vorhanden sind), wird eine Ausnahme ausgelöst.

Ich konnte das Problem reproduzieren, und es scheint, es mit xquery in Kamel 2,18

ich angemeldet habe eine jira Ausgabe https://issues.apache.org/jira/browse/CAMEL-10653

Verwandte Themen