[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