You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by ru...@apache.org on 2007/08/07 05:23:58 UTC
svn commit: r563382 - in /webservices/synapse/trunk/java/modules/core/src:
main/java/org/apache/synapse/config/xml/
main/java/org/apache/synapse/mediators/ext/
test/java/org/apache/synapse/config/xml/
Author: ruwan
Date: Mon Aug 6 20:23:57 2007
New Revision: 563382
URL: http://svn.apache.org/viewvc?view=rev&rev=563382
Log:
Finalizing the ClassMediator implementation
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorSerializer.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyHelper.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/ClassMediator.java
webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/ClassMediatorSerializationTest.java
webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/TestMediator.java
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java?view=diff&rev=563382&r1=563381&r2=563382
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java Mon Aug 6 20:23:57 2007
@@ -19,18 +19,16 @@
package org.apache.synapse.config.xml;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.SynapseException;
import org.apache.synapse.Mediator;
+import org.apache.synapse.SynapseException;
import org.apache.synapse.mediators.ext.ClassMediator;
import javax.xml.namespace.QName;
+import java.util.Iterator;
/**
* Creates an instance of a Class mediator using XML configuration specified
@@ -76,6 +74,7 @@
for (Iterator it = elem.getChildElements(); it.hasNext();) {
OMElement child = (OMElement) it.next();
if(PropertyHelper.isStaticProperty(child)) {
+ classMediator.addProperty(child);
PropertyHelper.setStaticProperty(child, m);
}
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorSerializer.java?view=diff&rev=563382&r1=563381&r2=563382
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorSerializer.java Mon Aug 6 20:23:57 2007
@@ -22,10 +22,11 @@
import org.apache.axiom.om.OMElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.SynapseException;
import org.apache.synapse.Mediator;
+import org.apache.synapse.SynapseException;
import org.apache.synapse.mediators.ext.ClassMediator;
-import org.apache.synapse.mediators.filters.FilterMediator;
+
+import java.util.Iterator;
/**
* <pre>
@@ -47,15 +48,22 @@
OMElement clazz = fac.createOMElement("class", synNS);
finalizeSerialization(clazz, mediator);
- if (mediator.getMediator() != null) {
+ if (mediator.getMediator() != null && mediator.getMediator().getClass().getName() != null) {
clazz.addAttribute(fac.createOMAttribute(
"name", nullNS, mediator.getMediator().getClass().getName()));
} else {
- handleException("Invalid class mediator. " +
- "The class name is required");
+ handleException("Invalid class mediator. The class name is required");
}
- //serializeProperties(clazz, mediator.getProperties());
+ Iterator itr = mediator.getProperties().iterator();
+ while(itr.hasNext()) {
+ Object property = itr.next();
+ if (property instanceof OMElement) {
+ clazz.addChild((OMElement) property);
+ } else {
+ handleException("ClassMediator property can not be serialized");
+ }
+ }
if (parent != null) {
parent.addChild(clazz);
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyHelper.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyHelper.java?view=diff&rev=563382&r1=563381&r2=563382
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyHelper.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyHelper.java Mon Aug 6 20:23:57 2007
@@ -20,13 +20,17 @@
package org.apache.synapse.config.xml;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.xpath.AXIOMXPath;
import org.apache.synapse.SynapseException;
import org.apache.synapse.MessageContext;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jaxen.JaxenException;
import javax.xml.namespace.QName;
import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
/**
* This class will be used as a Helper class to get the properties loaded while building the
@@ -60,21 +64,17 @@
String value = property.getAttributeValue(new QName("value"));
try {
- Method method = o.getClass().getMethod(mName,
- new Class[]{String.class});
+ Method method = o.getClass().getMethod(mName, String.class);
if (log.isDebugEnabled()) {
log.debug("Setting property :: invoking method "
+ mName + "(" + value + ")");
}
- method.invoke(o, new Object[]{value});
+ method.invoke(o, value);
} catch (Exception e) {
- String msg = "Error setting property : " + propertyName
- + " as a String property into class"
- + " mediator : " + o.getClass() + " : "
- + e.getMessage();
- throw new SynapseException(msg, e);
-
+ handleException("Error setting property : " + propertyName
+ + " as a String property into class mediator : " + o.getClass() + " : "
+ + e.getMessage(), e);
}
} else {
@@ -83,23 +83,17 @@
if (value != null) {
try {
- Method method = o.getClass().getMethod(mName,
- new Class[]{OMElement.class});
+ Method method = o.getClass().getMethod(mName, OMElement.class);
if (log.isDebugEnabled()) {
- log
- .debug("Setting property :: invoking method "
- + mName + "(" + value + ")");
+ log.debug("Setting property :: invoking method "
+ + mName + "(" + value + ")");
}
- method.invoke(o, new Object[]{value});
+ method.invoke(o, value);
} catch (Exception e) {
- String msg = "Error setting property : "
- + propertyName
- + " as an OMElement property into class"
- + " mediator : " + o.getClass() + " : "
- + e.getMessage();
- throw new SynapseException(msg, e);
-
+ handleException("Error setting property : " + propertyName
+ + " as an OMElement property into class mediator : "
+ + o.getClass() + " : " + e.getMessage(), e);
}
}
@@ -120,19 +114,73 @@
*/
public static void setDynamicProperty(OMElement property, Object o, MessageContext synCtx) {
- // todo: ruwan
+ if (property.getLocalName().toLowerCase().equals("property")) {
+
+ String propertyName = property.getAttributeValue(new QName("name"));
+ String mName = "set"
+ + Character.toUpperCase(propertyName.charAt(0))
+ + propertyName.substring(1);
+
+ // try to set String value first
+ if (property.getAttributeValue(new QName("expression")) != null) {
+ String expression = property.getAttributeValue(new QName("expression"));
+
+ try {
+ Method method = o.getClass().getMethod(mName, String.class);
+
+ AXIOMXPath xp = new AXIOMXPath(expression);
+ OMElementUtils.addNameSpaces(xp, property, log);
+ String value = Axis2MessageContext.getStringValue(xp, synCtx);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Setting property :: invoking method "
+ + mName + "(" + expression + ")");
+ }
+
+ method.invoke(o, value);
+
+ } catch(NoSuchMethodException e) {
+ handleException("Unable to set the dynamic property value to the class. " +
+ "No setter method for the property " + propertyName + " in class "
+ + o.getClass().getName(), e);
+ } catch (JaxenException e) {
+ handleException("Unable to evaluate the XPATH " + expression
+ + " to set the property " + propertyName, e);
+ } catch (IllegalAccessException e) {
+ handleException("Unable to set the dynamic property using the method "
+ + mName + " of the class " + o.getClass().getName(), e);
+ } catch (InvocationTargetException e) {
+ handleException("Unable to set the dynamic property using the method "
+ + mName + " of the class " + o.getClass().getName(), e);
+ }
+ }
+ }
}
/**
* This method will check the given OMElement represent either a static property or not
*
* @param property - OMElement to be checked for the static property
- * @return boolean true id the elemet represents a static property element false otherwise
+ * @return boolean true if the elemet represents a static property element false otherwise
*/
public static boolean isStaticProperty(OMElement property) {
return "property".equals(property.getLocalName().toLowerCase())
- && (property.getAttributeValue(new QName("value")) != null);
+ && (property.getAttributeValue(new QName("expression")) == null);
+
+ }
+ private static void handleException(String message, Throwable e) {
+ if(log.isDebugEnabled()) {
+ log.debug(message + e.getMessage());
+ }
+ throw new SynapseException(message, e);
+ }
+
+ private static void handleException(String message) {
+ if(log.isDebugEnabled()) {
+ log.debug(message);
+ }
+ throw new SynapseException(message);
}
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/ClassMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/ClassMediator.java?view=diff&rev=563382&r1=563381&r2=563382
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/ClassMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/ext/ClassMediator.java Mon Aug 6 20:23:57 2007
@@ -19,21 +19,18 @@
package org.apache.synapse.mediators.ext;
+import org.apache.axiom.om.OMElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.Constants;
import org.apache.synapse.ManagedLifecycle;
import org.apache.synapse.Mediator;
import org.apache.synapse.MessageContext;
-
import org.apache.synapse.core.SynapseEnvironment;
import org.apache.synapse.mediators.AbstractMediator;
-import org.apache.axiom.om.OMElement;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
/**
* The class mediator delegates the mediation to a new instance of a specified
@@ -91,15 +88,19 @@
}
public void destroy() {
- log.debug("destroy");
- if (mediator instanceof ManagedLifecycle) {
+ if (log.isDebugEnabled()) {
+ log.debug("ClassMediator::destroy()");
+ }
+ if (mediator instanceof ManagedLifecycle) {
((ManagedLifecycle) mediator).destroy();
}
}
public void init(SynapseEnvironment se) {
- log.debug("init");
- if (mediator == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("ClassMediator::init()");
+ }
+ if (mediator == null) {
log.debug("init called before mediator set");
return;
}
Modified: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/ClassMediatorSerializationTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/ClassMediatorSerializationTest.java?view=diff&rev=563382&r1=563381&r2=563382
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/ClassMediatorSerializationTest.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/ClassMediatorSerializationTest.java Mon Aug 6 20:23:57 2007
@@ -40,7 +40,16 @@
assertTrue(serialization(inputXml, classMediatorSerializer));
}
- // todo: need to add more scenarios with properties
-
+ public void testClassMediatorSerializationWithProperty() throws Exception {
+ String inputXml = "<class xmlns=\"http://ws.apache.org/ns/synapse\" name=\"org.apache.synapse.config.xml.TestMediator\"><property name=\"testProp\" value=\"This is a test\"/></class> ";
+ assertTrue(serialization(inputXml, classMediatorFactory, classMediatorSerializer));
+ assertTrue(serialization(inputXml, classMediatorSerializer));
+ }
+ public void testClassMediatorSerializationWithInlineProperty() throws Exception {
+ String inputXml = "<class xmlns=\"http://ws.apache.org/ns/synapse\" name=\"org.apache.synapse.config.xml.TestMediator\"><property name=\"testElemProp\"><test/></property></class> ";
+ assertTrue(serialization(inputXml, classMediatorFactory, classMediatorSerializer));
+ assertTrue(serialization(inputXml, classMediatorSerializer));
+ }
+
}
Modified: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/TestMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/TestMediator.java?view=diff&rev=563382&r1=563381&r2=563382
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/TestMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/TestMediator.java Mon Aug 6 20:23:57 2007
@@ -20,6 +20,7 @@
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
+import org.apache.axiom.om.OMElement;
/**
*
@@ -28,8 +29,28 @@
public class TestMediator extends AbstractMediator {
+ private String testProp = "test property";
+
+ private OMElement testElemProp;
+
public boolean mediate(MessageContext synCtx) {
return false;
+ }
+
+ public String getTestProp() {
+ return this.testProp;
+ }
+
+ public void setTestProp(String value) {
+ this.testProp = value;
+ }
+
+ public OMElement getTestElemProp() {
+ return testElemProp;
+ }
+
+ public void setTestElemProp(OMElement testElemProp) {
+ this.testElemProp = testElemProp;
}
public String getType() {
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org