XPath doesn't return attribute value
------------------------------------
Key: SYNAPSE-557
URL: https://issues.apache.org/jira/browse/SYNAPSE-557
Project: Synapse
Issue Type: Bug
Components: Core
Reporter: Bill Harts
Problem:
An XPath expression in my synapse.xml configuration file is unable to retrieve
an XML attribute from a message. Example:
<log level="custom">
<property name="sessID"
expression="//cfl:LoginResponse/cfl:LoginResponseData/@sessionID"
xmlns:cfl="http:www.test.com/cfl" />
</log>
The message body is:
<soapenv:Body>
<cfl:LoginResponse xmlns:cfl="http://www.test.com/cfl">
<cfl:LoginResponseData sessionID="250446AD43C0EEF3ED2F3172F8FA0A3D"
statusCode="0"/>
</cfl:LoginResponse>
</soapenv:Body>
In this case the log mediator always returns null for the sessID variable.
Cause:
After poking around in a bunch of modules I believe that these XPath
expressions are being handled in module synapseXPath.java. Specifically there
is a call in stringValueOf(MessageContext synCtx) to BaseXPath.evaluate() which
returns a List of element pointers retrieved by the XPath expression. The
function then correctly checks each element to to determine if it is of type
OMTextImpl, OMElementImpl or OMDocumentImpl but when an attribute has been
found evaluate() returns an attribute of type DocumentNavigator$OMAttributeEx.
It appears that there is no code in stringValueOf() to handle this type of
pointer.
Solution:
I added the following code to synapseXpath.java::stringValueOf at line 206:
...
} else if (o instanceof OMAttributeEx) {
textValue.append(
((OMAttributeEx)o).getAttributeValue());
}
...
Also, since the type OMAttributeEx is an inner class of type DocumentNavigator
I needed to add an import statement in SynapseXPath.java:
import org.apache.axiom.om.xpath.DocumentNavigator.OMAttributeEx;
Unfortunately, OMAtributeEx is defined as private to class DocumentNavigator so
I had to declare class and constructor OMAttributeEx as public in the module
DocumentNavigator.java in the Axiom project module axiom-api.jar.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]