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