Hi Friends,

I want to execute xpath in my code.  It means; I have xpath expression, I have 
exchange object with In Message.

Using 'XPathExpression' and 'XPathBuilder' classes; I succeed to do so.  Below 
is the code snippet.

        XPathExpression xpathExprObj = new 
XPathExpression("/userResponse/User/id");
        xpathExprObj.setResultType(String.class);

        Object result = xpathExprObj.evaluate(exchange, Object.class);
        
But, if I have xpath with namespace (i.e xpath = /ns0:userResponse/User/id).. 
above code throwing exception .. saying - Prefix must resolve to a namespace: 
ns0

Part of Exception:

org.apache.camel.builder.xml.InvalidXPathExpression: Invalid xpath: 
/ns0:userResponse/User/id. Reason: javax.xml.xpath.XPathExpressionException
at org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:767) 
~[bundlefile:2.11.2-sap-02]
at org.apache.camel.builder.xml.XPathBuilder.evaluate(XPathBuilder.java:748) 
~[bundlefile:2.11.2-sap-02]
at org.apache.camel.builder.xml.XPathBuilder.evaluate(XPathBuilder.java:168) 
~[bundlefile:2.11.2-sap-02]
at *** My project code calling from here ..
..........
-------
Caused by: 
com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix 
must resolve to a namespace: ns0
at 
com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:653)
 ~[na:1.6.0_33]
at com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:638) 
~[na:1.6.0_33]
at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:265) 
~[na:1.6.0_33]
at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:96) 
~[na:1.6.0_33]
at 
com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:110)
 ~[na:1.6.0_33]
at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:176) ~[na:1.6.0_33]
at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:264) ~[na:1.6.0_33]
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:385) 
~[na:1.6.0_33]

Upon digging; I found that .. I need to set namespaces to XPathExpression 
object .. So, I need list of all namespace.
I am using blueprint beans.xml .. so I need list of all namespaces defined with 
blueprint tag in beans.xml.

I have camel exchange and camel endpoint object with me.
I want programmatic solution.

Thanks,
Nurali 

Reply via email to