You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2008/03/16 05:14:04 UTC
svn commit: r637532 - in
/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util: ./
xpath/
Author: ruwan
Date: Sat Mar 15 21:14:04 2008
New Revision: 637532
URL: http://svn.apache.org/viewvc?rev=637532&view=rev
Log:
Fixing the XPath evaluation issues
Removed:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/SynapseVariableContext.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/SynapseXPath.java
Modified:
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/ThreadSafeDelegatingFunctionContext.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ThreadSafeDelegatingVariableContext.java
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=637532&r1=637531&r2=637532&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 Sat Mar 15 21:14:04 2008
@@ -28,7 +28,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseException;
-import org.jaxen.JaxenException;
+import org.jaxen.*;
import java.util.List;
@@ -105,12 +105,28 @@
*/
public Object evaluate(MessageContext synCtx) throws JaxenException {
- ((ThreadSafeDelegatingVariableContext)
- getVariableContext()).setDelegate(new SynapseXPathVariableContext(synCtx));
- ((ThreadSafeDelegatingFunctionContext)
- getFunctionContext()).setDelegate(new SynapseXPathFunctionContext(synCtx, true));
-
- return super.evaluate(synCtx.getEnvelope());
+ // retrieves the variable context and the function context to restore after
+ VariableContext varCtx = ((ThreadSafeDelegatingVariableContext)
+ getVariableContext()).getDelegate();
+ FunctionContext funCtx = ((ThreadSafeDelegatingFunctionContext)
+ getFunctionContext()).getDelegate();
+
+ try {
+
+ // set the synapse variable and function contexts before evaluation
+ ((ThreadSafeDelegatingVariableContext)
+ getVariableContext()).setDelegate(new SynapseXPathVariableContext(synCtx));
+ ((ThreadSafeDelegatingFunctionContext)
+ getFunctionContext()).setDelegate(new SynapseXPathFunctionContext(synCtx, true));
+
+ return super.evaluate(synCtx.getEnvelope());
+
+ } finally {
+
+ // restore the variable and function contexts
+ ((ThreadSafeDelegatingVariableContext) getVariableContext()).setDelegate(varCtx);
+ ((ThreadSafeDelegatingFunctionContext) getFunctionContext()).setDelegate(funCtx);
+ }
}
/**
@@ -128,10 +144,23 @@
*/
public Object evaluate(SOAPEnvelope env) throws JaxenException {
- ((ThreadSafeDelegatingVariableContext)
- getVariableContext()).setDelegate(new SynapseXPathVariableContext(env));
+ // retrieves the variable context to restore after
+ VariableContext varCtx = ((ThreadSafeDelegatingVariableContext)
+ getVariableContext()).getDelegate();
+
+ try {
+
+ // set the synapse variable context before evaluation
+ ((ThreadSafeDelegatingVariableContext)
+ getVariableContext()).setDelegate(new SynapseXPathVariableContext(env));
+
+ return super.evaluate(env);
+
+ } finally {
- return super.evaluate(env);
+ // restore the variable context
+ ((ThreadSafeDelegatingVariableContext) getVariableContext()).setDelegate(varCtx);
+ }
}
/**
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ThreadSafeDelegatingFunctionContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ThreadSafeDelegatingFunctionContext.java?rev=637532&r1=637531&r2=637532&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ThreadSafeDelegatingFunctionContext.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ThreadSafeDelegatingFunctionContext.java Sat Mar 15 21:14:04 2008
@@ -36,6 +36,10 @@
this.delegate.set(delegate);
}
+ public FunctionContext getDelegate() {
+ return this.delegate.get();
+ }
+
public Function getFunction(String namespaceURI, String prefix, String localName)
throws UnresolvableException {
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=637532&r1=637531&r2=637532&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 Sat Mar 15 21:14:04 2008
@@ -35,6 +35,10 @@
this.delegate.set(delegate);
}
+ public VariableContext getDelegate() {
+ return this.delegate.get();
+ }
+
public Object getVariableValue(String namespaceURI, String prefix, String localName)
throws UnresolvableException {