[jboss-svn-commits] JBL Code SVN: r15884 - in labs/jbossesb/trunk/product/rosetta: tests/src/org/jboss/soa/esb/message/mapping and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 17 10:41:59 EDT 2007


Author: kevin.conner at jboss.com
Date: 2007-10-17 10:41:59 -0400 (Wed, 17 Oct 2007)
New Revision: 15884

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/mapping/ObjectMapper.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/mapping/ToMessageMapperUnitTest.java
Log:
Updated mapper to support hierarchical body setting: JBESB-1181

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/mapping/ObjectMapper.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/mapping/ObjectMapper.java	2007-10-17 14:20:05 UTC (rev 15883)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/mapping/ObjectMapper.java	2007-10-17 14:41:59 UTC (rev 15884)
@@ -267,22 +267,40 @@
         {
             throw new ObjectMappingException(expression + " should start with [<location>.]<name>") ;
         }
-        else if ((path.length > 2) && !"header".equals(path[0]))
+        else if ((path.length > 2) && !("header".equals(path[0]) || "body".equals(path[0])))
         {
-            throw new ObjectMappingException("Only 'header' can contain hierarchical names: " + expression) ;
+            throw new ObjectMappingException("Only 'header' and 'body' can contain hierarchical names: " + expression) ;
         }
         String location = path[0];
         String name     = path[1];
         if ("body".equalsIgnoreCase(location)) {
             Body body   = message.getBody();
-            if (BODY_CONTENT.equals(name)) {
-                try {
-                    payloadProxy.setPayload(message, object);
-                } catch (MessageDeliverException e) {
-                    throw new ObjectMappingException("Unable to set payload on message.", e) ;
+            if (path.length == 2) {
+                if (BODY_CONTENT.equals(name)) {
+                    try {
+                        payloadProxy.setPayload(message, object);
+                    } catch (MessageDeliverException e) {
+                        throw new ObjectMappingException("Unable to set payload on message.", e) ;
+                    }
+                } else {
+                    body.add(name, object);
                 }
             } else {
-                body.add(name, object);
+                final Object bodyObject ;
+                if (BODY_CONTENT.equals(name)) {
+                    try {
+                        bodyObject = payloadProxy.getPayload(message) ;
+                    } catch (final MessageDeliverException mde) {
+                        throw new ObjectMappingException("Unable to get payload from message.", mde) ;
+                    }
+                } else {
+                    bodyObject = body.get(name) ;
+                }
+                
+                if (bodyObject == null) {
+                    throw new ObjectMappingException("Unable to set property on named object: " + name + ", object does not exist in message") ;
+                }
+                MVEL.setProperty(bodyObject, path[2], object) ;
             }
         } else if ("properties".equalsIgnoreCase(location)) {
             message.getProperties().setProperty(name, object);

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/mapping/ToMessageMapperUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/mapping/ToMessageMapperUnitTest.java	2007-10-17 14:20:05 UTC (rev 15883)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/mapping/ToMessageMapperUnitTest.java	2007-10-17 14:41:59 UTC (rev 15884)
@@ -79,5 +79,42 @@
         objectMapper.setObjectOnMessage(message2, expression2, pojo1);
         
         assertEquals(message2.getBody().get("pojo1Name"),pojo1);
+        
+        final Message message3 = MessageFactory.getInstance().getMessage();
+        
+        final String expression3="'body'.'pojo3Name'.message";
+        final BodyTestObject bodyTestObject = new BodyTestObject() ;
+        
+        assertNull("Initial body test object message", bodyTestObject.getMessage()) ;
+        
+        message3.getBody().add("pojo3Name", bodyTestObject) ;
+        final String testObjectMessage = "Set message" ;
+        objectMapper.setObjectOnMessage(message3, expression3, testObjectMessage);
+        
+        final BodyTestObject currentBodyTestObject = (BodyTestObject)message3.getBody().get("pojo3Name") ;
+        assertNotNull("Retrieve body test object", currentBodyTestObject) ;
+        assertEquals("Message set", testObjectMessage, currentBodyTestObject.getMessage()) ;
+        
+        try
+        {
+            objectMapper.setObjectOnMessage(message3, "body.DOES_NOT_EXIST.param", "test message") ;
+            fail("Expected ObjectMappingException") ;
+        }
+        catch (final ObjectMappingException ome) {} // expected
     }
+    
+    public static final class BodyTestObject
+    {
+        private String message ;
+        
+        public String getMessage()
+        {
+            return message ;
+        }
+        
+        public void setMessage(final String message)
+        {
+            this.message = message ;
+        }
+    }
 }




More information about the jboss-svn-commits mailing list