[jboss-svn-commits] JBL Code SVN: r6415 - in labs/jbossesb/trunk/product: core/common/tests/resources core/listeners/src/org/jboss/soa/esb/actions core/listeners/tests/src/org/jboss/soa/esb/actions lib/ext

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Sep 25 12:15:25 EDT 2006


Author: tfennelly
Date: 2006-09-25 12:15:09 -0400 (Mon, 25 Sep 2006)
New Revision: 6415

Added:
   labs/jbossesb/trunk/product/core/common/tests/resources/device-profile.xml
   labs/jbossesb/trunk/product/lib/ext/milyn-tinak-0.7.1.jar
Removed:
   labs/jbossesb/trunk/product/lib/ext/milyn-tinak-0.7.jar
Modified:
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/SmooksTransformer.java
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/SmooksTransformerUnitTest.java
   labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/smooks-test.cdrl
   labs/jbossesb/trunk/product/lib/ext/milyn-commons-0.7.jar
   labs/jbossesb/trunk/product/lib/ext/milyn-smooks-core-0.7.2-SNAPSHOT.jar
   labs/jbossesb/trunk/product/lib/ext/milyn-smooks-javabean-0.1.1.jar
   labs/jbossesb/trunk/product/lib/ext/milyn-smooks-misc-0.1.1.jar
   labs/jbossesb/trunk/product/lib/ext/milyn-smooks-templating-0.2.jar
Log:
SmooksTransformer

Added: labs/jbossesb/trunk/product/core/common/tests/resources/device-profile.xml
===================================================================
--- labs/jbossesb/trunk/product/core/common/tests/resources/device-profile.xml	2006-09-25 13:16:27 UTC (rev 6414)
+++ labs/jbossesb/trunk/product/core/common/tests/resources/device-profile.xml	2006-09-25 16:15:09 UTC (rev 6415)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE device-profiles PUBLIC "-//MILYN//DTD TINAK 1.0//EN" "http://www.milyn.org/dtd/device-profile-1.0.dtd">
+
+<device-profiles>
+	<device-profile name="type:Acme-Order-XML" list="profile1,profile2"/>
+	<device-profile name="from:Acme" list="profile23,profile24"/>
+	<device-profile name="to:AcmePartner" list="profile55,profile56"/>
+
+	<device-profile name="profile1" list="A"/>
+	<device-profile name="profile2" list="B"/>
+	<device-profile name="profile23" list="C"/>
+	<device-profile name="profile24" list="D"/>
+	<device-profile name="profile55" list="E"/>
+	<device-profile name="profile56" list="E"/>
+</device-profiles>

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/SmooksTransformer.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/SmooksTransformer.java	2006-09-25 13:16:27 UTC (rev 6414)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/actions/SmooksTransformer.java	2006-09-25 16:15:09 UTC (rev 6415)
@@ -23,11 +23,14 @@
 package org.jboss.soa.esb.actions;
 
 import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.milyn.SmooksStandalone;
@@ -57,6 +60,7 @@
 
 public class SmooksTransformer implements ActionProcessor {
 
+    private static Logger logger = Logger.getLogger(SmooksTransformer.class);
     private static final String SMOOKS_CDR_LST = "smooks-cdr.lst";
     private static SmooksStandalone smooks;
     private String messageType;
@@ -87,6 +91,12 @@
             throw new ConfigurationException("Action configuration 'message-to' not specified.");
         }
         messageEnc = KeyValuePair.getValue("message-encoding", properties, "UTF-8");
+        // Test the configured encoding
+        try {
+            "astring".getBytes(messageEnc);
+        } catch (UnsupportedEncodingException e) {
+            throw new ConfigurationException("Invalid character encoding [" + messageEnc + "] on action configuration [" + name + "].", e);
+        }
 
         // The "cpPrefix" property is "private" and only here in order to make unit testing easier.
         // It allows us to force a "bad" config location for the smooks-cdr.lst file....
@@ -105,16 +115,30 @@
         // statically configured against these profiles in the device-profiles.xml file.  This is a bit 
         // of a hack but is fine for now just to get the ball rolling...
         smooks.registerUseragent(messageUseragent, new String[] {"type:" + messageType, "from:" + messageFrom, "to:" + messageTo});
+        // TODO: Recurcively expand out the profiles supplied here using smooks.getContext().getProfileStore().  Do this inside SmooksStandalone
 	}
 
     /* (non-Javadoc)
      * @see org.jboss.soa.esb.actions.ActionProcessor#process(java.lang.Object)
      */
     public Object process(Object message) {
-        
-        // TODO: add the actual Smooks calling code
-                        
-        return message;
+        if(message instanceof String) {
+            byte[] messageBytes = null;
+            
+            try {
+                messageBytes = ((String)message).getBytes(messageEnc);
+            } catch (UnsupportedEncodingException e) {
+                // Can't happen - encoding was already tested in the constructor.
+            }
+            
+            // TODO: Cater for more message input types e.g. InputStream, DOM Document...
+            // TODO: Cater for more message output types e.g. InputStream, DOM Document...
+
+            return smooks.filterAndSerialize(messageUseragent, new ByteArrayInputStream(messageBytes));
+        } else {
+            logger.warn("String message types only supported.  Input message was [" + message.getClass().getName() + "].  Returning message untransformed.");
+            return message;
+        }
     }
 
     /* (non-Javadoc)
@@ -147,8 +171,8 @@
                     throw new ConfigurationException("Failed to locate Smooks configuration list file [" + SMOOKS_CDR_LST + "].  This file must be located at " + cpPrefix + " relative to the root of the classpath.");
                 }
            
-                // TODO:  There's a potential issue here if to SmooksTransformer action configs specify and require
-                // different encodings because they're all sharing the same static SmooksStandalone instance!!
+                // TODO:  There's a potential issue here if two SmooksTransformer action configs specify and require
+                // different encodings.   This is because they're all sharing the same static SmooksStandalone instance!!
                 // This should eventually be solveable by creating a proper Smooks container impl for the ESB.
                 smooks = new SmooksStandalone(messageEnc);
                 
@@ -156,6 +180,7 @@
                     BufferedReader configReader = new BufferedReader(new InputStreamReader(configListStream));
                     smooks.getContext().getStore().load(configReader);
                 } catch (Exception e) {
+                    smooks = null;
                     throw new ConfigurationException("Smooks configuration load failed.", e);
                 }
             }
@@ -167,7 +192,7 @@
      * <p/>
      * Clears the internal static smooks instance.
      */
-    public void reset() {
+    public static void reset() {
         synchronized (SmooksTransformer.class) {
             smooks = null;
         }

Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/SmooksTransformerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/SmooksTransformerUnitTest.java	2006-09-25 13:16:27 UTC (rev 6414)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/SmooksTransformerUnitTest.java	2006-09-25 16:15:09 UTC (rev 6415)
@@ -37,6 +37,11 @@
  */
 public class SmooksTransformerUnitTest extends TestCase {
 
+    @Override
+    protected void setUp() throws Exception {
+        SmooksTransformer.reset();
+    }
+
     public void test_bad_config() {
         List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
 
@@ -54,19 +59,37 @@
     }
 
     public void test_trans() throws ConfigurationException {
+        String message;
+        String transRes;
+        
+        // Very basic test!  Just illustrates profile based resource selection.
+        // Read the smooks-test.cdrl config file in this package!! 
+
+        // Initialise the acme order message...
+        message = "<a><ddd>value</ddd></a>";
+        
+        // Transform the order message going to "AcmePartner1"...
+        transRes = transform(message, "Acme-Order-XML", "Acme", "AcmePartner1");
+        assertEquals("<x><b>value</b></x>", transRes);
+        
+        // Transform the order message going to "AcmePartner2"...
+        transRes = transform(message, "Acme-Order-XML", "Acme", "AcmePartner2");
+        assertEquals("<x><c>value</c></x>", transRes);
+    }
+    
+    private String transform(String message, String type, String from, String to) throws ConfigurationException {
         List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
 
         // Set the message properties in order to trigger the appropriate transformations
         // on the message...
-        properties.add(new KeyValuePair("message-type", "Acme-Order-XML"));
-        properties.add(new KeyValuePair("message-from", "Acme"));
-        properties.add(new KeyValuePair("message-to", "AcmePartner"));
+        properties.add(new KeyValuePair("message-type", type));
+        properties.add(new KeyValuePair("message-from", from));
+        properties.add(new KeyValuePair("message-to", to));
 
         // The smooks-cdr.lst and device-profile.xml files are located in the root of the 
         // test src folder...
         SmooksTransformer transformer = new SmooksTransformer("trans", properties);
-        
-        // TODO: Add the transformation....
+        return (String) transformer.process(message);
     }
 
     private void assertConfigException(List<KeyValuePair> properties, String expectedException) {

Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/smooks-test.cdrl
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/smooks-test.cdrl	2006-09-25 13:16:27 UTC (rev 6414)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/actions/smooks-test.cdrl	2006-09-25 16:15:09 UTC (rev 6415)
@@ -1,16 +1,28 @@
 <?xml version='1.0'?>
 <!DOCTYPE smooks-resource-list PUBLIC '-//MILYN//DTD SMOOKS 1.0//EN' 'http://milyn.org/dtd/smooksres-list-1.0.dtd'>
 
-<smooks-resource-list default-selector='b' default-useragent='yyy' default-path='y.txt' default-namespace='http://milyn.codehaus.org/smooks-default'>
+<smooks-resource-list>
 
-	<!-- Overriding the defaults -->
-	<smooks-resource selector='a' useragent='xxx' path='x.txt' namespace='http://milyn.codehaus.org/smooks'/>
+	<!-- 
+		"Acme-Order-XML" messages going from "Acme" to "AcmePartner1" 
+	-->
+	<smooks-resource useragent="type:Acme-Order-XML AND from:Acme AND to:AcmePartner1" selector="ddd" path="org.milyn.cdres.trans.RenameElementTU">
+		<param name="replacementElement">b</param>
+	</smooks-resource>
 
-	<!-- Inheriting the defaults -->
-	<smooks-resource>
-		<param name='param1'>param1Val</param>
-		<param name='param2'>true</param>
-		<param name='param3'>false</param>
+	<!-- 
+		"Acme-Order-XML" messages going from "Acme" to "AcmePartner2" 
+	-->
+	<smooks-resource useragent="type:Acme-Order-XML AND from:Acme AND to:AcmePartner2" selector="ddd" path="org.milyn.cdres.trans.RenameElementTU">
+		<param name="replacementElement">c</param>
 	</smooks-resource>
+
+	<!-- 
+		"Acme-Order-XML" messages going from "Acme" to anywhere
+	-->
+	<smooks-resource useragent="type:Acme-Order-XML AND from:Acme" selector="a" path="org.milyn.cdres.trans.RenameElementTU">
+		<param name="replacementElement">x</param>
+	</smooks-resource>
+
 </smooks-resource-list>
 

Modified: labs/jbossesb/trunk/product/lib/ext/milyn-commons-0.7.jar
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/lib/ext/milyn-smooks-core-0.7.2-SNAPSHOT.jar
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/lib/ext/milyn-smooks-javabean-0.1.1.jar
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/lib/ext/milyn-smooks-misc-0.1.1.jar
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/lib/ext/milyn-smooks-templating-0.2.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/lib/ext/milyn-tinak-0.7.1.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/lib/ext/milyn-tinak-0.7.1.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Deleted: labs/jbossesb/trunk/product/lib/ext/milyn-tinak-0.7.jar
===================================================================
(Binary files differ)




More information about the jboss-svn-commits mailing list