[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 @@
* <Action name="Customer-To-XML" processor="ObjectToXStream">
* <property name="class-alias" value="Customer" /> <!-- 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. -->
* <property name="exclude-package" value="false" /> <!-- Default "true". Not applicable if a "class-alias" is specified. -->
+ * <property name="namespace-uri" value="namespace goes here" />
+ * <property name="aliases"> <!-- Optional list of extra aliases to add to XStream -->
+ * <alias name="aliasName" class="className" />
+ * <alias name="aliasName" class="className" />
+ * ...
+ * </property>
+ * <property name="namespaces"> <!-- Optional list of namespaces to register with XStream -->
+ * <namespace namespace-uri="http://www.xyz.com" local-part="xyz" />
+ * <namespace namespace-uri="http://www.xyz.com/x" local-part="x" />
+ * </property>
+ * ...
* </Action>
* </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