Author: supun
Date: Wed Nov 3 10:03:35 2010
New Revision: 1030381
URL: http://svn.apache.org/viewvc?rev=1030381&view=rev
Log:
applying patch SYNAPSE-697, many thanks Kasun for the contribution
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
Wed Nov 3 10:03:35 2010
@@ -25,6 +25,8 @@ import org.apache.synapse.SynapseArtifac
import org.apache.synapse.SynapseException;
import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
/**
* Represents an Entry contained in the local registry used by Synapse
@@ -54,6 +56,12 @@ public class Entry implements SynapseArt
/** The description of the local entry */
private String description;
+ /**
+ * Registry resource properties
+ */
+ private Properties entryProperties;
+
+
public Entry() {}
public Entry(String key) {
@@ -166,13 +174,28 @@ public class Entry implements SynapseArt
this.description = description;
}
+ public Properties getEntryProperties() {
+ return entryProperties;
+ }
+
+ public void setEntryProperties(Properties entryProperties) {
+ this.entryProperties = entryProperties;
+ }
+
public boolean isExpired() {
return getType() == REMOTE_ENTRY && getExpiryTime() > 0
&& System.currentTimeMillis() > expiryTime;
}
public boolean isCached() {
- return value != null;
+ if (value != null) {
+ return true;
+ } else if (entryProperties != null) {
+ if (!entryProperties.isEmpty()) {
+ return true;
+ }
+ }
+ return false;
}
public void clearCache() {
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
Wed Nov 3 10:03:35 2010
@@ -43,6 +43,9 @@ public class XMLConfigConstants {
public static final String SCOPE_CLIENT = "axis2-client";
/** The scope name for transport header properties */
public static final String SCOPE_TRANSPORT = "transport";
+ /** The scope name for registry properties */
+ public static final String SCOPE_REGISTRY = "registry";
+
/** The set of supported data types */
public static enum DATA_TYPES {
STRING, BOOLEAN, INTEGER, LONG, SHORT, FLOAT, DOUBLE, OM
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
Wed Nov 3 10:03:35 2010
@@ -19,6 +19,7 @@
package org.apache.synapse.mediators;
+import org.apache.axiom.om.OMText;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.transport.base.BaseConstants;
@@ -26,6 +27,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.config.Entry;
import org.apache.synapse.config.xml.XMLConfigConstants;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.jaxen.Context;
@@ -38,6 +40,7 @@ import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
/**
* Implements the XPath extension function
synapse:get-property(scope,prop-name)
@@ -99,7 +102,8 @@ public class GetPropertyFunction impleme
if (argOne != null) {
if (!XMLConfigConstants.SCOPE_AXIS2.equals(argOne) &&
!XMLConfigConstants.SCOPE_DEFAULT.equals(argOne) &&
- !XMLConfigConstants.SCOPE_TRANSPORT.equals(argOne)) {
+ !XMLConfigConstants.SCOPE_TRANSPORT.equals(argOne) &&
+ !XMLConfigConstants.SCOPE_REGISTRY.equals(argOne))
{
return evaluate(XMLConfigConstants.SCOPE_DEFAULT,
args.get(0),
args.get(1), context.getNavigator());
} else {
@@ -217,9 +221,9 @@ public class GetPropertyFunction impleme
return SynapseConstants.TRUE;
} else if (synCtx instanceof Axis2MessageContext) {
org.apache.axis2.context.MessageContext axis2MessageContext
- = ((Axis2MessageContext)
synCtx).getAxis2MessageContext();
+ = ((Axis2MessageContext)
synCtx).getAxis2MessageContext();
if
(axis2MessageContext.getProperty(BaseConstants.FAULT_MESSAGE) != null
- && SynapseConstants.TRUE.equals(
+ && SynapseConstants.TRUE.equals(
axis2MessageContext.getProperty(BaseConstants.FAULT_MESSAGE))) {
return SynapseConstants.TRUE;
}
@@ -236,10 +240,10 @@ public class GetPropertyFunction impleme
else
return SynapseConstants.FORMAT_SOAP12;
} else if (SynapseConstants.PROPERTY_OPERATION_NAME.equals(key) ||
-
SynapseConstants.PROPERTY_OPERATION_NAMESPACE.equals(key)) {
+ SynapseConstants.PROPERTY_OPERATION_NAMESPACE.equals(key))
{
if (synCtx instanceof Axis2MessageContext) {
AxisOperation axisOperation
- =
((Axis2MessageContext)synCtx).getAxis2MessageContext().getAxisOperation();
+ =
((Axis2MessageContext)synCtx).getAxis2MessageContext().getAxisOperation();
if (axisOperation != null) {
if
(SynapseConstants.PROPERTY_OPERATION_NAMESPACE.equals(key)) {
return axisOperation.getName().getNamespaceURI();
@@ -257,29 +261,66 @@ public class GetPropertyFunction impleme
}
}
} else if (XMLConfigConstants.SCOPE_AXIS2.equals(scope)
- && synCtx instanceof Axis2MessageContext) {
+ && synCtx instanceof Axis2MessageContext) {
org.apache.axis2.context.MessageContext axis2MessageContext
- = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+ = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
return axis2MessageContext.getProperty(key);
} else if (XMLConfigConstants.SCOPE_TRANSPORT.equals(scope)
- && synCtx instanceof Axis2MessageContext) {
+ && synCtx instanceof Axis2MessageContext) {
org.apache.axis2.context.MessageContext axis2MessageContext
- = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+ = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
Object headers = axis2MessageContext.getProperty(
- org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+ org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
if (headers != null && headers instanceof Map) {
Map headersMap = (Map) headers;
return headersMap.get(key);
}
+ } else if (XMLConfigConstants.SCOPE_REGISTRY.equals(scope)) {
+ String[] regParam = key.split("@");
+ String regPath = null;
+ String propName = null;
+ if (regParam.length == 2) {
+ regPath = regParam[0];
+ propName = regParam[1];
+ } else if (regParam.length == 1) {
+ regPath = regParam[0];
+ }
+
+ Entry propEntry =
synCtx.getConfiguration().getEntryDefinition(regPath);
+ if (propEntry == null) {
+ propEntry = new Entry();
+ propEntry.setType(Entry.REMOTE_ENTRY);
+ propEntry.setKey(key);
+ }
+
+ if (synCtx.getConfiguration().getRegistry() != null) {
+ synCtx.getConfiguration().getRegistry().getResource(propEntry,
new Properties());
+ }
+ synCtx.getConfiguration().getRegistry().getResource(propEntry, new
Properties());
+ if (null != propEntry.getEntryProperties()) {
+ if (propName != null) {
+ Properties reqProperties = propEntry.getEntryProperties();
+ if (reqProperties != null) {
+ if (reqProperties.get(propName) != null) {
+ return reqProperties.get(propName);
+ }
+ }
+ } else if (propEntry.getValue()!= null) {
+ if (propEntry.getValue() instanceof OMText) {
+ return ((OMText) propEntry.getValue()).getText();
+ }
+ return propEntry.getValue().toString();
+ }
+ }
} else {
if (traceOrDebugOn) {
traceOrDebug(traceOn, "Invalid scope : '" + scope + "' has
been set for the " +
- "synapse:get-property(scope,prop-name) XPath function");
+ "synapse:get-property(scope,prop-name) XPath
function");
}
}
return NULL_STRING;
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
Wed Nov 3 10:03:35 2010
@@ -27,6 +27,7 @@ import org.apache.synapse.config.XMLToOb
import org.apache.synapse.endpoints.Endpoint;
import org.apache.synapse.mediators.base.SequenceMediator;
+import java.util.Map;
import java.util.Properties;
/**
@@ -60,6 +61,21 @@ public abstract class AbstractRegistry i
// if we have not cached the referenced object, fetch it and its
RegistryEntry
} else if (!entry.isCached()) {
omNode = lookup(entry.getKey());
+ entry.setEntryProperties(getResourceProperties(entry.getKey()));
+ if (omNode == null && entry.getEntryProperties() != null &&
+ !entry.getEntryProperties().isEmpty()) {
+ // Collection
+ re = getRegistryEntry(entry.getKey());
+ if (re != null) {
+ if (re.getCachableDuration() > 0) {
+ entry.setExpiryTime(System.currentTimeMillis() +
re.getCachableDuration());
+ } else {
+ entry.setExpiryTime(-1);
+ }
+ entry.setVersion(re.getVersion());
+ }
+ }
+
if (omNode == null) {
return null;
} else {
@@ -172,4 +188,8 @@ public abstract class AbstractRegistry i
public void init(Properties properties) {
this.properties.putAll(properties);
}
+
+ public Properties getResourceProperties(String entryKey) {
+ return null;
+ }
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
Wed Nov 3 10:03:35 2010
@@ -122,4 +122,11 @@ public interface Registry {
* @param entry The registry entry
*/
public void updateRegistryEntry(RegistryEntry entry);
+
+ /**
+ * Get the resource properties of a given resource
+ *
+ * @param entryKey The registry entry
+ */
+ public Properties getResourceProperties(String entryKey);
}