[jboss-svn-commits] JBL Code SVN: r16593 - in labs/jbossesb/trunk: product/docs and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Nov 14 09:07:45 EST 2007


Author: beve
Date: 2007-11-14 09:07:45 -0500 (Wed, 14 Nov 2007)
New Revision: 16593

Added:
   labs/jbossesb/trunk/product/lib/ext/jsr173_1.0_ri.jar
Modified:
   labs/jbossesb/trunk/IDE/JBossIDE/product/.classpath
   labs/jbossesb/trunk/product/docs/MessageActionGuide.odt
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToXStream.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToXStreamUnitTest.java
Log:
Work for JBESB-1240 "ObjectToXStream, add support for namespaces."


Modified: labs/jbossesb/trunk/IDE/JBossIDE/product/.classpath
===================================================================
--- labs/jbossesb/trunk/IDE/JBossIDE/product/.classpath	2007-11-14 13:48:28 UTC (rev 16592)
+++ labs/jbossesb/trunk/IDE/JBossIDE/product/.classpath	2007-11-14 14:07:45 UTC (rev 16593)
@@ -74,5 +74,6 @@
 	<classpathentry kind="lib" path="lib/ext/juddi-20071022.191630-27.jar"/>
 	<classpathentry kind="lib" path="lib/ext/juddi-client-20071022.191630-6.jar"/>
 	<classpathentry kind="lib" path="lib/ext/xstream-1.2.2.jar"/>
+	<classpathentry kind="lib" path="lib/ext/jsr173_1.0_ri.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

Modified: labs/jbossesb/trunk/product/docs/MessageActionGuide.odt
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/lib/ext/jsr173_1.0_ri.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/lib/ext/jsr173_1.0_ri.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToXStream.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToXStream.java	2007-11-14 13:48:28 UTC (rev 16592)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToXStream.java	2007-11-14 14:07:45 UTC (rev 16593)
@@ -22,20 +22,24 @@
 
 package org.jboss.soa.esb.actions.converters;
 
-import java.util.List;
+import java.util.HashMap;
+import javax.xml.namespace.QName;
+import java.util.Map;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.helpers.ConfigTree;
-import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 
 import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.QNameMap;
+import com.thoughtworks.xstream.io.xml.StaxDriver;
 
 /**
  * Object to XML processor.
@@ -47,6 +51,17 @@
  * &lt;Action name="Customer-To-XML" processor="ObjectToXStream"&gt;
  *     &lt;property name="class-alias" value="Customer" /&gt; &lt;!-- Class alias used in call to <a href="http://xstream.codehaus.org/javadoc/com/thoughtworks/xstream/XStream.html">XStream.alias(String, Class)</a> prior to serialisation. --&gt;
  *     &lt;property name="exclude-package" value="false" /&gt; &lt;!-- Default "true".  Not applicable if a "class-alias" is specified. --&gt;
+ *     &lt;property name="namespace-uri" value="namespace goes here" /&gt;
+ *     &lt;property name="aliases"&gt; &lt;!-- Optional list of extra aliases to add to XStream  --&gt;
+ * 		&lt;alias name="aliasName" class="className" /&gt; 
+ * 		&lt;alias name="aliasName" class="className" /&gt; 
+ * 		...
+ *     &lt;/property&gt;
+ *     &lt;property name="namespaces"&gt; &lt;!-- Optional list of namespaces to register with XStream  --&gt;
+ * 		&lt;namespace namespace-uri="http://www.xyz.com" local-part="xyz" /&gt; 
+ * 		&lt;namespace namespace-uri="http://www.xyz.com/x" local-part="x" /&gt; 
+ *     &lt;/property&gt;
+ * 		...
  * &lt;/Action&gt;
  * </pre>
  * <p/>
@@ -54,13 +69,20 @@
  * excluded unless "exclude-package" is set to "false"/"no". 
  * 
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ * @author <a href="mailto:daniel.bevenius at gmail.com">daniel.bevenius at gmail.com</a>
  * @since Version 4.0
  */
 public class ObjectToXStream extends AbstractActionPipelineProcessor {
-    
+	private Logger log = Logger.getLogger( ObjectToXStream.class );
+	
+	public static final String ATTR_CLASS_ALIAS = "class-alias";
+	public static final String ATTR_EXCLUDE_PACKAGE = "exclude-package";
+	public static final String ATTR_NAMESPACE_URI = "namespace-uri";
+	public static final String ATTR_NAMESPACE_LOCALPART = "local-part";
     private String classAlias;
     private boolean excludePackage;
     private MessagePayloadProxy payloadProxy;
+    private Map<String,String> namespaces;
 
     /**
      * Public constructor.
@@ -71,8 +93,9 @@
         payloadProxy = new MessagePayloadProxy(configTree,
                                                new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
                                                new String[] {ActionUtils.POST_ACTION_DATA});
-        classAlias = configTree.getAttribute("class-alias");
-        excludePackage = configTree.getAttribute("exclude-package", "true").equals("true");
+        classAlias = configTree.getAttribute(ATTR_CLASS_ALIAS);
+        excludePackage = configTree.getAttribute(ATTR_EXCLUDE_PACKAGE, "true").equals("true");
+        namespaces = getNamespaces(configTree);
     }
 
     /* (non-Javadoc)
@@ -87,7 +110,7 @@
             throw new ActionProcessingException(e);
         }
 
-        XStream xstream = new XStream();
+        XStream xstream = createXStreamInstance();
         
         if(classAlias == null) {
             if(excludePackage) {
@@ -107,4 +130,48 @@
 
         return message;
     }
+    
+    /**
+     * Creates an XStream instance. If namespace mappings have been defined the XStream
+     * instance is created with a StaxDriver configured with those mappings.
+     * 
+     * @param aliases  Map of aliases.
+     * @throws ActionProcessingException 
+     */
+    protected XStream createXStreamInstance() {
+      if (namespaces == null || namespaces.size() == 0) {
+        return new XStream();
+      }
+      else {
+        final QNameMap nsm = new QNameMap();
+        for (Map.Entry<String,String> me : namespaces.entrySet() ) {
+          final String namespaceURI = (String)me.getKey();
+          final String localPart = (String)me.getValue();
+          nsm.registerMapping(new QName(namespaceURI, localPart), localPart);
+        }
+        return new XStream(new StaxDriver(nsm));
+      }
+    }
+    
+    /**
+     * Will extract the namespace elements from the passed-in configTree 
+     * 
+     * @param configTree      the configuration for this class
+     * 
+     * @return Map<String,String>   either an empty map or a map containing the name
+     *                space URI as its key and the corresponding value is the local
+     *                XML element name to map it to.  
+     */
+    protected Map<String,String> getNamespaces(ConfigTree configTree) {
+		Map<String,String> namespaces = new HashMap<String,String>();
+		      
+		ConfigTree[] children = configTree.getChildren("namespace");
+		      
+		if (children != null) 
+		{
+			for (ConfigTree namespace : children)
+				namespaces.put(namespace.getAttribute(ATTR_NAMESPACE_URI), namespace.getAttribute(ATTR_NAMESPACE_LOCALPART));
+		}
+		return namespaces;
+	}
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToXStreamUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToXStreamUnitTest.java	2007-11-14 13:48:28 UTC (rev 16592)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToXStreamUnitTest.java	2007-11-14 14:07:45 UTC (rev 16593)
@@ -22,15 +22,11 @@
 
 package org.jboss.soa.esb.actions.converters;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import junit.framework.TestCase;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.actions.ActionProcessingException;
-import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.actions.TestBean;
-import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.format.MessageFactory;
@@ -41,9 +37,12 @@
 /**
  * ObjectToXStream unit tests.
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ * @author <a href="mailto:daniel.bevenius at gmail.com">daniel.bevenius at gmail.com</a>
  * @since Version 4.0
  */
 public class ObjectToXStreamUnitTest extends TestCase {
+	
+	private Logger log = Logger.getLogger( ObjectToXStreamUnitTest.class );
 
     public void test_default() throws ActionProcessingException {
         ConfigTree config = new ConfigTree("config");
@@ -107,4 +106,23 @@
         assertEquals("Tom", bean.getName());
         assertEquals("1234", bean.getPhone());
     }
+    
+    public void test_with_namespace() throws ActionProcessingException {
+    	final String ns = "http://www.xyz.com.org/xyz";
+        ConfigTree config = new ConfigTree("config");
+
+        config.setAttribute("class-alias", "TomsClass");
+        ConfigTree namespace = new ConfigTree("namespace", config);
+        namespace.setAttribute( ObjectToXStream.ATTR_NAMESPACE_URI, ns);
+        namespace.setAttribute( ObjectToXStream.ATTR_NAMESPACE_LOCALPART, "TomsClass");
+        
+        ObjectToXStream objectToXStream = new ObjectToXStream(config);
+        
+        Message oMsg = MessageFactory.getInstance().getMessage();
+        oMsg.getBody().add(new TestBean("Tom", "1234"));
+        objectToXStream.process(oMsg);
+        String xml = (String)oMsg.getBody().get();
+        assertTrue( xml.contains( "TomsClass xmlns=\"" + ns ));
+    }
+    
 }




More information about the jboss-svn-commits mailing list