You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2010/12/14 09:23:16 UTC

svn commit: r1048977 - /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ext/XpathExtensionUtil.java

Author: supun
Date: Tue Dec 14 08:23:16 2010
New Revision: 1048977

URL: http://svn.apache.org/viewvc?rev=1048977&view=rev
Log:
applying a patch for SYNAPSE-711, thanks Udayanga for the contribution

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ext/XpathExtensionUtil.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ext/XpathExtensionUtil.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ext/XpathExtensionUtil.java?rev=1048977&r1=1048976&r2=1048977&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ext/XpathExtensionUtil.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/ext/XpathExtensionUtil.java Tue Dec 14 08:23:16 2010
@@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.SynapsePropertiesLoader;
+import org.apache.synapse.core.SynapseEnvironment;
 import org.jaxen.Function;
 
 import javax.xml.namespace.QName;
@@ -32,10 +33,14 @@ import java.util.*;
  * Utility class to support custom xpath context extensions
  */
 public class XpathExtensionUtil {
-    /** The Synapse extension property for variable context extensions */
+    /**
+     * The Synapse extension property for variable context extensions
+     */
     private static final String SYNAPSE_XPATH_VARIABLE_EXTENSIONS = "synapse.xpath.var.extensions";
 
-    /** The Synapse extension property for function context extensions */
+    /**
+     * The Synapse extension property for function context extensions
+     */
     private static final String SYNAPSE_XPATH_FUNCTION_EXTENSIONS = "synapse.xpath.func.extensions";
 
     private static final Log log = LogFactory.getLog(XpathExtensionUtil.class);
@@ -43,6 +48,7 @@ public class XpathExtensionUtil {
     /**
      * Get all registered variable context extensions. Synapse will look for synapse.properties
      * property synapse.xpath.var.extensions
+     *
      * @return List of Synapse Xpath Variable Context Providers
      */
     public static List<SynapseXpathVariableResolver> getRegisteredVariableExtensions() {
@@ -57,6 +63,7 @@ public class XpathExtensionUtil {
     /**
      * Get all registered function context extensions. Synapse will look for synapse.properties
      * property synapse.xpath.func.extensions
+     *
      * @return List of Synapse Xpath Function Context Providers
      */
     public static List<SynapseXpathFunctionContextProvider> getRegisteredFunctionExtensions() {
@@ -70,9 +77,10 @@ public class XpathExtensionUtil {
 
     /**
      * Populate the set of registered  Extension proiders for a given property
-     * @param propValue  either variable/function provider property name
-     * @param extProviders  a List that will be populated with the registered extensions
-     * @param <T> Variable/Function Context Provider Type
+     *
+     * @param propValue    either variable/function provider property name
+     * @param extProviders a List that will be populated with the registered extensions
+     * @param <T>          Variable/Function Context Provider Type
      */
     private static <T> void extractProviders(String propValue, List<T> extProviders) {
         if (propValue != null) {
@@ -93,20 +101,24 @@ public class XpathExtensionUtil {
     /**
      * Returns a Fucntion Context extension registered for given QName/namespaceURI+prefix+localName
      * combination
-     * @param ctxt  Synapse Message Context
+     *
+     * @param ctxt         Synapse Message Context
      * @param namespaceURI binding namespace in xpath expression
-     * @param prefix binding prefix string in xpath expression
-     * @param localName binding localname string in xpath expression
+     * @param prefix       binding prefix string in xpath expression
+     * @param localName    binding localname string in xpath expression
      * @return jaxen Function object for corresponding extension
      */
-    public static Function getFunctionContext(MessageContext ctxt, String namespaceURI,String prefix,
-                                           String localName) {
-        Map<QName, SynapseXpathFunctionContextProvider> extensions =
-                ctxt.getEnvironment().getXpathFunctionExtensions();
-        SynapseXpathFunctionContextProvider functionContextProvider =
-                getMatchingExtensionProvider(extensions, namespaceURI, prefix, localName);
-        if (functionContextProvider!=null) {
-            return initAndReturnXpathFunction(functionContextProvider,ctxt);
+    public static Function getFunctionContext(MessageContext ctxt, String namespaceURI, String prefix,
+                                              String localName) {
+        SynapseEnvironment environment = ctxt.getEnvironment();
+        if (environment != null) {
+            Map<QName, SynapseXpathFunctionContextProvider> extensions =
+                    environment.getXpathFunctionExtensions();
+            SynapseXpathFunctionContextProvider functionContextProvider =
+                    getMatchingExtensionProvider(extensions, namespaceURI, prefix, localName);
+            if (functionContextProvider != null) {
+                return initAndReturnXpathFunction(functionContextProvider, ctxt);
+            }
         }
         return null;
     }
@@ -114,19 +126,23 @@ public class XpathExtensionUtil {
     /**
      * Returns an object resolved by Variable Context extension registered for given
      * QName/namespaceURI+prefix+localName combination
-     * @param ctxt  Synapse Message Context
+     *
+     * @param ctxt         Synapse Message Context
      * @param namespaceURI binding namespace in xpath expression
-     * @param prefix binding prefix string in xpath expression
-     * @param localName binding localname string in xpath expression
+     * @param prefix       binding prefix string in xpath expression
+     * @param localName    binding localname string in xpath expression
      * @return Object variable resolved by corresponding extension
      */
-    public static Object resolveVariableContext(MessageContext ctxt, String namespaceURI,String prefix,
-                                         String localName) {
-        Map<QName, SynapseXpathVariableResolver> extensions =
-                ctxt.getEnvironment().getXpathVariableExtensions();
-        SynapseXpathVariableResolver variableResolver = getMatchingExtensionProvider(extensions, namespaceURI, prefix, localName);
-        if (variableResolver !=null) {
-            return resolveXpathVariable(variableResolver,ctxt);
+    public static Object resolveVariableContext(MessageContext ctxt, String namespaceURI, String prefix,
+                                                String localName) {
+        SynapseEnvironment environment = ctxt.getEnvironment();
+        if (environment != null) {
+            Map<QName, SynapseXpathVariableResolver> extensions =
+                    environment.getXpathVariableExtensions();
+            SynapseXpathVariableResolver variableResolver = getMatchingExtensionProvider(extensions, namespaceURI, prefix, localName);
+            if (variableResolver != null) {
+                return resolveXpathVariable(variableResolver, ctxt);
+            }
         }
         return null;
     }
@@ -134,16 +150,17 @@ public class XpathExtensionUtil {
     /**
      * returns the matching Extension provider for a given QName/namespaceURI+prefix+localName
      * combination
+     *
      * @param extensionMap registered extension Map for the corresponding extension provider
      * @param namespaceURI binding namespace in xpath expression
-     * @param prefix binding prefix string in xpath expression
-     * @param localName binding localname string in xpath expression
-     * @param <T> Variable/Function Context Provider Type
+     * @param prefix       binding prefix string in xpath expression
+     * @param localName    binding localname string in xpath expression
+     * @param <T>          Variable/Function Context Provider Type
      * @return matching Extension provider. returns null if no extension is found for the given
-     * combination
+     *         combination
      */
-    private static <T> T getMatchingExtensionProvider(Map<QName,T> extensionMap ,String namespaceURI,
-                                                      String prefix,String localName){
+    private static <T> T getMatchingExtensionProvider(Map<QName, T> extensionMap, String namespaceURI,
+                                                      String prefix, String localName) {
         QName subject;
         if (localName != null && prefix != null) {
             subject = new QName(namespaceURI, localName, prefix);
@@ -168,12 +185,13 @@ public class XpathExtensionUtil {
 
     /**
      * try to resolve an xpath variable context using the extension given
+     *
      * @param variableExt Extension provider for variable contexts
-     * @param ctxt Synapse Message Context
+     * @param ctxt        Synapse Message Context
      * @return resolved property/object
      */
     private static Object resolveXpathVariable(SynapseXpathVariableResolver variableExt,
-                                              MessageContext ctxt) {
+                                               MessageContext ctxt) {
         try {
             return variableExt.resolve(ctxt);
         } catch (Exception e) {
@@ -185,8 +203,9 @@ public class XpathExtensionUtil {
 
     /**
      * Initializes an returns new Xpath Function
+     *
      * @param funcExtProvider extension provider for a Function Context
-     * @param ctxt Synapse Message Context
+     * @param ctxt            Synapse Message Context
      * @return Xpath Function instance . returns null if error occurs
      */
     private static Function initAndReturnXpathFunction(SynapseXpathFunctionContextProvider funcExtProvider,