Is it possible to use a Java method extension function as EIP filter XPath
predicate?

I'm trying to implement the EIP filter pattern using a Java extension
function. The function does a check and either returns true or false based
on which the message is filtered out.

On arrival of messages I get the following NPE:


javax.jbi.messaging.MessagingException:
javax.xml.xpath.XPathExpressionException:
javax.xml.transform.TransformerException: Unknown error in XPath.
        at
org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:104)
        at
org.apache.servicemix.eip.support.XPathPredicate.matches(XPathPredicate.java:49)
        at
org.apache.servicemix.eip.patterns.MessageFilter.processAsync(MessageFilter.java:185)
        at org.apache.servicemix.eip.EIPEndpoint.process(EIPEndpoint.java:241)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:410)
        at
org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:43)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:624)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:169)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:177)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:227)
        at
org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291)
        at
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:748)
        at java.lang.Thread.run(Thread.java:595)
Caused by: javax.xml.xpath.XPathExpressionException:
javax.xml.transform.TransformerException: Unknown error in XPath.
        at
org.apache.xpath.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:191)
        at
org.apache.servicemix.expression.JAXPBooleanXPathExpression.evaluateXPath(JAXPBooleanXPathExpression.java:37)
        at
org.apache.servicemix.expression.JAXPXPathExpression.evaluate(JAXPXPathExpression.java:97)
        ... 12 more
Caused by: javax.xml.transform.TransformerException: Unknown error in XPath.
        at org.apache.xpath.XPath.execute(XPath.java:363)
        at org.apache.xpath.XPath.execute(XPath.java:301)
        at
org.apache.xpath.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
        at
org.apache.xpath.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
        at
org.apache.xpath.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
        ... 14 more
Caused by: java.lang.NullPointerException
        at
org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:206)
        at org.apache.xpath.XPath.execute(XPath.java:335)
        ... 18 more


My filter is configured as follows:


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:eip="http://servicemix.apache.org/eip/1.0";
        xmlns:ci="http://test/test";>

        <eip:message-filter service="ci:core-inbound-double-message-filter"
                endpoint="endpoint">
                <eip:target>
                        <eip:exchange-target
                                service="ci:core-inbound-enhancer-pipeline" />
                </eip:target>
                <eip:filter>
                        <eip:xpath-predicate
                                xpath="filter:check(string(/header/value))"
                                namespaceContext="#nsContext" />
                </eip:filter>
        </eip:message-filter>

        <eip:namespace-context id="nsContext">
                <eip:namespaces>
                        <eip:namespace
prefix="filter">java:test.DoubleMessageFilter</eip:namespace>
                </eip:namespaces>
        </eip:namespace-context>

</beans>

The DoubleMessageFilter class is available on the classpath and has a static
check method which returns a boolean value.

Is it possible what I'm trying to achieve or do I need a different approach?
Input appreciated.


-- 
View this message in context: 
http://www.nabble.com/Java-method-extension-function-as-EIP-filter-predicate-tf2815187s12049.html#a7856577
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to