XPathAPI: eval exp using nodes with default namespace 2006-09-12 - By Karr, David
Xalan 2.7.0, JDK 1.4.2, WebLogic 8.1.4.
I'm trying to write xpath validation expressions for the following SOAP message (slightly edited). I could use some help understanding what I'm seeing here, and how to make this work well.
---------------- <?xml version="1.0" encoding="utf-8" standalone="yes"?> <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ReportResponse xmlns="http://..."> <ReportUrl>https://.../Test%20Portfolio.csv</ReportUrl> <Warnings/><Errors/> </ReportResponse> </soapenv:Body> </soapenv:Envelope> ----------------
I'm processing this with code like this:
---------------- SOAPPart soapPart = message.getSOAPPart(); Source xmlSource = soapPart.getContent(); TransformerFactory transformerFactory TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMResult domResult = new DOMResult(); transformer.transform(xmlSource, domResult); Node node = domResult.getNode(); System.out.println("node[" + node + "]");
Element documentElement = ((Document) node).getDocumentElement();
for (Iterator iter = xpathStrs.iterator(); iter.hasNext(); ) { String xpathStr = (String) iter.next(); XObject object = XPathAPI.eval(documentElement, xpathStr, node); System.out.println("object[" + object + "]"); } ----------------
When I evaluate this expression: /soapenv:Envelope
It fails, saying that "soapenv" must resolve to a namespace.
I then tried instead: /env:Envelope
This works (the Xobject is not null). I'm not sure why this works, and the other one does not.
Next, I tried the expression: /env:Envelope/env:Body/ReportResponse
This fails. I'm guessing it has something to do with the fact that I'm trying to use the default namespace, but I think referencing no prefix in Xpath means to use "no namespace", which isn't the same thing.
What's going on here, and what do I need to do differently?
|
|