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 {