Author: asankha
Date: Sun Jul 30 22:50:21 2006
New Revision: 427019
URL: http://svn.apache.org/viewvc?rev=427019&view=rev
Log:
add support for Dynamic Sequences
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
(original)
+++
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
Sun Jul 30 22:50:21 2006
@@ -58,17 +58,35 @@
* @param name the name for the sequence
* @param m the mediator to be reffered to by the name
*/
- public void addNamedMediator(String name, Mediator m) {
+ public void addNamedSequence(String name, Mediator m) {
namedSequences.put(name, m);
}
/**
+ * Allow a DynamicProperty to be added as a named sequence, this will
become
+ * a DynamicSequence
+ * @param name the name of the sequence
+ * @param dp a DynamicProperty reflecting the dynamic sequence
+ */
+ public void addNamedSequence(String name, DynamicProperty dp) {
+ namedSequences.put(name, dp);
+ }
+
+ /**
* Return the mediator named with the given name
* @param name the name being looked up
* @return the mediator referenced by the name
*/
- public Mediator getNamedMediator(String name) {
- return (Mediator) namedSequences.get(name);
+ public Mediator getNamedSequence(String name) {
+ Object o = namedSequences.get(name);
+ if (o != null && o instanceof DynamicProperty) {
+ DynamicProperty dp = (DynamicProperty) o;
+ o = getRegistry(dp.getRegistryName()).getProperty(dp);
+ if (o == null) {
+ handleException("Invalid DynamicSequence for name : " + name);
+ }
+ }
+ return (Mediator) o;
}
/**
@@ -172,7 +190,7 @@
}
/**
- * Get the whole list of named sequencies
+ * Get the whole list of named sequences
* as a Map
*/
public Map getNamedSequences() {
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
(original)
+++
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
Sun Jul 30 22:50:21 2006
@@ -33,8 +33,10 @@
import org.apache.synapse.SynapseException;
import org.apache.synapse.config.xml.MediatorFactory;
+import org.apache.synapse.config.XMLToObjectMapper;
import org.apache.synapse.api.Mediator;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
import org.apache.ws.commons.schema.*;
import sun.misc.Service;
@@ -46,7 +48,7 @@
* http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider
*/
-public class MediatorFactoryFinder {
+public class MediatorFactoryFinder implements XMLToObjectMapper {
private static final Log log =
LogFactory.getLog(MediatorFactoryFinder.class);
@@ -124,6 +126,11 @@
throw new SynapseException(msg, e);
}
+ private void handleException(String msg) {
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+
/**
* Register pluggable mediator factories from the classpath
*
@@ -184,5 +191,20 @@
*/
public Map getFactoryMap() {
return factoryMap;
+ }
+
+ /**
+ * Allow the mediator factory finder to act as an XMLToObjectMapper for
Mediators
+ * (i.e. Sequence Mediator) loaded dynamically from a Registry
+ * @param om
+ * @return
+ */
+ public Object getObjectFromOMNode(OMNode om) {
+ if (om instanceof OMElement) {
+ return getMediator((OMElement) om);
+ } else {
+ handleException("Invalid mediator configuration XML : " + om);
+ }
+ return null;
}
}
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
(original)
+++
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
Sun Jul 30 22:50:21 2006
@@ -188,15 +188,24 @@
/**
* <pre>
- * <sequence name="string>
- * Mediator+
+ * <sequence name="string" [key="string"]>
+ * Mediator*
* </sequence>
* </pre>
* @param ele
*/
public void defineSequence(SynapseConfiguration config, OMElement ele) {
- SequenceMediator seq = (SequenceMediator)
MediatorFactoryFinder.getInstance().getMediator(ele);
- config.addNamedMediator(seq.getName(), seq);
+ OMAttribute name = ele.getAttribute(new
QName(Constants.NULL_NAMESPACE, "name"));
+ OMAttribute key = ele.getAttribute(new
QName(Constants.NULL_NAMESPACE, "key"));
+ if (name != null && key != null) {
+ DynamicProperty dp = new DynamicProperty(key.getAttributeValue());
+ dp.setMapper(MediatorFactoryFinder.getInstance());
+ config.addNamedSequence(name.getAttributeValue(), dp);
+ } else {
+ SequenceMediator seq = (SequenceMediator)
+ MediatorFactoryFinder.getInstance().getMediator(ele);
+ config.addNamedSequence(seq.getName(), seq);
+ }
}
/**
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
(original)
+++
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
Sun Jul 30 22:50:21 2006
@@ -108,7 +108,7 @@
// if a named sequence is specified, use it for message mediation
} else if (targetSequence != null) {
- Mediator mediator =
synCtx.getConfiguration().getNamedMediator(targetSequence);
+ Mediator mediator =
synCtx.getConfiguration().getNamedSequence(targetSequence);
if (mediator == null) {
// what else can/should we do instead of just logging the
message as an error?
log.error("The mediator named '" + targetSequence + "' is not
defined. Dropping current message");
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
(original)
+++
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
Sun Jul 30 22:50:21 2006
@@ -62,7 +62,7 @@
// set exception information to message context
Util.setErrorInformation(synCtx, e);
- Mediator errHandler =
synCtx.getConfiguration().getNamedMediator(errorHandler);
+ Mediator errHandler =
synCtx.getConfiguration().getNamedSequence(errorHandler);
if (errHandler == null) {
handleException("Error handler sequence mediator
instance named " +
errorHandler + " cannot be found");
@@ -76,7 +76,7 @@
}
} else {
- Mediator m = synCtx.getConfiguration().getNamedMediator(ref);
+ Mediator m = synCtx.getConfiguration().getNamedSequence(ref);
if (m == null) {
handleException("Sequence mediator instance named " + ref + "
cannot be found.");
} else {
Modified:
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
(original)
+++
incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/registry/AbstractRegistry.java
Sun Jul 30 22:50:21 2006
@@ -85,18 +85,23 @@
// if we get here, we have received the raw omNode from the
// registry and our previous copy (if we had one) has expired or is
not valid
- // if the type of the object is known to have a mapper, create the
- // resultant Object using the known mapper, and cache this Object
- // else cache the raw OMNode
- if (re != null && re.getType() != null) {
+ if (dp.getMapper() != null) {
+ dp.setCache(
+ dp.getMapper().getObjectFromOMNode(omNode));
+ } else {
+ // if the type of the object is known to have a mapper, create the
+ // resultant Object using the known mapper, and cache this Object
+ // else cache the raw OMNode
+ if (re != null && re.getType() != null) {
- XMLToObjectMapper mapper = getMapper(re.getType());
- if (mapper != null) {
- dp.setMapper(mapper);
- dp.setCache(mapper.getObjectFromOMNode(omNode));
+ XMLToObjectMapper mapper = getMapper(re.getType());
+ if (mapper != null) {
+ dp.setMapper(mapper);
+ dp.setCache(mapper.getObjectFromOMNode(omNode));
- } else {
- dp.setCache(omNode);
+ } else {
+ dp.setCache(omNode);
+ }
}
}
Modified:
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
URL:
http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java?rev=427019&r1=427018&r2=427019&view=diff
==============================================================================
---
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
(original)
+++
incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/base/SequenceMediatorTest.java
Sun Jul 30 22:50:21 2006
@@ -107,7 +107,7 @@
// invoke transformation, with static enveope
MessageContext synCtx = TestUtils.getTestContext("<empty/>");
- synCtx.getConfiguration().addNamedMediator("myErrorHandler", seqErr);
+ synCtx.getConfiguration().addNamedSequence("myErrorHandler", seqErr);
seq.mediate(synCtx);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]