Author: ruwan
Date: Fri Apr 4 09:24:12 2008
New Revision: 644758
URL: http://svn.apache.org/viewvc?rev=644758&view=rev
Log:
Earlier SynapseXPath was extended from the AXIOMXPath, and this lead
to some problems hence we are using a custom Variable and Function
contexts and delegate the resolver action. As proposed by andreas,
removing the inheritance and used composition instead to overcome
the issues. So now, SynapseXPath is *not* an AXIOMXPath rather
SynapseXPath contains an AXIOMXPath.
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
config/xml/OMElementUtils.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/MediatorProperty.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/builtin/PropertyMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/builtin/RMSequenceMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/db/AbstractDBMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/ext/AnnotatedCommandMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/ext/POJOCommandMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/filters/FilterMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/filters/SwitchMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/transform/FaultMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/transform/HeaderMediator.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
util/xpath/SynapseXPath.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
util/xpath/ThreadSafeDelegatingVariableContext.java
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
core/axis2/Axis2MessageContextTest.java
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
mediators/builtin/PropertyMediatorTest.java
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
util/SynapseXPathTest.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/config/xml/OMElementUtils.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/OMElementUtils.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
config/xml/OMElementUtils.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
config/xml/OMElementUtils.java Fri Apr 4 09:24:12 2008
@@ -27,6 +27,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.SynapseException;
+import org.apache.synapse.util.xpath.SynapseXPath;
import org.jaxen.JaxenException;
import java.util.Iterator;
@@ -88,6 +89,41 @@
try {
xpath.addNamespace(n.getPrefix(),
n.getNamespaceURI());
+ } catch (JaxenException je) {
+ String msg = "Error adding declared name
space with prefix : "
+ + n.getPrefix() + "and uri : " +
n.getNamespaceURI()
+ + " to the XPath : " + xpath;
+ log.error(msg);
+ throw new SynapseException(msg, je);
+ }
+ }
+ }
+
+ OMContainer parent = currentElem.getParent();
+ //if the parent is a document element or parent is
null ,then return
+ if (parent == null || parent instanceof OMDocument) {
+ return;
+ }
+ if (parent instanceof OMElement) {
+ currentElem = (OMElement) parent;
+ }
+ }
+ }
+
+ public static void addNameSpaces(SynapseXPath xpath, OMElement
elem, Log log) {
+
+ OMElement currentElem = elem;
+
+ while (currentElem != null) {
+ Iterator it = currentElem.getAllDeclaredNamespaces();
+ while (it.hasNext()) {
+
+ OMNamespace n = (OMNamespace) it.next();
+ // assume the behavior of attributes as unqualified
from default
+ if (n != null && !"".equals(n.getPrefix())) {
+
+ try {
+ xpath.addNamespace(n);
} catch (JaxenException je) {
String msg = "Error adding declared name
space with prefix : "
+ n.getPrefix() + "and uri : " +
n.getNamespaceURI()
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/MediatorProperty.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorProperty.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/MediatorProperty.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/MediatorProperty.java Fri Apr 4 09:24:12 2008
@@ -68,7 +68,7 @@
}
public String getEvaluatedExpression(MessageContext synCtx) {
- return expression.getStringValue(synCtx);
+ return expression.stringValueOf(synCtx);
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/builtin/PropertyMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/builtin/PropertyMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/builtin/PropertyMediator.java Fri Apr 4 09:24:12 2008
@@ -75,7 +75,7 @@
if (action == ACTION_SET) {
- String resultValue = (value != null ? value :
expression.getStringValue(synCtx));
+ String resultValue = (value != null ? value :
expression.stringValueOf(synCtx));
if (traceOrDebugOn) {
traceOrDebug(traceOn, "Setting property : " + name +
" at scope : " +
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/builtin/RMSequenceMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/RMSequenceMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/builtin/RMSequenceMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/builtin/RMSequenceMediator.java Fri Apr 4 09:24:12 2008
@@ -154,7 +154,7 @@
private String getCorrelationValue(MessageContext smc) {
OMElement node = null;
try {
- node = (OMElement)
getCorrelation().selectSingleNode(smc.getEnvelope());
+ node = (OMElement)
getCorrelation().selectSingleNode(smc);
if (node != null) {
return node.getText();
@@ -183,7 +183,7 @@
return false;
} else {
try {
- return
getLastMessage().booleanValueOf(smc.getEnvelope());
+ return getLastMessage().booleanValueOf(smc);
} catch (JaxenException e) {
handleException("Error evaluating XPath expression
to determine if last message : " +
getLastMessage(), e, smc);
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/db/AbstractDBMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/db/AbstractDBMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/db/AbstractDBMediator.java Fri Apr 4 09:24:12 2008
@@ -175,7 +175,7 @@
Statement.Parameter param = (Statement.Parameter)
pi.next();
String value = (param.getPropertyName() != null ?
- param.getPropertyName() :
param.getXpath().getStringValue(msgCtx));
+ param.getPropertyName() :
param.getXpath().stringValueOf(msgCtx));
if (traceOrDebugOn) {
traceOrDebug(traceOn, "Setting as parameter : " +
column + " value : " + value +
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/ext/AnnotatedCommandMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/AnnotatedCommandMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/ext/AnnotatedCommandMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/ext/AnnotatedCommandMediator.java Fri Apr 4 09:24:12 2008
@@ -84,7 +84,7 @@
SynapseXPath xpath = beforeFields.get(f);
Object v;
if (f.getType().equals(String.class)) {
- v = xpath.getStringValue(synCtx);
+ v = xpath.stringValueOf(synCtx);
} else {
throw new UnsupportedOperationException("non-String
types not supportted yet");
}
@@ -99,7 +99,7 @@
SynapseXPath xpath = beforeMethods.get(m);
Object v;
if (m.getParameterTypes().length == 1 &&
m.getParameterTypes()[0].equals(String.class)) {
- v = xpath.getStringValue(synCtx);
+ v = xpath.stringValueOf(synCtx);
} else {
throw new UnsupportedOperationException("non-String
types not supportted yet");
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/ext/POJOCommandMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/POJOCommandMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/ext/POJOCommandMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/ext/POJOCommandMediator.java Fri Apr 4 09:24:12 2008
@@ -137,7 +137,7 @@
String name = (String) iter.next();
SynapseXPath xpath = messageSetterProperties.get(name);
- String value = xpath.getStringValue(synCtx);
+ String value = xpath.stringValueOf(synCtx);
setInstanceProperty(name, value, commandObject, synCtx);
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/filters/FilterMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/filters/FilterMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/filters/FilterMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/filters/FilterMediator.java Fri Apr 4 09:24:12 2008
@@ -159,13 +159,13 @@
if (xpath != null) {
try {
- return xpath.booleanValueOf(synCtx.getEnvelope());
+ return xpath.booleanValueOf(synCtx);
} catch (JaxenException e) {
handleException("Error evaluating XPath expression :
" + xpath, e, synCtx);
}
} else if (source != null && regex != null) {
- String sourceString = source.getStringValue(synCtx);
+ String sourceString = source.stringValueOf(synCtx);
if (sourceString == null) {
if (traceOrDebugOn) {
traceOrDebug(traceOn, "Source String : " +
source + " evaluates to null");
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/filters/SwitchMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/filters/SwitchMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/filters/SwitchMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/filters/SwitchMediator.java Fri Apr 4 09:24:12 2008
@@ -68,7 +68,7 @@
setEffectiveTraceState(synCtx);
int myEffectiveTraceState = synCtx.getTracingState();
- String sourceText = source.getStringValue(synCtx);
+ String sourceText = source.stringValueOf(synCtx);
if (traceOrDebugOn) {
traceOrDebug(traceOn, "XPath : " + source + " evaluates
to : " + sourceText);
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/transform/FaultMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/transform/FaultMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/transform/FaultMediator.java Fri Apr 4 09:24:12 2008
@@ -146,7 +146,7 @@
} else if (faultDetailExpr != null) {
- String faultDetail =
faultDetailExpr.getStringValue(synCtx);
+ String faultDetail =
faultDetailExpr.stringValueOf(synCtx);
if (traceOrDebugOn) {
traceOrDebug(traceOn, "Setting the fault detail : "
@@ -166,7 +166,7 @@
} else if (faultReasonExpr != null) {
- String faultReason =
faultReasonExpr.getStringValue(synCtx);
+ String faultReason =
faultReasonExpr.stringValueOf(synCtx);
faultPayload.setText(faultReason);
if (traceOrDebugOn) {
@@ -304,7 +304,7 @@
} else if (faultCodeValue != null) {
fault_code = faultCodeValue;
} else {
- fault_code =
QName.valueOf(faultCodeExpr.getStringValue(synCtx));
+ fault_code =
QName.valueOf(faultCodeExpr.stringValueOf(synCtx));
}
SOAPFaultCode code = factory.createSOAPFaultCode();
@@ -328,7 +328,7 @@
} else if (faultReasonValue != null) {
reasonString = faultReasonValue;
} else {
- reasonString = faultReasonExpr.getStringValue(synCtx);
+ reasonString = faultReasonExpr.stringValueOf(synCtx);
}
SOAPFaultReason reason = factory.createSOAPFaultReason();
@@ -368,7 +368,7 @@
fault.setDetail(soapFaultDetail);
} else if (faultDetailExpr != null) {
SOAPFaultDetail soapFaultDetail =
factory.createSOAPFaultDetail();
-
soapFaultDetail.setText(faultDetailExpr.getStringValue(synCtx));
+
soapFaultDetail.setText(faultDetailExpr.stringValueOf(synCtx));
fault.setDetail(soapFaultDetail);
} else if (fault.getDetail() != null) {
// work around for a rampart issue in the following thread
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/mediators/transform/HeaderMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/HeaderMediator.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/transform/HeaderMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
mediators/transform/HeaderMediator.java Fri Apr 4 09:24:12 2008
@@ -78,7 +78,7 @@
if (action == ACTION_SET) {
String value = (getExpression() == null ? getValue() :
- expression.getStringValue(synCtx));
+ expression.stringValueOf(synCtx));
if (traceOrDebugOn) {
traceOrDebug(traceOn, "Set SOAP header : " + qName +
" to : " + value);
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/util/xpath/SynapseXPath.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPath.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
util/xpath/SynapseXPath.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
util/xpath/SynapseXPath.java Fri Apr 4 09:24:12 2008
@@ -19,6 +19,7 @@
package org.apache.synapse.util.xpath;
+import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.llom.OMDocumentImpl;
import org.apache.axiom.om.impl.llom.OMElementImpl;
import org.apache.axiom.om.impl.llom.OMTextImpl;
@@ -31,6 +32,7 @@
import org.jaxen.*;
import java.util.List;
+import java.util.Map;
/**
* <p>XPath that has been used inside Synapse xpath processing. This
has a extension function named
@@ -71,10 +73,12 @@
* @see org.apache.synapse.util.xpath.SynapseXPathFunctionContext
* @see org.apache.synapse.util.xpath.SynapseXPathVariableContext
*/
-public class SynapseXPath extends AXIOMXPath {
+public class SynapseXPath implements XPath {
private static final Log log =
LogFactory.getLog(SynapseXPath.class);
+ private AXIOMXPath xpath;
+
/**
* <p>Initializes the <code>SynapseXPath</code> with the given
<code>xpathString</code> as the
* XPath</p>
@@ -83,84 +87,105 @@
* @throws JaxenException in case of an initialization failure
*/
public SynapseXPath(String xpathString) throws JaxenException {
- super(xpathString);
- setVariableContext(new
ThreadSafeDelegatingVariableContext());
- setFunctionContext(new
ThreadSafeDelegatingFunctionContext());
+ xpath = new AXIOMXPath(xpathString);
+ xpath.setVariableContext(new
ThreadSafeDelegatingVariableContext());
+ xpath.setFunctionContext(new
ThreadSafeDelegatingFunctionContext());
}
/**
- * <p>Evaluates the XPath over the specified MessageContext.
This overides the evaluate method
- * of the <code>BaseXPath</code> and provides a better acceess
to the message context
- * properties and transport information</p>
+ * <p>Evaluates the XPath over the specified SOAPEnvelope. This
overides the evaluate method
+ * of the <code>BaseXPath</code> and provides a better acceess
to the envelope using the XPath
+ * variables for <code>SOAPBody</code> and <code>SOAPHeader</
code>.</p>
*
- * @param synCtx context to be evaluated for the XPath
- * @return evaluated value of the xpath over the given message
context
+ * @param o object to be evaluated to get the result
(MessageContext | SOAPEnvelope | OMElement)
+ * @return evaluated value of the xpath over the given message
* @throws JaxenException in case of a failure in evaluation
*
* @see org.jaxen.BaseXPath#evaluate(Object)
- * @see
org.apache.synapse.util.xpath.SynapseXPathFunctionContext#getFunction(
- * String, String, String)
* @see
org
.apache
.synapse.util.xpath.SynapseXPathVariableContext#getVariableValue(
- * String, String, String)
+ * String, String, String)
*/
- public Object evaluate(MessageContext synCtx) throws
JaxenException {
+ public Object evaluate(Object o) throws JaxenException {
+ setContexts(o);
+ return xpath.evaluate(getEvaluationObject(o));
+ }
- // retrieves the variable context and the function context
to restore after
- VariableContext varCtx =
((ThreadSafeDelegatingVariableContext)
- getVariableContext()).getDelegate();
- FunctionContext funCtx =
((ThreadSafeDelegatingFunctionContext)
- getFunctionContext()).getDelegate();
+ /**
+ * @deprecated
+ */
+ public String valueOf(Object o) throws JaxenException {
+ return xpath.valueOf(o);
+ }
- try {
+ public String stringValueOf(Object o) throws JaxenException {
- // set the synapse variable and function contexts
before evaluation
- ((ThreadSafeDelegatingVariableContext)
- getVariableContext()).setDelegate(new
SynapseXPathVariableContext(synCtx));
- ((ThreadSafeDelegatingFunctionContext)
- getFunctionContext()).setDelegate(new
SynapseXPathFunctionContext(synCtx, true));
+ if (o instanceof MessageContext) {
+ return stringValueOf((MessageContext) o);
+ } else {
+ setContexts(o);
+ return xpath.stringValueOf(getEvaluationObject(o));
+ }
+ }
- return super.evaluate(synCtx.getEnvelope());
+ public boolean booleanValueOf(Object o) throws JaxenException {
+ setContexts(o);
+ return xpath.booleanValueOf(getEvaluationObject(o));
+ }
- } finally {
+ public Number numberValueOf(Object o) throws JaxenException {
+ setContexts(o);
+ return xpath.numberValueOf(getEvaluationObject(o));
+ }
- // restore the variable and function contexts
- ((ThreadSafeDelegatingVariableContext)
getVariableContext()).setDelegate(varCtx);
- ((ThreadSafeDelegatingFunctionContext)
getFunctionContext()).setDelegate(funCtx);
- }
+ public List selectNodes(Object o) throws JaxenException {
+ setContexts(o);
+ return xpath.selectNodes(getEvaluationObject(o));
}
- /**
- * <p>Evaluates the XPath over the specified SOAPEnvelope. This
overides the evaluate method
- * of the <code>BaseXPath</code> and provides a better acceess
to the envelope using the XPath
- * variables for <code>SOAPBody</code> and <code>SOAPHeader</
code>.</p>
- *
- * @param env message to be evaluated to get the result
- * @return evaluated value of the xpath over the given message
- * @throws JaxenException in case of a failure in evaluation
- *
- * @see org.jaxen.BaseXPath#evaluate(Object)
- * @see
org
.apache
.synapse.util.xpath.SynapseXPathVariableContext#getVariableValue(
- * String, String, String)
- */
- public Object evaluate(SOAPEnvelope env) throws JaxenException {
+ public Object selectSingleNode(Object o) throws JaxenException {
- // retrieves the variable context to restore after
- VariableContext varCtx =
((ThreadSafeDelegatingVariableContext)
- getVariableContext()).getDelegate();
+ return xpath.selectSingleNode(o);
+ }
- try {
+ public void addNamespace(String prefix, String nsURI) throws
JaxenException {
+ xpath.addNamespace(prefix, nsURI);
+ }
- // set the synapse variable context before evaluation
- ((ThreadSafeDelegatingVariableContext)
- getVariableContext()).setDelegate(new
SynapseXPathVariableContext(env));
+ public void setNamespaceContext(NamespaceContext
namespaceContext) {
+ xpath.setNamespaceContext(namespaceContext);
+ }
- return super.evaluate(env);
+ public void setFunctionContext(FunctionContext functionContext) {
+ throw new UnsupportedOperationException("Setting the
function context directly is " +
+ "prohibited, use ((ThreadSafeFunctionContext) " +
+ "getFunctionContext()).setDelegate() instead");
+ }
- } finally {
+ public void setVariableContext(VariableContext variableContext) {
+
+ throw new UnsupportedOperationException("Setting the
variable context directly is " +
+ "prohibited, use ((ThreadSafeVariableContext) " +
+ "getVariableContext()).setDelegate() instead");
+ }
- // restore the variable context
- ((ThreadSafeDelegatingVariableContext)
getVariableContext()).setDelegate(varCtx);
- }
+ public NamespaceContext getNamespaceContext() {
+ return xpath.getNamespaceContext();
+ }
+
+ public FunctionContext getFunctionContext() {
+ return xpath.getFunctionContext();
+ }
+
+ public VariableContext getVariableContext() {
+ return xpath.getVariableContext();
+ }
+
+ public Navigator getNavigator() {
+ return xpath.getNavigator();
+ }
+
+ public String toString() {
+ return xpath.toString();
}
/**
@@ -170,7 +195,7 @@
* @param synCtx the source message which holds the
MessageContext against full context
* @return a String representation of the result of evaluation
*/
- public String getStringValue(MessageContext synCtx) {
+ public String stringValueOf(MessageContext synCtx) {
try {
@@ -222,9 +247,62 @@
return null;
}
+ public void addNamespace(OMNamespace ns) throws JaxenException {
+ xpath.addNamespace(ns.getPrefix(), ns.getNamespaceURI());
+ }
+
+ public Map getNamespaces() {
+ return xpath.getNamespaces();
+ }
+
+ private Object getEvaluationObject(Object obj) {
+ if (obj instanceof MessageContext) {
+ return ((MessageContext) obj).getEnvelope();
+ } else {
+ return obj;
+ }
+ }
+
+ private void setContexts(Object obj) {
+
+ if (obj instanceof MessageContext) {
+ setContexts((MessageContext) obj);
+ } else if (obj instanceof SOAPEnvelope) {
+ setContexts((SOAPEnvelope) obj);
+ } else {
+
+ ((ThreadSafeDelegatingVariableContext)
+ xpath.getVariableContext()).setDelegate(new
SimpleVariableContext());
+
+ ((ThreadSafeDelegatingFunctionContext)
+ xpath.getFunctionContext()).setDelegate(new
XPathFunctionContext(true));
+ }
+ }
+
+ private void setContexts(SOAPEnvelope env) {
+
+ ((ThreadSafeDelegatingVariableContext)
+ xpath.getVariableContext()).setDelegate(
+ new SynapseXPathVariableContext(env));
+
+ ((ThreadSafeDelegatingFunctionContext)
+ xpath.getFunctionContext()).setDelegate(
+ new XPathFunctionContext(true));
+ }
+
+ private void setContexts(MessageContext synCtx) {
+
+ ((ThreadSafeDelegatingVariableContext)
+ xpath.getVariableContext()).setDelegate(
+ new SynapseXPathVariableContext(synCtx));
+
+ ((ThreadSafeDelegatingFunctionContext)
+ xpath.getFunctionContext()).setDelegate(
+ new SynapseXPathFunctionContext(synCtx, true));
+ }
+
private void handleException(String msg, Throwable e) {
log.error(msg, e);
throw new SynapseException(msg, e);
}
-
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/
synapse/util/xpath/ThreadSafeDelegatingVariableContext.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ThreadSafeDelegatingVariableContext.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
util/xpath/ThreadSafeDelegatingVariableContext.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/
util/xpath/ThreadSafeDelegatingVariableContext.java Fri Apr 4
09:24:12 2008
@@ -27,7 +27,7 @@
private final ThreadLocal<VariableContext> delegate = new
ThreadLocal<VariableContext>();
- public void setDelegate() {
+ public ThreadSafeDelegatingVariableContext() {
this.delegate.set(new SimpleVariableContext());
}
Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/
synapse/core/axis2/Axis2MessageContextTest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/core/axis2/Axis2MessageContextTest.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
core/axis2/Axis2MessageContextTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
core/axis2/Axis2MessageContextTest.java Fri Apr 4 09:24:12 2008
@@ -38,7 +38,7 @@
axiomXpath.addNamespace("ns1", nsNamespace1);
MessageContext synCtx = TestUtils.getTestContext(sampleBody);
- String result = axiomXpath.getStringValue(synCtx);
+ String result = axiomXpath.stringValueOf(synCtx);
assertEquals("second", result);
}
@@ -49,7 +49,7 @@
MessageContext synCtx = TestUtils.getTestContext(sampleBody);
- String result = axiomXpath.getStringValue(synCtx);
+ String result = axiomXpath.stringValueOf(synCtx);
assertEquals("second", result);
}
Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/
synapse/mediators/builtin/PropertyMediatorTest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/PropertyMediatorTest.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
mediators/builtin/PropertyMediatorTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
mediators/builtin/PropertyMediatorTest.java Fri Apr 4 09:24:12 2008
@@ -43,19 +43,19 @@
propMediatorTwo.mediate(synCtx);
assertTrue(
"value".equals((new SynapseXPath(
- "synapse:get-
property('name')")).getStringValue(synCtx)));
+ "synapse:get-
property('name')")).stringValueOf(synCtx)));
assertTrue(
"valueTwo".equals((new SynapseXPath(
- "synapse:get-
property('nameTwo')")).getStringValue(synCtx)));
+ "synapse:get-
property('nameTwo')")).stringValueOf(synCtx)));
PropertyMediator propMediatorThree = new PropertyMediator();
propMediatorThree.setName("name");
propMediatorThree.setValue("value");
propMediatorThree.setAction(PropertyMediator.ACTION_REMOVE);
propMediatorThree.mediate(synCtx) ;
- assertNull((new SynapseXPath("synapse:get-
property('name')")).getStringValue(synCtx));
+ assertNull((new SynapseXPath("synapse:get-
property('name')")).stringValueOf(synCtx));
assertTrue("valueTwo".equals((new SynapseXPath(
- "synapse:get-
property('nameTwo')")).getStringValue(synCtx)));
+ "synapse:get-
property('nameTwo')")).stringValueOf(synCtx)));
}
Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/
synapse/util/SynapseXPathTest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/util/SynapseXPathTest.java?rev=644758&r1=644757&r2=644758&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
util/SynapseXPathTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/
util/SynapseXPathTest.java Fri Apr 4 09:24:12 2008
@@ -40,13 +40,13 @@
public void testAbsoluteXPath() throws Exception {
SynapseXPath xpath = new SynapseXPath("//test");
MessageContext ctx = TestUtils.getTestContext("<test>" +
message + "</test>");
- assertEquals(xpath.getStringValue(ctx), message);
+ assertEquals(xpath.stringValueOf(ctx), message);
}
public void testBodyRelativeXPath() throws Exception {
SynapseXPath xpath = new SynapseXPath("$body/test");
MessageContext ctx = TestUtils.getTestContext("<test>" +
message + "</test>");
- assertEquals(xpath.getStringValue(ctx), message);
+ assertEquals(xpath.stringValueOf(ctx), message);
}
public void testHeaderRelativeXPath() throws Exception {
@@ -57,7 +57,7 @@
SOAPHeaderBlock block =
ctx.getEnvelope().getHeader().addHeaderBlock("test",
fac.createOMNamespace("http://test", "t"));
block.setText(message);
- assertEquals(xpath.getStringValue(ctx), message);
+ assertEquals(xpath.stringValueOf(ctx), message);
}
public void testContextProperties() throws Exception {