[mule-user] Strange error in XPath

20 views
Skip to first unread message

Pradeep Chaudhary

unread,
Jan 18, 2008, 5:31:00 AM1/18/08
to us...@mule.codehaus.org
I am getting following error for XPath parsing of xml request in my
custom component. The same code works perfectly fine a separate JUnit
test case. I am not able to figure out what could be issue. My guess
is that it is specific to mule environment and may be due to how the
libraries setup for xpath. I have attached source file of custom
component. Following is the xml request data :

<Request>
<service name='updatePassword'>
<parameter name='username' value='TestUser' />
<parameter name='password' value='password' />
</service>
</Request>

Any help is appreciated.

-----------------------------------------------------------------------------------------------------------------------
ERROR LOG
-----------------------------------------------------------------------------------------------------------------------
javax.xml.transform.TransformerException: Unknown error in XPath.
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:296)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
at com.in2m.mule.components.CustomComponent.onCall(CustomComponent.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.mule.impl.model.resolvers.DynamicEntryPoint.invokeMethod(DynamicEntryPoint.java:312)
at org.mule.impl.model.resolvers.DynamicEntryPoint.invoke(DynamicEntryPoint.java:259)
at org.mule.impl.DefaultLifecycleAdapter.intercept(DefaultLifecycleAdapter.java:194)
at org.mule.impl.InterceptorsInvoker.execute(InterceptorsInvoker.java:47)
at org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:258)
at org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:393)
at org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java:418)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:349)
at org.mule.routing.inbound.InboundRouterCollection.send(InboundRouterCollection.java:197)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:163)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:269)
at org.mule.providers.http.HttpMessageReceiver$HttpWorker.doGetOrPost(HttpMessageReceiver.java:233)
at org.mule.providers.http.HttpMessageReceiver$HttpWorker.processRequest(HttpMessageReceiver.java:177)
at org.mule.providers.http.HttpMessageReceiver$HttpWorker.run(HttpMessageReceiver.java:150)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xpath.internal.axes.AxesWalker.setRoot(AxesWalker.java:218)
at com.sun.org.apache.xpath.internal.axes.WalkingIterator.setRoot(WalkingIterator.java:153)
at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:211)
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
... 27 more
---------
java.lang.NullPointerException
at com.sun.org.apache.xpath.internal.axes.AxesWalker.setRoot(AxesWalker.java:218)
at com.sun.org.apache.xpath.internal.axes.WalkingIterator.setRoot(WalkingIterator.java:153)
at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:211)
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:268)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
at com.in2m.mule.components.CustomComponent.onCall(CustomComponent.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.mule.impl.model.resolvers.DynamicEntryPoint.invokeMethod(DynamicEntryPoint.java:312)
at org.mule.impl.model.resolvers.DynamicEntryPoint.invoke(DynamicEntryPoint.java:259)
at org.mule.impl.DefaultLifecycleAdapter.intercept(DefaultLifecycleAdapter.java:194)
at org.mule.impl.InterceptorsInvoker.execute(InterceptorsInvoker.java:47)
at org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:258)
at org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:393)
at org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java:418)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:349)
at org.mule.routing.inbound.InboundRouterCollection.send(InboundRouterCollection.java:197)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:163)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:269)
at org.mule.providers.http.HttpMessageReceiver$HttpWorker.doGetOrPost(HttpMessageReceiver.java:233)
at org.mule.providers.http.HttpMessageReceiver$HttpWorker.processRequest(HttpMessageReceiver.java:177)
at org.mule.providers.http.HttpMessageReceiver$HttpWorker.run(HttpMessageReceiver.java:150)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
--------------- linked to ------------------
javax.xml.xpath.XPathExpressionException
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:289)
at com.in2m.mule.components.CustomComponent.onCall(CustomComponent.java:52)


Pradeep

CustomComponent.java

andrew cooke

unread,
Jan 18, 2008, 6:12:40 AM1/18/08
to us...@mule.codehaus.org

don't know what version you are using, but
http://mule.mulesource.org/display/MULE/Building+from+Source might help.

andrew

> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
> http://xircles.codehaus.org/manage_email

---------------------------------------------------------------------
To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Pradeep Chaudhary

unread,
Jan 18, 2008, 6:53:31 AM1/18/08
to us...@mule.codehaus.org
I am using mule 1.4.3

Pradeep Chaudhary

unread,
Jan 18, 2008, 6:59:35 AM1/18/08
to us...@mule.codehaus.org
Following is my test case code which works fine:

import java.io.ByteArrayInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPathConstants ;

import junit.framework.TestCase;

public class TestJXpath extends TestCase {

    public TestJXpath(String name) {
        super(name);
    }

    public void testXpath() {
        try{
            String src = "<?xml version='1.0' encoding='UTF-8'?>"+
            "<Response>"+
                "<service name='updateprofile'>"+
                    "<parameter name='username' value='forPortalTest'/>"+
                    "<parameter name='password' value='password'/>" +
                "</service>" +
                "<service name='updatePass'>"+
                    "<parameter name='username' value='forPortalTest'/>"+
                    "<parameter name='password' value='password'/>" +
                "</service>" +
            "</Response>";
           
            ByteArrayInputStream bis = new ByteArrayInputStream(src.getBytes("UTF-8"));
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            org.w3c.dom.Document document = builder.parse(bis);
   
            javax.xml.xpath.XPath xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
            String expression = "//service[1]/@name";
            org.w3c.dom.Node widgetNode = (org.w3c.dom.Node) xpath.evaluate(expression, document, XPathConstants.NODE);
            System.out.println ("NODE "+widgetNode);
            System.out.println("RESULT name == '"+widgetNode.getNodeValue()+"'");
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

Pradeep


> org.mule.impl.model.resolvers.DynamicEntryPoint.invokeMethod (DynamicEntryPoint.java:312)
> >         at
> >
> org.mule.impl.model.resolvers.DynamicEntryPoint.invoke(DynamicEntryPoint.java:259)
> >         at
> >
> org.mule.impl.DefaultLifecycleAdapter.intercept (DefaultLifecycleAdapter.java:194)
> >         at
> > org.mule.impl.InterceptorsInvoker.execute(InterceptorsInvoker.java:47)
> >         at
> > org.mule.impl.model.DefaultMuleProxy.onCall (DefaultMuleProxy.java:258)
> >         at
> > org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:393)
> >         at
> >
> org.mule.impl.model.AbstractComponent.sendEvent (AbstractComponent.java:418)

> >         at org.mule.impl.MuleSession.sendEvent(MuleSession.java:349)
> >         at
> >
> org.mule.routing.inbound.InboundRouterCollection.send(InboundRouterCollection.java :197)
> >         at
> >
> org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:163)
> >         at
> >
> org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage (AbstractMessageReceiver.java:581)
> >         at
> >
> org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
> >         at
> >
> org.mule.providers.AbstractMessageReceiver.routeMessage (AbstractMessageReceiver.java:269)
> org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage (AbstractMessageReceiver.java:581)
> >         at
> >
> org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
> >         at
> >
> org.mule.providers.AbstractMessageReceiver.routeMessage (AbstractMessageReceiver.java:269)

andrew cooke

unread,
Jan 18, 2008, 4:56:26 PM1/18/08
to us...@mule.codehaus.org

shouldn't the xpath be "//service[1]@name"?

you have an extra "/"

andrew

ps also, not sure if it was clear, but the prev link i gave contains
details, or links to details, about how to configure your xml libraries
correctly.

> System.out.println("NODE "+widgetNode);

>> > > org.mule.impl.InterceptorsInvoker.execute(InterceptorsInvoker.java:47)
>> > > at
>> > > org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:258)
>> > > at
>> > > org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:393)
>> > > at
>> > >
>> > org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java
>> :418)
>> > > at org.mule.impl.MuleSession.sendEvent(MuleSession.java:349)
>> > > at
>> > >
>> > org.mule.routing.inbound.InboundRouterCollection.send(
>> InboundRouterCollection.java:197)
>> > > at
>> > >
>> > org.mule.routing.inbound.InboundRouterCollection.route(

>> InboundRouterCollection.java:163)
>> > > at
>> > >
>> >
>> org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage
>> (AbstractMessageReceiver.java:581)
>> > > at
>> > >
>> > org.mule.providers.AbstractMessageReceiver.routeMessage(
>> AbstractMessageReceiver.java:322)
>> > > at
>> > >
>> > org.mule.providers.AbstractMessageReceiver.routeMessage(
>> AbstractMessageReceiver.java:269)
>> > > at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.doGetOrPost(
>> HttpMessageReceiver.java:233)
>> > > at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.processRequest(
>> HttpMessageReceiver.java:177)
>> > > at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.run(

>> HttpMessageReceiver.java:150)

>> DelegatingMethodAccessorImpl.java:25)
>> > > at java.lang.reflect.Method.invoke(Method.java:585)
>> > > at
>> > >
>> > org.mule.impl.model.resolvers.DynamicEntryPoint.invokeMethod(
>> DynamicEntryPoint.java:312)
>> > > at
>> > >
>> > org.mule.impl.model.resolvers.DynamicEntryPoint.invoke(
>> DynamicEntryPoint.java:259)
>> > > at
>> > >
>> > org.mule.impl.DefaultLifecycleAdapter.intercept(
>> DefaultLifecycleAdapter.java:194)
>> > > at

>> > > org.mule.impl.InterceptorsInvoker.execute(InterceptorsInvoker.java:47)
>> > > at
>> > > org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:258)
>> > > at
>> > > org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:393)
>> > > at
>> > >
>> > org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java
>> :418)
>> > > at org.mule.impl.MuleSession.sendEvent(MuleSession.java:349)
>> > > at
>> > >
>> > org.mule.routing.inbound.InboundRouterCollection.send(
>> InboundRouterCollection.java:197)
>> > > at
>> > >
>> > org.mule.routing.inbound.InboundRouterCollection.route(

>> InboundRouterCollection.java:163)
>> > > at
>> > >
>> >
>> org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage
>> (AbstractMessageReceiver.java:581)
>> > > at
>> > >
>> > org.mule.providers.AbstractMessageReceiver.routeMessage(
>> AbstractMessageReceiver.java:322)
>> > > at
>> > >
>> > org.mule.providers.AbstractMessageReceiver.routeMessage(
>> AbstractMessageReceiver.java:269)
>> > > at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.doGetOrPost(
>> HttpMessageReceiver.java:233)
>> > > at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.processRequest(
>> HttpMessageReceiver.java:177)
>> > > at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.run(

>> HttpMessageReceiver.java:150)


>> > > at org.mule.impl.work.WorkerContext.run(WorkerContext.java
>> :310)
>> > > at
>> > >
>> >
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask
>> (ThreadPoolExecutor.java:650)
>> > > at
>> > >
>> >
>> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run

Pradeep Chaudhary

unread,
Jan 21, 2008, 12:57:03 AM1/21/08
to us...@mule.codehaus.org
Thanks for clarifying about the link. I referred the link and removed xml-apis-1.3.03.jar, xercesImpl-2.8.1.jar from the mule/lib/opt directory. According to jira issue  http://mule.mulesource.org/jira/browse/MULE-2700 there should not be any xml parsing related jars in the classpath which are available in Java (I am using 1.5.0_12) which causes classpath conflicts. Still I am getting the same error.

NOTE: the xpath is correct. I verified it by removing the "/" and it gives errors.

Pradeep

>> > > org.mule.impl.InterceptorsInvoker.execute (InterceptorsInvoker.java:47)
>> > >         at
>> > > org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:258)
>> > >         at
>> > > org.mule.impl.model.seda.SedaComponent.doSend (SedaComponent.java:393)
>> > >         at
>> > >
>> > org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java
>> :418)
>> > >         at org.mule.impl.MuleSession.sendEvent (MuleSession.java:349)
>> :268)
>> > >         at
>> > > com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java
>> :213)
>> > >         at
>> > >
>> > com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java
>> :275)
>> > >         at
>> > > com.in2m.mule.components.CustomComponent.onCall(CustomComponent.java
>> :52)
>> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> > >         at
>> > >
>> > sun.reflect.NativeMethodAccessorImpl.invoke (
>> NativeMethodAccessorImpl.java:39)
>> > >         at
>> > >
>> > sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> DelegatingMethodAccessorImpl.java:25)
>> > >         at java.lang.reflect.Method.invoke(Method.java:585)
>> > >         at
>> > >
>> > org.mule.impl.model.resolvers.DynamicEntryPoint.invokeMethod(
>> DynamicEntryPoint.java:312)
>> > >         at
>> > >
>> > org.mule.impl.model.resolvers.DynamicEntryPoint.invoke(
>> DynamicEntryPoint.java:259)
>> > >         at
>> > >
>> > org.mule.impl.DefaultLifecycleAdapter.intercept(
>> DefaultLifecycleAdapter.java:194)
>> > >         at
>> > > org.mule.impl.InterceptorsInvoker.execute (InterceptorsInvoker.java:47)
>> > >         at
>> > > org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:258)
>> > >         at
>> > > org.mule.impl.model.seda.SedaComponent.doSend (SedaComponent.java:393)
>> > >         at
>> > >
>> > org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java
>> :418)
>> > >         at org.mule.impl.MuleSession.sendEvent (MuleSession.java:349)

>> > >         at
>> > >
>> > org.mule.routing.inbound.InboundRouterCollection.send(
>> InboundRouterCollection.java:197)
>> > >         at
>> > >
>> > org.mule.routing.inbound.InboundRouterCollection.route(
>> InboundRouterCollection.java:163)
>> > >         at
>> > >
>> >
>> org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage
>> (AbstractMessageReceiver.java:581)
>> > >         at
>> > >
>> > org.mule.providers.AbstractMessageReceiver.routeMessage (
>> AbstractMessageReceiver.java:322)
>> > >         at
>> > >
>> > org.mule.providers.AbstractMessageReceiver.routeMessage(
>> AbstractMessageReceiver.java:269)
>> > >         at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.doGetOrPost(
>> HttpMessageReceiver.java:233)
>> > >         at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.processRequest(
>> HttpMessageReceiver.java:177)
>> > >         at
>> > >
>> > org.mule.providers.http.HttpMessageReceiver$HttpWorker.run (

Dirk Olmes

unread,
Jan 21, 2008, 4:56:27 AM1/21/08
to us...@mule.codehaus.org
Pradeep Chaudhary wrote:
> Thanks for clarifying about the link. I referred the link and removed
> xml-apis-1.3.03.jar, xercesImpl-2.8.1.jar from the mule/lib/opt
> directory. According to jira issue
> http://mule.mulesource.org/jira/browse/MULE-2700 there should not be any xml parsing related jars in the classpath which are available in Java
> (I am using 1.5.0_12) which causes classpath conflicts. Still I am
> getting the same error.

We recently tried building Mule (2.x) using JDK 1.5. Bottom line here is
the same as for 1.4: you *need* the xml libs in your JDK's endorsed dir
or you'll see all kinds of weird errors when handling XML.

-dirk

Pradeep Chaudhary

unread,
Jan 21, 2008, 9:20:34 AM1/21/08
to us...@mule.codehaus.org
Thanks for the replies. Error was due to a null document object. After handling the condition it is working fine without any library changes.

Thanks,
Pradeep
Reply all
Reply to author
Forward
0 new messages