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,