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/13 12:06:27 UTC
svn commit: r1045061 - in
/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse: ./ core/
core/axis2/ util/xpath/
Author: supun
Date: Mon Dec 13 11:06:27 2010
New Revision: 1045061
URL: http://svn.apache.org/viewvc?rev=1045061&view=rev
Log:
applying patch for issue SYNAPSE-711, many thanks Udayanga for the contribution
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/SynapseEnvironment.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathFunctionContext.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathVariableContext.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java?rev=1045061&r1=1045060&r2=1045061&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java Mon Dec 13 11:06:27 2010
@@ -50,6 +50,9 @@ import org.apache.synapse.core.axis2.*;
import org.apache.synapse.eventing.SynapseEventSource;
import org.apache.synapse.task.*;
import org.apache.synapse.securevault.secret.handler.SharedSecretCallbackHandlerCache;
+import org.apache.synapse.util.xpath.ext.SynapseXpathFunctionContextProvider;
+import org.apache.synapse.util.xpath.ext.SynapseXpathVariableResolver;
+import org.apache.synapse.util.xpath.ext.XpathExtensionUtil;
import java.util.*;
@@ -154,7 +157,7 @@ public class Axis2SynapseController impl
configurationContext.getAxisConfiguration().addParameter(serverContextParameter);
configurationContext.getAxisConfiguration().addParameter(serverConfigParameter);
} catch (AxisFault ignored) {
- log.fatal("Error adding the parameter to the Axis Configuration");
+ log.fatal("Error adding the parameter to the Axis Configuration");
}
// we retrieve these properties to initialize the task scheduler in the envrionment
@@ -169,7 +172,7 @@ public class Axis2SynapseController impl
if (taskScheduler != null && (taskScheduler instanceof TaskScheduler)) {
this.taskScheduler = (TaskScheduler) taskScheduler;
}
-
+
addDefaultBuildersAndFormatters(configurationContext.getAxisConfiguration());
deployMediatorExtensions();
initDataSourceHelper(serverContextInformation);
@@ -177,6 +180,35 @@ public class Axis2SynapseController impl
initialized = true;
}
+
+ /**
+ * This method initializes Xpath Extensions available through synapse.properties file
+ * Xpath Extensions can be defined in Variable Context Extensions + Function Context Extensions
+ * synapse.xpath.var.extensions --> Variable Extensions
+ * synapse.xpath.func.extensions --> Function Extensions
+ */
+ private void initXpathExtensions() {
+ Axis2SynapseEnvironment axis2SynapseEnvironment = (Axis2SynapseEnvironment) synapseEnvironment;
+
+ /*Initalize Function Context extensions for xpath
+ */
+ List<SynapseXpathFunctionContextProvider> functionExtensions =
+ XpathExtensionUtil.getRegisteredFunctionExtensions();
+ for (SynapseXpathFunctionContextProvider functionExtension : functionExtensions) {
+ axis2SynapseEnvironment.setXpathFunctionExtensions(functionExtension);
+ }
+
+ /*Initalize Variable Context extensions for xpath
+ */
+ List<SynapseXpathVariableResolver> variableExtensions =
+ XpathExtensionUtil.getRegisteredVariableExtensions();
+ for (SynapseXpathVariableResolver variableExtension : variableExtensions) {
+ axis2SynapseEnvironment.setXpathVariableExtensions(variableExtension);
+ }
+
+ }
+
+
/**
* {@inheritDoc}
*/
@@ -248,7 +280,7 @@ public class Axis2SynapseController impl
/* if JMX Adapter has been configured and started, output usage information rather
at the end of the startup process to make it more obvious */
if (jmxAdapter != null && jmxAdapter.isRunning()) {
- log.info("Management using JMX available via: "
+ log.info("Management using JMX available via: "
+ jmxAdapter.getJmxInformation().getJmxUrl());
}
}
@@ -270,10 +302,10 @@ public class Axis2SynapseController impl
if (synapseTaskManager.isInitialized()) {
synapseTaskManager.pauseAll();
}
-
+
log.info("Entered maintenence mode");
}
-
+
/**
* {@inheritDoc}
*/
@@ -378,7 +410,7 @@ public class Axis2SynapseController impl
synapseEnvironment = new Axis2SynapseEnvironment(
configurationContext, synapseConfiguration, serverContextInformation);
MessageContextCreatorForAxis2.setSynEnv(synapseEnvironment);
-
+
Parameter synapseEnvironmentParameter = new Parameter(
SynapseConstants.SYNAPSE_ENV, synapseEnvironment);
try {
@@ -392,6 +424,10 @@ public class Axis2SynapseController impl
synapseEnvironment.getTaskManager().init(taskDescriptionRepository, taskScheduler);
synapseConfiguration.init(synapseEnvironment);
synapseEnvironment.setInitialized(true);
+
+ //we initialize xpath extensions here since synapse environment is available
+ initXpathExtensions();
+
return synapseEnvironment;
}
@@ -456,7 +492,7 @@ public class Axis2SynapseController impl
handleFatal("Could not set parameters '" + SynapseConstants.SYNAPSE_CONFIG +
"' to the Axis2 configuration : " + e.getMessage(), e);
}
-
+
addServerIPAndHostEnrties();
return synapseConfiguration;
@@ -476,17 +512,17 @@ public class Axis2SynapseController impl
/**
* Waits until it is safe to stop or the the specified end time has been reached. A delay
* of <code>waitIntervalMillis</code> milliseconds is used between each subsequent check.
- * If the state "safeToStop" is reached before the specified <code>endTime</code>,
+ * If the state "safeToStop" is reached before the specified <code>endTime</code>,
* the return value is true.
- *
+ *
* @param waitIntervalMillis the pause time (delay) in milliseconds between subsequent checks
* @param endTime the time until which the checks need to finish successfully
- *
+ *
* @return true, if a safe state is reached before the specified <code>endTime</code>,
* otherwise false (forceful stop required)
*/
public boolean waitUntilSafeToStop(long waitIntervalMillis, long endTime) {
-
+
boolean safeToStop = false;
boolean forcefulStop = false;
Axis2TransportHelper transportHelper = new Axis2TransportHelper(configurationContext);
@@ -510,7 +546,7 @@ public class Axis2SynapseController impl
+ " active connections to be closed..");
}
int pendingTransportThreads = pendingListenerThreads + pendingSenderThreads;
-
+
int pendingCallbacks = serverContextInformation.getCallbackCount();
if (pendingCallbacks > 0) {
log.info("Waiting for: " + pendingCallbacks + " callbacks/replies..");
@@ -548,7 +584,7 @@ public class Axis2SynapseController impl
}
}
}
-
+
return !forcefulStop;
}
@@ -581,7 +617,7 @@ public class Axis2SynapseController impl
listenerManager = new ListenerManager();
listenerManager.init(configurationContext);
}
-
+
// do not use the listener manager shutdown hook, because it clashes with the
// SynapseServer shutdown hook.
listenerManager.setShutdownHookRequired(false);
@@ -616,7 +652,7 @@ public class Axis2SynapseController impl
synapseServiceGroup.addService(synapseService);
axisCfg.addServiceGroup(synapseServiceGroup);
}
-
+
/**
* Removes the Synapse Service from the Axis2 configuration.
*
@@ -690,13 +726,13 @@ public class Axis2SynapseController impl
}
/**
* Removes all Synapse proxy services from the Axis2 configuration.
- *
+ *
* @throws AxisFault if an error occurs undeploying proxy services
*/
private void undeployProxyServices() throws AxisFault {
-
+
log.info("Undeploying Proxy services...");
-
+
for (ProxyService proxy : synapseConfiguration.getProxyServices()) {
configurationContext.getAxisConfiguration().removeService(
proxy.getName());
@@ -719,7 +755,7 @@ public class Axis2SynapseController impl
/**
* Deploys all event sources.
- *
+ *
* @throws AxisFault if an error occurs deploying the event sources.
*/
private void deployEventSources() throws AxisFault {
@@ -728,10 +764,10 @@ public class Axis2SynapseController impl
eventSource.buildService(configurationContext.getAxisConfiguration());
}
}
-
+
/**
* Undeploys all event sources.
- *
+ *
* @throws AxisFault if an error occurs undeploying the event sources.
*/
private void undeployEventSources() throws AxisFault {
@@ -774,7 +810,7 @@ public class Axis2SynapseController impl
if (handler instanceof SecretCallbackHandler) {
cache.setSecretCallbackHandler((SecretCallbackHandler) handler);
}
- }
+ }
private void addDefaultBuildersAndFormatters(AxisConfiguration axisConf) {
if (axisConf.getMessageBuilder("text/plain") == null) {
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/SynapseEnvironment.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/SynapseEnvironment.java?rev=1045061&r1=1045060&r2=1045061&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/SynapseEnvironment.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/SynapseEnvironment.java Mon Dec 13 11:06:27 2010
@@ -27,7 +27,11 @@ import org.apache.synapse.aspects.statis
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.endpoints.EndpointDefinition;
import org.apache.synapse.mediators.base.SequenceMediator;
+import org.apache.synapse.util.xpath.ext.SynapseXpathFunctionContextProvider;
+import org.apache.synapse.util.xpath.ext.SynapseXpathVariableResolver;
+import javax.xml.namespace.QName;
+import java.util.Map;
import java.util.concurrent.ExecutorService;
/**
@@ -142,4 +146,19 @@ public interface SynapseEnvironment {
* @return {@link org.apache.synapse.ServerContextInformation} of this synapse environment
*/
public ServerContextInformation getServerContextInformation();
+
+ /**
+ * Get all Xpath Extension objects for Function contexts
+ * @return Map containing xpath extension objects
+ */
+ public Map<QName, SynapseXpathFunctionContextProvider> getXpathFunctionExtensions();
+
+
+ /**
+ * Get all Xpath Extension objects for Variable contexts
+ * @return Map containing xpath extension objects
+ */
+ public Map<QName, SynapseXpathVariableResolver> getXpathVariableExtensions();
+
+
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java?rev=1045061&r1=1045060&r2=1045061&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java Mon Dec 13 11:06:27 2010
@@ -39,7 +39,12 @@ import org.apache.synapse.mediators.Medi
import org.apache.synapse.mediators.MediatorWorker;
import org.apache.synapse.mediators.base.SequenceMediator;
import org.apache.synapse.util.concurrent.SynapseThreadPool;
+import org.apache.synapse.util.xpath.ext.SynapseXpathFunctionContextProvider;
+import org.apache.synapse.util.xpath.ext.SynapseXpathVariableResolver;
+import javax.xml.namespace.QName;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.ExecutorService;
/**
@@ -60,6 +65,14 @@ public class Axis2SynapseEnvironment imp
private ServerContextInformation contextInformation;
+ /** Map containing Xpath Function Context Extensions */
+ Map<QName, SynapseXpathFunctionContextProvider> xpathFunctionExtensions =
+ new HashMap<QName, SynapseXpathFunctionContextProvider>();
+
+ /** Map containing Xpath Variable Context Extensions */
+ Map<QName, SynapseXpathVariableResolver> xpathVariableExtensions =
+ new HashMap<QName, SynapseXpathVariableResolver>();
+
public Axis2SynapseEnvironment(SynapseConfiguration synCfg) {
int coreThreads = SynapseThreadPool.SYNAPSE_CORE_THREADS;
@@ -373,6 +386,37 @@ public class Axis2SynapseEnvironment imp
return this.configContext;
}
+ /**
+ * Returns all declared xpath Function Extensions
+ * @return Hash Map Contatining Function Extensions with supported QName keys
+ */
+ public Map<QName, SynapseXpathFunctionContextProvider> getXpathFunctionExtensions() {
+ return xpathFunctionExtensions;
+ }
+
+ /**
+ * Returns all declared xpath Variable Extensions
+ * @return Hash Map Contatining Variable Extensions with supported QName keys
+ */
+ public Map<QName, SynapseXpathVariableResolver> getXpathVariableExtensions() {
+ return xpathVariableExtensions;
+ }
+
+ public void setXpathFunctionExtensions(SynapseXpathFunctionContextProvider functionExt){
+ if(functionExt!=null) {
+ xpathFunctionExtensions.put(functionExt.getResolvingQName(), functionExt);
+ }
+ }
+
+
+ public void setXpathVariableExtensions(SynapseXpathVariableResolver variableExt){
+ if(variableExt!=null) {
+ xpathVariableExtensions.put(variableExt.getResolvingQName(), variableExt);
+ }
+ }
+
+
+
private void handleException(String message, Throwable e) {
log.error(message, e);
throw new SynapseException(message, e);
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathFunctionContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathFunctionContext.java?rev=1045061&r1=1045060&r2=1045061&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathFunctionContext.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathFunctionContext.java Mon Dec 13 11:06:27 2010
@@ -21,6 +21,7 @@ package org.apache.synapse.util.xpath;
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.GetPropertyFunction;
+import org.apache.synapse.util.xpath.ext.XpathExtensionUtil;
import org.jaxen.Function;
import org.jaxen.FunctionContext;
import org.jaxen.UnresolvableException;
@@ -82,7 +83,12 @@ public class SynapseXPathFunctionContext
// create a base64Encode function and set it to the XPath
return new Base64EncodeFunction();
}
-
+ //We check if custom Xpath extensions are available
+ Function extensionFunction = XpathExtensionUtil.getFunctionContext(synCtx,namespaceURI,prefix,
+ localName);
+ if(extensionFunction!=null) {
+ return extensionFunction;
+ }
// if not the get-property function then try to get it from the parent context
return parent.getFunction(namespaceURI, prefix, localName);
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathVariableContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathVariableContext.java?rev=1045061&r1=1045060&r2=1045061&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathVariableContext.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPathVariableContext.java Mon Dec 13 11:06:27 2010
@@ -30,6 +30,7 @@ import org.apache.axis2.Constants;
import org.apache.axis2.transport.http.util.URIEncoderDecoder;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
+import org.apache.synapse.util.xpath.ext.XpathExtensionUtil;
import org.jaxen.UnresolvableException;
import org.jaxen.VariableContext;
@@ -199,7 +200,11 @@ public class SynapseXPathVariableContext
}
}
}
-
+ //try resolving using available custom extensions
+ Object obj = XpathExtensionUtil.resolveVariableContext(synCtx,namespaceURI,prefix,localName);
+ if(obj!=null) {
+ return obj;
+ }
return parent.getVariableValue(namespaceURI, prefix, localName);
}
}