[jboss-svn-commits] JBL Code SVN: r15872 - in labs/jbossesb/trunk: product/rosetta/src/org/jboss/soa/esb and 61 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 17 04:47:44 EDT 2007


Author: tfennelly
Date: 2007-10-17 04:47:44 -0400 (Wed, 17 Oct 2007)
New Revision: 15872

Added:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Configurable.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/MessagePayloadProxy.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/MessagePayloadProxyUnitTest.java
Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/assertion/AssertArgument.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/ActionUtils.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/Notifier.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/StoreMessageToFile.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/SystemPrintln.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/AbstractObjectXStream.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ByteArrayToString.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectInvoke.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToCSVString.java
   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/XStreamToObject.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/AbstractRouter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/EchoRouter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/HttpRouter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/JMSRouter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessor.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/LocalFileMessageComposer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageHibernateMessageContents.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContents.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/RemoteFileMessageComposer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/AbstractMessageComposer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/BasicMessageComposer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageAwareListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageComposer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageCounter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/body/content/BytesBody.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/mapping/ObjectMapper.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyConsole.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyEmail.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFTP.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFiles.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyQueues.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifySqlTable.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierIntegrationTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierUtilUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/DefaultMessageURIGeneratorUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/JcrMessageURIGeneratorUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ByteArrayToStringUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/LongToDateConverter.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectInvokeTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToCSVStringUnitTest.java
   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/StringToLongConverter.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/XStreamToObjectUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/FileNameGeneratorActionUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/AddTimestampNamingStrategyUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/ChangeSuffixNamingStrategyUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/EchoRouterUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/HttpRouterUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/JmsRouterIntegrationTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/test.groovy
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templates/MockActionUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessorUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFileReplyToEprUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFtpReplyToEprIntegrationTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultJdbcReplyToEprUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerBaseTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFTPIntegrationTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFileUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJDBCUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJMSXntegrationTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListenerUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GatewayFilterUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GroovyGatewayUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListenerUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContentsUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/ReadOnlyRemoteGatewayListenerIntegrationTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MockMessageComposer.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotificationListUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyEmailUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyFilesUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyJMSUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyQueuesUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifySqlTableUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyTopicsUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/TestNotificationTarget1.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/tests/filter/TraceFilterUnitTest.java
   labs/jbossesb/trunk/product/samples/quickstarts/helloworld/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java
   labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/jboss-esb-unfiltered.xml
   labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/src/org/jboss/soa/esb/samples/quickstart/helloworldfileaction/MyAction.java
   labs/jbossesb/trunk/product/samples/quickstarts/scheduled_services/src/org/jboss/soa/esb/samples/quickstart/scheduler/MyScheduledActionMsgComposer.java
   labs/jbossesb/trunk/product/samples/quickstarts/scripting_groovy/scripts/messagePlay.groovy
   labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/jboss-esb.xml
   labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/dvdstore/DVDStoreAction.java
   labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/samples/quickstart/transformxml2pojo/MyJMSListenerAction.java
   labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/MessageStoreFactory.java
   labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/jcr/JCRMessageStoreImpl.java
   labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/soa/esb/actions/MessagePersister.java
   labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreClient.java
   labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreUnitTest.java
   labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/actions/MessagePersisterUnitTest.java
   labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/tests/MessageStoreUnitTest.java
   labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java
   labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java
   labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/BpmProcessorUnitTest.java
   labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/JbpmTestUtil.java
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.java
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/ContentBasedWiretap.java
   labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java
   labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java
   labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksTransformer.java
   labs/jbossesb/trunk/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/converters/SmooksTransformerUnitTest.java
   labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java
   labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPProcessor.java
   labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/soapclient-config-01.xml
   labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collect.jsp
   labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collectcommands.jsp
   labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/manage.jsp
   labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/jms/JmsGatewayListenerUnitTest.java
   labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/MyAction.java
   labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/SimpleDeployUnitTest.java
   labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/ftp/FtpUnitTest.java
   labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/jca/JcaUnitTest.java
   labs/jbossesb/trunk/qa/junit/versioned-scoped-src/org/jboss/soa/esb/server/MyAction.java
   labs/jbossesb/trunk/qa/quickstarts/resources/transformedmessageXML2POJO.log
   labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/Helpers.java
   labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/ScriptingGroovyTest.java
   labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/TransformXML2PojoTest.java
Log:
Standardising message content location http://jira.jboss.com/jira/browse/JBESB-1162

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/assertion/AssertArgument.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/assertion/AssertArgument.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/assertion/AssertArgument.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -90,6 +90,19 @@
      * @param argName Argument name.
      * @throws IllegalArgumentException Argument is null or empty.
      */
+    public static void isNotNullAndNotEmpty(Object[] arg, String argName) throws IllegalArgumentException {
+        if (arg == null || arg.length == 0) {
+            throw new IllegalArgumentException("null or empty '" + argName
+                    + "' arg in method call.");
+        }
+    }
+
+    /**
+     * Assert that the argument is neither null nor empty.
+     * @param arg Argument.
+     * @param argName Argument name.
+     * @throws IllegalArgumentException Argument is null or empty.
+     */
     public static void isNotNullAndNotEmpty(Map arg, String argName) throws IllegalArgumentException {
         if (arg == null || arg.isEmpty()) {
             throw new IllegalArgumentException("null or empty '" + argName

Added: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Configurable.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Configurable.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Configurable.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb;
+
+import org.jboss.soa.esb.helpers.ConfigTree;
+
+/**
+ * Configurable component.
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public interface Configurable {
+    // This should eventually be supported through annotations.
+
+    /**
+     * Set the component configuration.
+     * @param config The conponent configuration.
+     * @throws ConfigurationException Bad component configuration.
+     */
+    public void setConfiguration(ConfigTree config) throws ConfigurationException;
+}


Property changes on: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/Configurable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/ActionUtils.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/ActionUtils.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/ActionUtils.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -35,7 +35,9 @@
  */
 public class ActionUtils 
 {
-	public static final String PRE_ACTION_DATA = "org.jboss.soa.esb.actions.pre";
+    @Deprecated
+    public static final String PRE_ACTION_DATA = "org.jboss.soa.esb.actions.pre";
+    @Deprecated
 	public static final String POST_ACTION_DATA = "org.jboss.soa.esb.actions.post";
 
     /**

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/Notifier.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/Notifier.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/Notifier.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -25,8 +25,10 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.notification.NotificationList;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,8 +40,14 @@
  * @since Version 4.0
  */
 public class Notifier implements ActionLifecycle {
+
+    private MessagePayloadProxy payloadProxy;
+
     public Notifier(ConfigTree config) {
         _config = config;
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
     } //________________________________
 
     /**
@@ -89,10 +97,11 @@
         NotificationList.notifyAll(_notifyError, message);
     } //________________________________
 
-    public String messageAsString(Message message) {
+    @Deprecated
+    public String messageAsString(Message message) throws MessageDeliverException {
         byte[] ba = null;
         return (null == message) ? "<null message>"
-                : (null == (ba = (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION))) ? "<null body content>"
+                : (null == (ba = (byte[]) payloadProxy.getPayload(message))) ? "<null body content>"
                 : new String(ba);
     } //________________________________
 

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/StoreMessageToFile.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/StoreMessageToFile.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/StoreMessageToFile.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -30,8 +30,10 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.message.ActionProcessingPipeline;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 
 /**
  * Simple action that checks to see if the message should be stored into a file.
@@ -82,6 +84,8 @@
      */
     public static final String MESSAGE_CONTENT_FILENAME_END = "[/jbesb-filename]" ;
 
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Create the action with the specified configuration.
      * 
@@ -90,7 +94,13 @@
     public StoreMessageToFile(final ConfigTree config)
     {
         filename = config.getAttribute(FILENAME) ;
-        location = config.getAttribute(LOCATION) ;
+        String location = config.getAttribute(LOCATION) ;
+        if(location != null) {
+            config.setAttribute(MessagePayloadProxy.GET_PAYLOAD_LOCATION, location);
+        }
+        payloadProxy = new MessagePayloadProxy(config);
+        payloadProxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.LOG);
+
         raw = Boolean.parseBoolean(config.getAttribute(RAW, "false")) ;
     }
 
@@ -103,23 +113,16 @@
     public Message process(final Message message)
         throws ActionProcessingException
     {
-        final Body body = message.getBody() ;
-        final Object contents ;
-        if (location == null)
-        {
-            contents = body.get() ;
+        final Object contents;
+
+        try {
+            contents = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
         }
-        else
+
+        if (contents != null)
         {
-            contents = body.get(location) ;
-        }
-        
-        if (contents == null)
-        {
-            LOG.debug("Message contents null") ;
-        }
-        else
-        {
             final String messageVal ;
             if (contents instanceof byte[])
             {
@@ -250,10 +253,6 @@
      */
     private final String filename ;
     /**
-     * The location of the message.
-     */
-    private final String location ;
-    /**
      * True if we output the raw contents.
      */
     private final boolean raw ;

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/SystemPrintln.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/SystemPrintln.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/SystemPrintln.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -26,8 +26,10 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.util.Util;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * Simple action that prints out the message contents using System.println.
@@ -41,8 +43,7 @@
 	public static final String PRINT_STREAM = "outputstream";
     public static final String DEFAULT_PRE_MESSAGE = "Message structure";
     
-    private Logger log = Logger.getLogger(this.getClass());
-    private String primaryDataLocation;
+    private MessagePayloadProxy payloadProxy;
 
     /**
 	 * Public constructor.
@@ -55,14 +56,22 @@
 	 */
 	public SystemPrintln(ConfigTree config)
 	{
-		printlnMessage = config.getAttribute(PRE_MESSAGE,
-				DEFAULT_PRE_MESSAGE);
-		
+		printlnMessage = config.getAttribute(PRE_MESSAGE, DEFAULT_PRE_MESSAGE);
 		printFullMessage = (config.getAttribute(FULL_MESSAGE, "false").equalsIgnoreCase("true") ? true : false);
 		useOutputStream = (config.getAttribute(PRINT_STREAM, "true").equals("true") ? true : false);
-        primaryDataLocation = config.getAttribute("datalocation", ActionUtils.POST_ACTION_DATA);
-	}
 
+        String primaryDataLocation = config.getAttribute("datalocation");
+        if(primaryDataLocation != null) {
+            config.setAttribute(MessagePayloadProxy.GET_PAYLOAD_LOCATION, primaryDataLocation);
+            payloadProxy = new MessagePayloadProxy(config);
+        } else {
+            payloadProxy = new MessagePayloadProxy(config,
+                                                   new String[] {BytesBody.BYTES_LOCATION},
+                                                   new String[] {BytesBody.BYTES_LOCATION});
+        }
+        payloadProxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.LOG);
+    }
+
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -70,11 +79,13 @@
 	 */
 	public Message process(Message message) throws ActionProcessingException
 	{
-		Object messageObject = message.getBody().get(primaryDataLocation);
-		
-		if (messageObject == null)
-		    messageObject = message.getBody().get(BytesBody.BYTES_LOCATION);
-		
+        Object messageObject = null;
+        try {
+            messageObject = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
 		PrintStream stream = (useOutputStream ? System.out : System.err);
 		
 		stream.println(printlnMessage + ": ");
@@ -105,10 +116,21 @@
 				{
 					Message attachedMessage = (Message) message.getAttachment()
 							.itemAt(i);
-					stream.println("attachment " + i + ": ["
-							+ new String((byte[]) attachedMessage.getBody().get(BytesBody.BYTES_LOCATION))
-							+ "].");
-				}
+                    try {
+                        Object payload = payloadProxy.getPayload(attachedMessage);
+                        if(payload instanceof byte[]) {
+                            stream.println("attachment " + i + ": ["
+                                    + new String((byte[]) payload)
+                                    + "].");
+                        } else {
+                            stream.println("attachment " + i + ": ["
+                                    + payload
+                                    + "].");
+                        }
+                    } catch (MessageDeliverException e) {
+                        throw new ActionProcessingException(e);
+                    }
+                }
 			}
 		}
 		return message;

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/AbstractObjectXStream.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/AbstractObjectXStream.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/AbstractObjectXStream.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -31,7 +31,7 @@
      * @param properties Action Properties.
      * @throws ConfigurationException Action not properly configured.
      */
-    public AbstractObjectXStream(ConfigTree properties) {
+    protected AbstractObjectXStream(ConfigTree properties) {
     	this( properties.getName(), properties.attributesAsList());
     }
 	    

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ByteArrayToString.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ByteArrayToString.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ByteArrayToString.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -31,7 +31,9 @@
 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 org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * Byte Array to String processor.
@@ -48,24 +50,19 @@
 public class ByteArrayToString extends AbstractActionPipelineProcessor {
     
     private String encoding;
-    
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Public constructor.
-     * @param properties Action properties.
+     * @param config Action properties.
      */
-    public ByteArrayToString(ConfigTree properties) {
-    	this(properties.attributesAsList());
+    public ByteArrayToString(ConfigTree config) {
+        encoding = config.getAttribute("encoding", "UTF-8");
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
     }
-    
-    /**
-     * Public constructor.
-     * @param actionName Processing action name.
-     * @param properties Action properties.
-     */    
-    public ByteArrayToString(List<KeyValuePair> properties) {
-        encoding = KeyValuePair.getValue("encoding", properties, "UTF-8");
-    }
-    
+
     /* (non-Javadoc)
      * @see org.jboss.soa.esb.actions.ActionProcessor#process(java.lang.Object)
      */
@@ -73,28 +70,20 @@
         byte[] bytes;
         
         try {
-            /*
-             * First check normal payload location.
-             */
-            
-            bytes = (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION);
-            
-            /*
-             * Now check action-chaining location. Some Actions may want to maintain
-             * the original data as well as the new.
-             */
-            
-            if (bytes == null)
-        	bytes = (byte[]) message.getBody().get(ActionUtils.POST_ACTION_DATA);
+            bytes = (byte[]) payloadProxy.getPayload(message);
         } catch(ClassCastException e) {
             throw new ActionProcessingException("Message must be an array of bytes. Is " + message.getClass().getName());
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
         }
-        
+
         try {
-            message.getBody().add(ActionUtils.POST_ACTION_DATA, new String(bytes, encoding));
+            payloadProxy.setPayload(message, new String(bytes, encoding));
         	return message;
         } catch (UnsupportedEncodingException e) {
             throw new ActionProcessingException("Unable to decode byte[] to String. Unsupported character encoding configuration: " + encoding, e);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
         }
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectInvoke.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectInvoke.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectInvoke.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -24,16 +24,16 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.List;
 
 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 org.jboss.soa.esb.util.ClassUtil;
 
@@ -71,33 +71,23 @@
     
     // action related variables
     private String name;
-    
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Public constructor.
-     * @param properties Action Properties.
+     * @param configTree Action Properties.
      * @throws ConfigurationException Action not properly configured.
      */
-    public ObjectInvoke(ConfigTree properties) {
-    	this(properties.getName(), properties.attributesAsList());
-    	
-    }
-    
-    
-    
-    
-    /**
-     * Public constructor.
-     * @param actionName Action name.
-     * @param properties Action Properties.
-     * @throws ConfigurationException Action not properly configured.
-     */
-    public ObjectInvoke(String actionName, List<KeyValuePair> properties) {
-    	
-    	name = actionName;
-        classProcessor = KeyValuePair.getValue("class-processor", properties);
-        classMethod = KeyValuePair.getValue("class-method", properties);
+    public ObjectInvoke(ConfigTree configTree) {
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
+
+    	name = configTree.getName();
+        classProcessor = configTree.getAttribute("class-processor");
+        classMethod = configTree.getAttribute("class-method");
         if((classMethod == null) || (classMethod.length() == 0) ) {
-        	classMethod = actionName;
+        	classMethod = name;
         }
         
         if(classProcessor == null) {
@@ -120,12 +110,15 @@
 	 *  
 	 */
 	public Message process(Message message) throws ActionProcessingException {
-		Object object = message.getBody().get(BytesBody.BYTES_LOCATION);
-		
-		if (object == null)
-		    object = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-		
-		Object processor = getObjectToInvoke();
+        Object object = null;
+
+        try {
+            object = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
+        Object processor = getObjectToInvoke();
 		Method m = this.setUpMethod(processor);
 		
 		Object result;
@@ -141,9 +134,14 @@
 			throw new ActionProcessingException("Invocation problem with class-processor [ " + this.classProcessor + "] for Action Processor: " + name, e );
 			
 		}
-		
-		message.getBody().add(ActionUtils.POST_ACTION_DATA, result);
-		return message;
+
+        try {
+            payloadProxy.setPayload(message, result);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+        
+        return message;
 	}
 
 	

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToCSVString.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToCSVString.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToCSVString.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,12 +28,14 @@
 
 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;
 
 /**
@@ -61,7 +63,8 @@
     private static Logger logger = Logger.getLogger(ObjectToCSVString.class);
     private List<String> propertyMethodNames = new ArrayList<String>();
 	private boolean failOnMissingProperty;
-    
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Public constructor.
      * @param properties Action Properties.
@@ -69,6 +72,9 @@
      */
     public ObjectToCSVString(ConfigTree properties) throws ConfigurationException {
     	this("ObjectToCSVString", properties.attributesAsList());
+        payloadProxy = new MessagePayloadProxy(properties,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
     }
     
     /**
@@ -77,7 +83,7 @@
      * @param properties Action Properties.
      * @throws ConfigurationException Action not properly configured.
      */
-    public ObjectToCSVString(String actionName, List<KeyValuePair> properties) throws ConfigurationException {
+    private ObjectToCSVString(String actionName, List<KeyValuePair> properties) throws ConfigurationException {
         String objectProps = KeyValuePair.getValue(BEAN_PROPERTIES_PROP, properties);
         
         if(objectProps == null || objectProps.trim().equals("")) {
@@ -112,12 +118,14 @@
      * @see org.jboss.soa.esb.actions.ActionProcessor#process(java.lang.Object)
      */
     public Message process(Message message) throws ActionProcessingException {
-    	
-	Object oCurr = message.getBody().get(BytesBody.BYTES_LOCATION);
-	
-	if (oCurr == null)
-	    oCurr = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-	
+
+        Object oCurr = null;
+        try {
+            oCurr = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
     	Class oCurrClass = (null==oCurr) ? null : oCurr.getClass(); 
         StringBuffer csv = new StringBuffer();
         boolean hasAppendStarted = false; // Have we appended a value yet?
@@ -152,9 +160,13 @@
                 logger.error("Exception calling bean method: " + methodName, e);
             }
         }
-        
-        message.getBody().add(ActionUtils.POST_ACTION_DATA, csv.toString());
 
+        try {
+            payloadProxy.setPayload(message, csv.toString());
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
         return message;
     }
 }

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-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/ObjectToXStream.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -25,12 +25,14 @@
 import java.util.List;
 
 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;
@@ -58,37 +60,33 @@
     
     private String classAlias;
     private boolean excludePackage;
-    
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Public constructor.
-     * @param properties Action Properties.
+     * @param configTree Action Properties.
      * @throws ConfigurationException Action not properly configured.
      */
-    public ObjectToXStream(ConfigTree properties) {
-    	this("ObjectToXStream", properties.attributesAsList());
+    public ObjectToXStream(ConfigTree configTree) {
+        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");
     }
-    
-    /**
-     * Public constructor.
-     * @param actionName Action name.
-     * @param properties Action Properties.
-     * @throws ConfigurationException Action not properly configured.
-     */
-    public ObjectToXStream(String actionName, List<KeyValuePair> properties) {
-        classAlias = KeyValuePair.getValue("class-alias", properties);
-        excludePackage = KeyValuePair.getBooleanValue("exclude-package", properties, true);
-    }
 
     /* (non-Javadoc)
      * @see org.jboss.soa.esb.actions.ActionProcessor#process(java.lang.Object)
      */
     public Message process(Message message) throws ActionProcessingException {
-    	
-	Object object = message.getBody().get(BytesBody.BYTES_LOCATION);
-	
-	if (object == null)
-	    object = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-	
+
+        Object object;
+        try {
+            object = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
         XStream xstream = new XStream();
         
         if(classAlias == null) {
@@ -101,8 +99,12 @@
             xstream.alias(classAlias, object.getClass());
         }
         
-        message.getBody().add(ActionUtils.POST_ACTION_DATA, xstream.toXML(object));
- 
+        try {
+            payloadProxy.setPayload(message, xstream.toXML(object));
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
         return message;
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/XStreamToObject.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/XStreamToObject.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/converters/XStreamToObject.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -11,11 +11,13 @@
 
 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.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 org.jboss.soa.esb.util.ClassUtil;
 import org.jboss.soa.esb.util.XPathUtil;
@@ -68,7 +70,8 @@
     
     // action related variables
 	private Map<String,String> aliases;
-   
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Public constructor.
      * @param properties Action Properties.
@@ -77,6 +80,9 @@
     public XStreamToObject(ConfigTree properties) {
     	this(properties.getName(), properties.attributesAsList());
     	aliases = getAliases( properties );
+        payloadProxy = new MessagePayloadProxy(properties,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
     }
     
     /**
@@ -85,7 +91,7 @@
      * @param properties Action Properties.
      * @throws ConfigurationException Action not properly configured.
      */
-    public XStreamToObject(String actionName, List<KeyValuePair> properties) {
+    protected XStreamToObject(String actionName, List<KeyValuePair> properties) {
     	super(actionName,properties);
     	String incomingTypeStr = KeyValuePair.getValue("incoming-type", properties);
     	try {
@@ -100,25 +106,30 @@
 	 *  
 	 */
 	public Message process(Message message) throws ActionProcessingException {
-	    Object object = message.getBody().get(BytesBody.BYTES_LOCATION);
-	    
-	    if (object == null)
-		object = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-		
-		try {
+        Object object;
+
+        try {
+            object = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
+        try {
 			Object toObject = incomingType.newInstance();
 			toObject = fromXmlToObject( object.toString(), toObject );
 			
-			message.getBody().add(ActionUtils.POST_ACTION_DATA, toObject);
+			payloadProxy.setPayload(message, toObject);
 		} catch (InstantiationException e) {
 			logger.error( e );
 			throw new ActionProcessingException("Could not invoke for Arg: " + getName(),e );
 		} catch (IllegalAccessException e) {
 			logger.error( e );
 			throw new ActionProcessingException("Could not access for Arg: " + getName(),e );
-		} 
-		
-		return message;
+		} catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
+        return message;
 	}
 	
 	/**

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/AbstractRouter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/AbstractRouter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/AbstractRouter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -21,17 +21,17 @@
 
 package org.jboss.soa.esb.actions.routing;
 
-import java.util.List;
-
 import javax.jms.JMSException;
 import javax.naming.NamingException;
 
 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.KeyValuePair;
+import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 
 /**
@@ -48,17 +48,20 @@
 	 * Unwrap the message payload before routing. 
 	 */
 	public boolean unwrap = false;
-	
+    private MessagePayloadProxy payloadProxy;
+
     /**
      * Public constructor.
-     * @param actionName Action name.
-     * @param properties Action properties.
+     * @param config Action config.
      * @throws ConfigurationException Queue name not configured.
      * @throws JMSException Unable to configure JMS destination.
      * @throws NamingException Unable to configure JMS destination.
      */
-    public AbstractRouter(String actionName, List<KeyValuePair> properties) throws ConfigurationException {
-    	unwrap = KeyValuePair.getBooleanValue("unwrap", properties, false); 
+    public AbstractRouter(ConfigTree config) throws ConfigurationException {
+    	unwrap = config.getAttribute("unwrap", "false").equals("true");
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
     }
 
     /* (non-Javadoc)
@@ -66,19 +69,26 @@
      */
     public Message process(Message message) throws ActionProcessingException {
     	if(unwrap) {
-    	    Object content = message.getBody().get(BytesBody.BYTES_LOCATION);
-    	    
-    	    if (content == null)
-    		content = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-    	    
-    	    route(content);
+            Object content;
+            
+            try {
+                content = payloadProxy.getPayload(message);
+            } catch (MessageDeliverException e) {
+                throw new ActionProcessingException(e);
+            }
+
+            route(content);
     	} else {
     		route(message);
     	}
     	
     	return null;
     }
-    
+
+    public MessagePayloadProxy getPayloadProxy() {
+        return payloadProxy;
+    }
+
     /**
      * Route the message or message payload.
      * <p/>

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/EchoRouter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/EchoRouter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/EchoRouter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,6 +28,8 @@
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * Echo Action Processor. 
@@ -44,8 +46,12 @@
 
 	/* The logger for this class */
 	private static Logger logger = Logger.getLogger(EchoRouter.class);
-	
-	public EchoRouter (ConfigTree configTree){		
+    private MessagePayloadProxy payloadProxy;
+
+    public EchoRouter (ConfigTree configTree){
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
 	}
 
 	/*
@@ -58,12 +64,15 @@
 			throws ActionProcessingException {
 	    
 		if (logger.isInfoEnabled()) {
-		    Object content = message.getBody().get(BytesBody.BYTES_LOCATION);
-		    
-		    if (content == null)
-			content = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-		    
-			logger.info("EchoRouter currently routing message " + message + " with payload <<" + content + ">>");
+            Object content;
+            
+            try {
+                content = payloadProxy.getPayload(message);
+            } catch (MessageDeliverException e) {
+                throw new ActionProcessingException(e);
+            }
+
+            logger.info("EchoRouter currently routing message " + message + " with payload <<" + content + ">>");
 		}
 
 		return message;

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/HttpRouter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/HttpRouter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/HttpRouter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -30,7 +30,9 @@
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 
 /**
  * HttpRouter Action Processor. This ActionProcessor will forward the message to an url for further processing.
@@ -59,8 +61,9 @@
 	 * configuration
 	 */
 	private static final String DEFAULT_URL_TO_ROUTE_TO = "http://localhost:5400";
+    private MessagePayloadProxy payloadProxy;
 
-	/**
+    /**
 	 * Constructing a HttpRouter instance
 	 * 
 	 * @param configTree
@@ -70,6 +73,9 @@
                 urlToRouteTo = obtainAttribute(configTree,
                     ListenerTagNames.HTTP_ROUTER_ROUTE_URL,
                     DEFAULT_URL_TO_ROUTE_TO);
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
 	}
 
 	/*
@@ -81,12 +87,15 @@
 			org.jboss.soa.esb.message.Message message)
 			throws ActionProcessingException {
 
-		Object oCurr = message.getBody().get(BytesBody.BYTES_LOCATION);
-		
-		if (oCurr == null)
-		    oCurr = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-		
-		if (logger.isInfoEnabled()) {
+        Object oCurr;
+
+        try {
+            oCurr = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
+        if (logger.isInfoEnabled()) {
 			logger
 					.info("HttpRouter currently routing message " + message
 							+ " with payload <<" + oCurr + ">> to "
@@ -118,7 +127,7 @@
 	/**
 	 * Method obtaining an attribute from the configuration tree
 	 * 
-	 * @param tree
+	 * @param configTree
 	 *            the configuration to use
 	 * @param p_sAtt
 	 *            the name of the attribute to get

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/JMSRouter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/JMSRouter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/JMSRouter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -54,6 +54,7 @@
 import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.helpers.NamingContext;
 import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.notification.jms.DefaultJMSPropertiesSetter;
 import org.jboss.soa.esb.notification.jms.JMSPropertiesSetter;
 import org.jboss.soa.esb.util.Util;
@@ -105,7 +106,7 @@
     /**
      * Routing properties.
      */
-    private List<KeyValuePair> properties;
+    private ConfigTree properties;
     /**
      * The JMS Queue name from the configuration
      */
@@ -141,36 +142,24 @@
      * @throws NamingException Unable to configure JMS destination.
      */
     public JMSRouter(ConfigTree propertiesTree) throws ConfigurationException, NamingException, JMSException {
-    	this("JMSRouter", propertiesTree.attributesAsList());
-    }
+        super(propertiesTree);
 
-    /**
-     * Public constructor.
-     * @param actionName Action name.
-     * @param properties Action properties.
-     * @throws ConfigurationException Queue name not configured.
-     * @throws JMSException Unable to configure JMS destination.
-     * @throws NamingException Unable to configure JMS destination.
-     */
-    public JMSRouter(String actionName, List<KeyValuePair> properties) throws ConfigurationException {
-    	super(actionName, properties);
-    	
-        this.properties = properties;
+        this.properties = propertiesTree; 
         logger.debug(properties);
         
-        queueName = KeyValuePair.getValue("jndiName", properties);
+        queueName = properties.getAttribute("jndiName");
         if(queueName == null) {
             throw new ConfigurationException("JMSRouter must specify a 'jndiName' property.");
         }
         
-        boolean persistent = Boolean.parseBoolean( KeyValuePair.getValue( PERSISTENT_ATTR, properties, "true") );
+        boolean persistent = Boolean.parseBoolean( properties.getAttribute(PERSISTENT_ATTR, "true") );
         deliveryMode = persistent ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT;
         
-        String priorityStr = KeyValuePair.getValue( PRIORITY_ATTR, properties );
+        String priorityStr = properties.getAttribute(PRIORITY_ATTR);
         if ( priorityStr != null )
 	        priority = Integer.parseInt( priorityStr );
         
-        final String ttlStr = KeyValuePair.getValue( TIME_TO_LIVE_ATTR, properties );
+        final String ttlStr = properties.getAttribute(TIME_TO_LIVE_ATTR);
         if ( ttlStr != null )
 	        timeToLive = Long.parseLong( ttlStr );
         
@@ -204,11 +193,7 @@
         	Message jmsMessage = null;
         	
         	if ( unwrap ) {
-				Object objectFromBody = esbMessage.getBody().get(BytesBody.BYTES_LOCATION);
-				
-				if (objectFromBody == null)
-				    objectFromBody = esbMessage.getBody().get(ActionUtils.POST_ACTION_DATA);
-				    
+				Object objectFromBody = getPayloadProxy().getPayload(esbMessage);
 				jmsMessage = createJMSMessageWithObjectType( objectFromBody );
             } 
         	else  {
@@ -291,7 +276,7 @@
     private void setStringProperties(Message msg) throws JMSException {
         String messagePropPrefix = "message-prop-";
 
-        for(KeyValuePair property : properties) {
+        for(KeyValuePair property : properties.attributesAsList()) {
             String key = property.getKey();
             
             if(key.startsWith(messagePropPrefix) && key.length() > messagePropPrefix.length()) {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessor.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -29,12 +29,14 @@
 import org.apache.log4j.Logger;
 import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.actions.ActionLifecycleException;
 import org.jboss.soa.esb.actions.ActionPipelineProcessor;
 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.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.util.ClassUtil;
 
@@ -62,9 +64,13 @@
     protected ConfigTree configTree;
     protected GroovyScriptEngine scriptEngine;
     private String script;
+    private MessagePayloadProxy payloadProxy;
 
     public GroovyActionProcessor(ConfigTree config) throws ConfigurationException {
         this.configTree = config;
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
     }
 
     public void initialise() throws ActionLifecycleException {
@@ -129,6 +135,7 @@
             //
             binding.setVariable("message", message);
             binding.setVariable("config", configTree);
+            binding.setVariable("payloadProxy", payloadProxy);
 
             GroovyShell shell = new GroovyShell(Thread.currentThread().getContextClassLoader(), binding);
             Object returnVal = shell.evaluate(getScript(message));
@@ -150,11 +157,14 @@
             return script;
         } else {
             // So, the script is being passed in in the message... 
-            Object messageScript = message.getBody().get(BytesBody.BYTES_LOCATION);
-            
-            if (messageScript == null)
-        	messageScript = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-            
+            Object messageScript;
+
+            try {
+                messageScript = payloadProxy.getPayload(message);
+            } catch (MessageDeliverException e) {
+                throw new ActionProcessingException(e);
+            }
+
             if(messageScript instanceof String) {
                 return (String)messageScript;
             } else if(messageScript instanceof byte[]) {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessor.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessor.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessor.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -6,8 +6,12 @@
 import org.antlr.stringtemplate.StringTemplateGroup;
 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.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * <a href="http://www.stringtemplate.org">StringTemplate</a> Processor.
@@ -19,6 +23,7 @@
 public class StringTemplateProcessor extends AbstractActionPipelineProcessor {
 
     private StringTemplate template;
+    private MessagePayloadProxy payloadProxy;
 
     public StringTemplateProcessor(ConfigTree config) {
         String path = config.getAttribute("template");
@@ -34,16 +39,28 @@
         StringTemplateGroup templateGroup = new StringTemplateGroup(path);
         templateGroup.setFileCharEncoding(encoding);
         template = templateGroup.getInstanceOf(path);
+        payloadProxy = new MessagePayloadProxy(config);
+        payloadProxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.LOG);
     }
 
     public Message process(final Message message) throws ActionProcessingException {
         // First thing we do is clone the template for this message...
         StringTemplate thisTransTemplate = template.getInstanceOf();
-        Map beans = (Map) message.getBody().get();
+        Map beans;
+        
+        try {
+            beans = (Map) payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
 
         // Set the document data beans on the template and apply it...
         thisTransTemplate.setAttributes(beans);
-        message.getBody().add(thisTransTemplate.toString());
+        try {
+            payloadProxy.setPayload(message, thisTransTemplate.toString());
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
 
         return message;
     }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateGatewayListener.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateGatewayListener.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -52,7 +52,7 @@
 	protected Object _composer;
 	protected Class _composerClass;
 	protected String _composerName;
-	protected String m_targetServiceCategory, m_targetServiceName;	
+	protected String m_targetServiceCategory, m_targetServiceName;
 	
 	protected Collection<EPR> m_targetEprs;
 	

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -260,7 +260,7 @@
             } else {
 				m_composerName = PackageHibernateMessageContents.class.getName();
 				m_composerClass = PackageHibernateMessageContents.class;
-				m_composer = new PackageHibernateMessageContents();
+				m_composer = new PackageHibernateMessageContents(PackageHibernateMessageContents.createPayloadProxy(m_config));
 				sProcessMethod = "process";
 				m_logger.debug("No <" + ListenerTagNames.ACTION_ELEMENT_TAG + "> element found in configuration" + " -  Using default composer class : " + m_composerName);
 			}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -49,6 +49,10 @@
 import org.jboss.soa.esb.listeners.message.UncomposedMessageDeliveryAdapter;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.Properties;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.MessagePayloadProxy.NullPayloadHandling;
+import org.jboss.soa.esb.message.Body;
+import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.services.registry.RegistryFactory;
 import org.jboss.internal.soa.esb.remoting.HttpUnmarshaller;
@@ -429,16 +433,26 @@
      */
     public static class JBossRemotingMessageComposer<T extends InvocationRequest> extends AbstractMessageComposer<T> {
 
+        private MessagePayloadProxy payloadProxy;
+        
         public void setConfiguration(ConfigTree config) {
+            super.setConfiguration(config);
+            payloadProxy = new MessagePayloadProxy(config,
+                    new String[] {ActionUtils.POST_ACTION_DATA, Body.DEFAULT_LOCATION, BytesBody.BYTES_LOCATION},
+                    new String[] {ActionUtils.POST_ACTION_DATA});
+            // Allow null to be set on as the message payload...
+            payloadProxy.setNullSetPayloadHandling(NullPayloadHandling.LOG);
         }
 
+        protected MessagePayloadProxy getPayloadProxy() {
+            return payloadProxy;
+        }
+
         @SuppressWarnings("unchecked")
         protected void populateMessage(Message message, T invocationRequest) throws MessageDeliverException {
 
-            Object payload = invocationRequest.getParameter();
-            if(payload != null) {
-                message.getBody().add(ActionUtils.POST_ACTION_DATA, payload);
-            }
+            // Set the payload from the JBR invocation...
+            payloadProxy.setPayload(message, invocationRequest.getParameter());
 
             // Copy the request properties onto the message...
             Map properties = invocationRequest.getRequestPayload();

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -40,6 +40,7 @@
 import org.jboss.internal.soa.esb.rosetta.pooling.JmsConnectionPool;
 import org.jboss.internal.soa.esb.rosetta.pooling.JmsConnectionPoolContainer;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.eprs.JMSEpr;
 import org.jboss.soa.esb.common.Environment;
@@ -57,6 +58,9 @@
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleThreadState;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.Body;
+import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.services.registry.ServiceNotFoundException;
 import org.jboss.soa.esb.util.ClassUtil;
@@ -66,7 +70,7 @@
      * serial version uid for this class
      */
     private static final long serialVersionUID = 5070422864110923930L;
-   
+
     public JmsGatewayListener(ConfigTree listenerConfig)
             throws ConfigurationException {
         super(listenerConfig);
@@ -295,7 +299,7 @@
             } else {
                 _composerName = PackageJmsMessageContents.class.getName();
                 _composerClass = PackageJmsMessageContents.class;
-                _composer = new PackageJmsMessageContents();
+                _composer = new PackageJmsMessageContents(PackageJmsMessageContents.createPayloadProxy(_config));
                 sProcessMethod = "process";
                 _logger
                         .debug("No <" + ListenerTagNames.ACTION_ELEMENT_TAG

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/LocalFileMessageComposer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/LocalFileMessageComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/LocalFileMessageComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -20,9 +20,12 @@
 package org.jboss.soa.esb.listeners.gateway;
 
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.util.FileUtil;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.message.MessageComposer;
@@ -45,7 +48,12 @@
     public static final String PROP_FILE_LENGTH = "in-file-length";
     public static final String PROP_FILE_LASTMOD = "in-file-lastmod";
 
+    private MessagePayloadProxy payloadProxy;
+
     public void setConfiguration(ConfigTree config) throws ConfigurationException {
+        payloadProxy = new MessagePayloadProxy(config,
+                new String[] {BytesBody.BYTES_LOCATION},
+                new String[] {BytesBody.BYTES_LOCATION});
     }
 
     public Message compose(T inputFile) throws MessageDeliverException {
@@ -57,12 +65,12 @@
 
         Message message = MessageFactory.getInstance().getMessage();
         try {
-            message.getBody().add(BytesBody.BYTES_LOCATION, FileUtil.readFile(inputFile));
+            payloadProxy.setPayload(message, FileUtil.readFile(inputFile));
         } catch (IOException e) {
             throw new MessageDeliverException("Error reading input file '" + inputFile.getAbsolutePath() + "'.", e);
         }
 
-        // Add some metadate about the file....
+        // Add some metadata about the file....
         message.getProperties().setProperty(PROP_FILE_OBJ, inputFile);
         message.getProperties().setProperty(PROP_FILE_PATH, inputFile.getAbsolutePath());
         message.getProperties().setProperty(PROP_FILE_LENGTH, inputFile.length());
@@ -72,12 +80,6 @@
     }
 
     public Object decompose(Message message, T inputFile) throws MessageDeliverException {
-        byte[] payload = (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION);
-
-        if(payload == null) {
-            throw new MessageDeliverException("No byte[] payload returned by 'Message.getBody().get()'.");
-        }
-
-        return payload;
+        return payloadProxy.getPayload(message);
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageHibernateMessageContents.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageHibernateMessageContents.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageHibernateMessageContents.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -24,8 +24,11 @@
 import java.io.Serializable;
 
 import org.jboss.soa.esb.listeners.ListenerTagNames;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.helpers.ConfigTree;
 
 /**
 * Default packaging for Hibernate Entity messages. <p/>It will just drop the
@@ -36,15 +39,31 @@
 *
 */
 public class PackageHibernateMessageContents {
-	public Message process (Object obj) {
+
+    private MessagePayloadProxy payloadProxy;
+
+    public PackageHibernateMessageContents() {
+        this.payloadProxy = createPayloadProxy(new ConfigTree("default-config"));
+    }
+
+    public PackageHibernateMessageContents(MessagePayloadProxy payloadProxy) {
+        this.payloadProxy = payloadProxy;
+    }
+
+    public Message process (Object obj) throws MessageDeliverException {
 		if (!(obj instanceof Serializable))
 			throw new IllegalArgumentException("Object must be serializable");
 
 		Message message = MessageFactory.getInstance().getMessage();
-		
-		message.getBody().add(ListenerTagNames.HIBERNATE_OBJECT_DATA_TAG, obj);
 
+		payloadProxy.setPayload(message, obj);
+
 		return message;
 	}
 
+    public static MessagePayloadProxy createPayloadProxy(ConfigTree config) {
+        return  new MessagePayloadProxy(config,
+                new String[] {ListenerTagNames.HIBERNATE_OBJECT_DATA_TAG},
+                new String[] {ListenerTagNames.HIBERNATE_OBJECT_DATA_TAG});
+    }
 }
\ No newline at end of file

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContents.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContents.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContents.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -29,8 +29,12 @@
 import javax.jms.TextMessage;
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.helpers.ConfigTree;
 
 /**
 * Default gateway action for plain jms messages <p/>
@@ -49,8 +53,13 @@
 	 * by the process method.
 	 */
 	private ESBPropertiesSetter esbPropertiesStrategy = new DefaultESBPropertiesSetter();
-	
-	/**
+    private MessagePayloadProxy payloadProxy;
+
+    public PackageJmsMessageContents(MessagePayloadProxy payloadProxy) {
+        this.payloadProxy = payloadProxy;
+    }
+
+    /**
 	 * Will just drop the jms message contents into a esb Message
 	 * 
 	 * @param obj An instance of Message	
@@ -60,8 +69,7 @@
 	 * @throws IOException
 	 * @see #setESBMessageBody(javax.jms.Message, Message)
 	 */
-	public Message process (final Object obj) throws JMSException, IOException
-	{
+	public Message process (final Object obj) throws JMSException, IOException, MessageDeliverException {
 		if ( !(obj instanceof javax.jms.Message))
 			throw new IllegalArgumentException("Object must be instance of javax.jms.Message");
 		
@@ -70,12 +78,17 @@
 		final Message esbMessage = MessageFactory.getInstance().getMessage();
 		
 		setESBMessageBody( jmsMessage, esbMessage );
+
+        try {
+            if ( payloadProxy.getPayload(esbMessage) == null ) {
+                return null;
+            }
+        } catch (MessageDeliverException e) {
+            return null;
+        }
+
+        setPropertiesFromJMSMessage ( jmsMessage, esbMessage );
 		
-		if ( esbMessage.getBody().get(BytesBody.BYTES_LOCATION) == null )
-			return null;
-		
-		setPropertiesFromJMSMessage ( jmsMessage, esbMessage );
-		
 		return esbMessage;
 	}
 	
@@ -116,15 +129,13 @@
 	 * @throws JMSException 
 	 * @throws IOException 
 	 */
-	private void setESBMessageBody( final javax.jms.Message fromJMSMessage, final Message toESBMessage ) throws JMSException, IOException
-	{
+	private void setESBMessageBody( final javax.jms.Message fromJMSMessage, final Message toESBMessage ) throws JMSException, IOException, MessageDeliverException {
 		byte[] bodyAsBytes = null;
 		
 		if (fromJMSMessage instanceof TextMessage)
 		{
 			final String text = ((TextMessage) fromJMSMessage).getText();
-			toESBMessage.getBody().add( text );
-			bodyAsBytes = text.getBytes();
+			payloadProxy.setPayload(toESBMessage, text);
 		}
 		else if (fromJMSMessage instanceof BytesMessage)
 		{
@@ -138,27 +149,22 @@
 					out.close();
 			}
 			bodyAsBytes = out.toByteArray();
+            payloadProxy.setPayload(toESBMessage, bodyAsBytes);
 		}
 		else if (fromJMSMessage instanceof ObjectMessage)
 		{
 			final Object object = ((ObjectMessage) fromJMSMessage).getObject();
-			toESBMessage.getBody().add( object );
-			
-			bodyAsBytes =  object.toString() .getBytes();
+            payloadProxy.setPayload(toESBMessage, object);
 		}
 		else
-			log.warn("Message type " + fromJMSMessage.getClass().getSimpleName() + " not supported - Message is ignored");
-		
-		// Always set the byte array content on the body object to be backward compatible
-		// TODO: Should be removed at some point. 
-		// TODO: When removed, remember that the BytesMessage contents then need to be placed somewhere else ;-)!
-		
-		setByteArrayOnBody( toESBMessage, bodyAsBytes );
+        {
+            log.warn("Message type " + fromJMSMessage.getClass().getSimpleName() + " not supported - Message is ignored");
+        }
 	}
-	
-	@Deprecated
-	private void setByteArrayOnBody( final Message esbMessage, final byte[] bytes )
-	{
-		esbMessage.getBody().add(BytesBody.BYTES_LOCATION, bytes );
-	}
-} // ____________________________________________________
+
+    public static MessagePayloadProxy createPayloadProxy(ConfigTree config) {
+        return  new MessagePayloadProxy(config,
+                new String[] {BytesBody.BYTES_LOCATION},
+                new String[] {Body.DEFAULT_LOCATION, BytesBody.BYTES_LOCATION});
+    }
+}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/RemoteFileMessageComposer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/RemoteFileMessageComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/RemoteFileMessageComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,6 +28,7 @@
 import org.jboss.soa.esb.addressing.eprs.FTPEpr;
 import org.jboss.soa.esb.util.*;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.internal.soa.esb.assertion.AssertArgument;
@@ -47,6 +48,7 @@
  
     private FTPEpr ftpEpr;
     private File downloadDir;
+    private MessagePayloadProxy payloadProxy;
 
     public void setConfiguration(ConfigTree config) throws ConfigurationException {
         EPR epr = ListenerUtil.assembleEpr(config);
@@ -57,6 +59,9 @@
         ftpEpr = (FTPEpr) epr;
         // This may look a bit odd... The "file" input dir is our FTP download dir...
         downloadDir = AbstractFileGateway.getFileInputDirectory(config);
+        payloadProxy = new MessagePayloadProxy(config,
+                new String[] {BytesBody.BYTES_LOCATION},
+                new String[] {BytesBody.BYTES_LOCATION});
     }
 
     public Message compose(T inputFile) throws MessageDeliverException {
@@ -64,7 +69,7 @@
 
         Message message = MessageFactory.getInstance().getMessage();
         try {
-            message.getBody().add(BytesBody.BYTES_LOCATION, getFileContents(inputFile));
+            payloadProxy.setPayload(message, getFileContents(inputFile));
         } catch (IOException e) {
             throw new MessageDeliverException("Error reading remote input file '" + inputFile.getAbsolutePath() + "'.", e);
         } catch (RemoteFileSystemException e) {
@@ -75,13 +80,7 @@
     }
 
     public Object decompose(Message message, T inputMessage) throws MessageDeliverException {
-        byte[] payload = (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION);
-
-        if(payload == null) {
-            throw new MessageDeliverException("No byte[] payload returned by 'Message.getBody().get(BytesBody.BYTES_LOCATION)'.");
-        }
-
-        return payload;
+        return payloadProxy.getPayload(message);
     }
 
     private byte[] getFileContents(File file) throws IOException, RemoteFileSystemException {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -58,10 +58,14 @@
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.ListenerUtil;
 import org.jboss.soa.esb.listeners.RegistryUtil;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.listeners.lifecycle.AbstractThreadedManagedLifecycle;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleThreadState;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.Body;
+import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.services.registry.ServiceNotFoundException;
@@ -421,7 +425,7 @@
             } else {
                 _composerName = PackageRowContents.class.getName();
                 _composerClass = PackageRowContents.class;
-                _composer = new PackageRowContents();
+                _composer = new PackageRowContents(PackageRowContents.createPayloadProxy(_config));
                 sProcessMethod = "process";
                 _logger
                         .debug("No <" + ListenerTagNames.ACTION_ELEMENT_TAG
@@ -724,7 +728,13 @@
      * @since Version 4.0
      */
     public static class PackageRowContents {
-        public Message process(Object obj) {
+        private MessagePayloadProxy payloadProxy;
+
+        public PackageRowContents(MessagePayloadProxy payloadProxy) {
+            this.payloadProxy = payloadProxy;
+        }
+
+        public Message process(Object obj) throws MessageDeliverException {
             if (!(obj instanceof Serializable))
                 throw new IllegalArgumentException(
                         "Object must be instance of Map");
@@ -733,10 +743,18 @@
             org.jboss.soa.esb.message.Properties props = message
                     .getProperties();
 
-            props.setProperty(ListenerTagNames.SQL_ROW_DATA_TAG, obj);
+            if(MessagePayloadProxy.isUsingLegacyPatterns()) {
+                props.setProperty(ListenerTagNames.SQL_ROW_DATA_TAG, obj);
+            } else {
+                payloadProxy.setPayload(message, obj);
+            }
 
             return message;
         }
+
+        public static MessagePayloadProxy createPayloadProxy(ConfigTree config) {
+            return  new MessagePayloadProxy(config);
+        }
     } // ____________________________________________________
 
     protected final static Logger _logger = Logger

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -27,6 +27,7 @@
 import java.util.HashMap;
 
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.Configurable;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.ListenerUtil;
@@ -140,7 +141,7 @@
       Class type = null;
       for (Class intf : interfaces)
       {
-         if (intf.equals(InflowGateway.class)) continue;
+         if (intf.equals(InflowGateway.class) || intf.equals(Configurable.class)) continue;
          if (type != null)
          {
             throw new ConfigurationException("Unable to guess messagingType interface from endpointClass as the base class implements too many interfaces, specify this explicity");
@@ -160,6 +161,9 @@
          try
          {
             bean = (InflowGateway)beanClassConstructor.newInstance(getConfig());
+            if(bean instanceof Configurable) {
+                ((Configurable)bean).setConfiguration(getConfig());
+            }
          }
          catch (InstantiationException e)
          {
@@ -172,6 +176,8 @@
          catch (InvocationTargetException e)
          {
             throw new RuntimeException("Unable to create endpoint bean", e.getTargetException());
+         } catch (ConfigurationException e) {
+             throw new RuntimeException("Unable to create endpoint bean", e);
          }
       }
       catch (NoSuchMethodException e)
@@ -179,6 +185,9 @@
          try
          {
             bean = (InflowGateway)beanClass.newInstance();
+            if(bean instanceof Configurable) {
+                ((Configurable)bean).setConfiguration(getConfig());
+            }
          }
          catch (Exception e1)
          {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -26,6 +26,10 @@
 
 import org.jboss.soa.esb.listeners.gateway.PackageJmsMessageContents;
 import org.jboss.soa.esb.client.ServiceInvoker;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.Configurable;
+import org.jboss.soa.esb.ConfigurationException;
 
 /**
  * comment
@@ -33,18 +37,27 @@
  * @author <a href="bill at jboss.com">Bill Burke</a>
  * @version $Revision: 1.1 $
  */
-public class JmsEndpoint implements InflowGateway, MessageListener
-{
+public class JmsEndpoint implements InflowGateway, MessageListener, Configurable {
+    
    private org.jboss.soa.esb.client.ServiceInvoker service;
-   private PackageJmsMessageContents transformer = new PackageJmsMessageContents();
+   private PackageJmsMessageContents transformer;
 
-   public void setServiceInvoker(ServiceInvoker invoker)
+    public void setConfiguration(ConfigTree config) throws ConfigurationException {
+        MessagePayloadProxy proxy = PackageJmsMessageContents.createPayloadProxy(config);
+        transformer = new PackageJmsMessageContents(proxy);
+    }
+
+    public void setServiceInvoker(ServiceInvoker invoker)
    {
       this.service = invoker;
    }
 
-   public void onMessage(Message message)
+    public void onMessage(Message message)
    {
+      if(transformer == null) {
+          throw new IllegalStateException("Class not configured.  setConfiguration(ConfigTree) must be called before endpoint can listen for messages.");
+      }
+
       try
       {
          org.jboss.soa.esb.message.Message esbMessage = transformer.process(message);

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/AbstractMessageComposer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/AbstractMessageComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/AbstractMessageComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -21,8 +21,11 @@
 
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.helpers.ConfigTree;
 
 /**
  * An abstract {@link MessageComposer} implementation, containing a useful
@@ -35,7 +38,29 @@
  */
 public abstract class AbstractMessageComposer<T> implements MessageComposer<T> {
 
+    private ConfigTree configuration;
+    private MessagePayloadProxy payloadProxy;
+
     /**
+     * Set the composers configuration.
+     * @param config
+     */
+    public void setConfiguration(ConfigTree config) {
+        this.configuration = config;
+        payloadProxy = new MessagePayloadProxy(config,
+                new String[] {ActionUtils.POST_ACTION_DATA, Body.DEFAULT_LOCATION, BytesBody.BYTES_LOCATION},
+                new String[] {Body.DEFAULT_LOCATION});
+    }
+
+    /**
+     * Get the composer configuration.
+     * @return The composer configuration.
+     */
+    public ConfigTree getConfiguration() {
+        return configuration;
+    }
+
+    /**
      * Compose the message.
      * <p/>
      * Override to implement alternative {@link Message} construction strategy.
@@ -53,6 +78,10 @@
         return message;
     }
 
+    protected MessagePayloadProxy getPayloadProxy() {
+        return payloadProxy;
+    }
+
     /**
      * Decompose the message.
      * <p/>
@@ -68,22 +97,7 @@
      * @throws MessageDeliverException
      */
     public Object decompose(Message message, T originalInputMessagePayload) throws MessageDeliverException {
-        // Hopefully we can fix the Message object such that there's no need for this
-        // i.e. the message will have setContents(Object) and getContents() methods.
-
-        Object response = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-
-        if(response != null) {
-            return response;
-        } else {
-            Object content = message.getBody().get();
-            
-            if (content == null) {
-        	    content = message.getBody().get(BytesBody.BYTES_LOCATION);
-            }
-            
-            return content;
-        }
+        return getPayloadProxy().getPayload(message);
     }
 
     /**

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/BasicMessageComposer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/BasicMessageComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/BasicMessageComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -31,14 +31,8 @@
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
  */
 public class BasicMessageComposer<T> extends AbstractMessageComposer<T> {
-    public void setConfiguration(ConfigTree config) {
-    }
 
-    /**
-     * Add message payload to default location in the Message.
-     */
-    
     protected void populateMessage(Message message, T messagePayload) throws MessageDeliverException {
-	message.getBody().add(messagePayload);
+	    getPayloadProxy().setPayload(message, messagePayload);
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageAwareListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageAwareListener.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageAwareListener.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -22,12 +22,21 @@
 
 package org.jboss.soa.esb.listeners.message;
 
+import java.lang.reflect.Method;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.log4j.Logger;
 import org.jboss.internal.soa.esb.couriers.PickUpOnlyCourier;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.MalformedEPRException;
-import org.jboss.soa.esb.couriers.*;
+import org.jboss.soa.esb.couriers.CourierException;
+import org.jboss.soa.esb.couriers.CourierFactory;
+import org.jboss.soa.esb.couriers.CourierTimeoutException;
+import org.jboss.soa.esb.couriers.CourierUtil;
+import org.jboss.soa.esb.couriers.TwoWayCourier;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.ListenerUtil;
@@ -39,11 +48,6 @@
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.util.Util;
 
-import java.lang.reflect.Method;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
 /**
  * Esb Message aware transport independent listener. <p/> Relies on the
  * CourierFactory to obtain an appropriate Courier for the EPR this listener
@@ -55,308 +59,357 @@
  * @since Version 4.0
  */
 
-public class MessageAwareListener extends AbstractThreadedManagedLifecycle {
-    /**
-     * serial version uid for this class
-     */
-    private static final long serialVersionUID = -9198018611828254359L;
+public class MessageAwareListener  extends AbstractThreadedManagedLifecycle
+{
+        /**
+         * serial version uid for this class
+         */
+        private static final long serialVersionUID = -9198018611828254359L;
 
-    /**
-     * The minimum error delay.
-     */
-    private static final long MIN_ERROR_DELAY = 1000;
-    /**
-     * The maximum error delay.
-     */
-    private static final long MAX_ERROR_DELAY = (MIN_ERROR_DELAY << 5);
+        /**
+         * The minimum error delay.
+         */
+        private static final long MIN_ERROR_DELAY = 1000 ;
+        /**
+         * The maximum error delay.
+         */
+        private static final long MAX_ERROR_DELAY = (MIN_ERROR_DELAY << 5) ;
 
-    /**
-     * The action pipeline.
-     */
-    private ActionProcessingPipeline pipeline;
+        /**
+         * The action pipeline.
+         */
+        private ActionProcessingPipeline pipeline ;
 
-    /**
-     * The error delay.
-     */
-    private long errorDelay;
+        /**
+         * The error delay.
+         */
+        private long errorDelay ;
 
-    /**
-     * public constructor
-     *
-     * @param config ConfigTree - Containing 'static' configuration for this
-     *               instance
-     * @throws ConfigurationException
-     */
-    public MessageAwareListener(final ConfigTree config)
-            throws ConfigurationException {
-        super(config);
-        _config = config;
-        checkMyParms();
-    }
+        /**
+	 * public constructor
+	 *
+	 * @param config
+	 *            ConfigTree - Containing 'static' configuration for this
+	 *            instance
+	 * @throws ConfigurationException
+	 */
+	public MessageAwareListener(final ConfigTree config)
+			throws ConfigurationException
+	{
+            super(config);
+            _config = config ;
+            checkMyParms() ;
+	}
 
-    /**
-     * Check for mandatory and optional attributes in parameter tree
-     *
-     * @throws ConfigurationException -
-     *                                if mandatory atts are not right or actionClass not in
-     *                                classpath
-     */
-    protected void checkMyParms() throws ConfigurationException {
-        _eprCategoryName = _config.getAttribute(ListenerTagNames.SERVICE_CATEGORY_NAME_TAG);
-        _eprName = _config.getAttribute(ListenerTagNames.SERVICE_NAME_TAG);
+	/**
+	 * Check for mandatory and optional attributes in parameter tree
+	 *
+	 * @throws ConfigurationException -
+	 *             if mandatory atts are not right or actionClass not in
+	 *             classpath
+	 */
+	protected void checkMyParms () throws ConfigurationException
+	{
+                _eprCategoryName = _config.getAttribute(ListenerTagNames.SERVICE_CATEGORY_NAME_TAG);
+                _eprName = _config.getAttribute(ListenerTagNames.SERVICE_NAME_TAG);
 
-        final String maxThreadVal = _config.getAttribute(ListenerTagNames.MAX_THREADS_TAG);
+                final String maxThreadVal = _config.getAttribute(ListenerTagNames.MAX_THREADS_TAG) ;
 
-        if (!Util.isNullString(maxThreadVal)) {
-            try {
-                _maxThreads = Integer.parseInt(maxThreadVal);
-            }
-            catch (NumberFormatException nfe) {
-                _maxThreads = _defaultMaxThreads;
-                _logger.warn("Invalid " + ListenerTagNames.MAX_THREADS_TAG + " attribute, defaulting to <" + _maxThreads + ">");
-            }
-        }
+                if (!Util.isNullString(maxThreadVal))
+                {
+                    try
+                    {
+                        _maxThreads = Integer.parseInt(maxThreadVal) ;
+                    }
+                    catch (NumberFormatException nfe)
+                    {
+                        _maxThreads = _defaultMaxThreads ;
+                        _logger.warn("Invalid " + ListenerTagNames.MAX_THREADS_TAG + " attribute, defaulting to <" + _maxThreads + ">") ;
+                    }
+                }
 
-        if (Util.isNullString(_eprCategoryName))
-            throw new ConfigurationException(
-                    "Missing or invalid " + ListenerTagNames.SERVICE_CATEGORY_NAME_TAG);
-        if (Util.isNullString(_eprName))
-            throw new ConfigurationException(
-                    "Missing or invalid " + ListenerTagNames.SERVICE_NAME_TAG);
+		if (Util.isNullString(_eprCategoryName))
+			throw new ConfigurationException(
+					"Missing or invalid " + ListenerTagNames.SERVICE_CATEGORY_NAME_TAG);
+		if (Util.isNullString(_eprName))
+			throw new ConfigurationException(
+					"Missing or invalid " + ListenerTagNames.SERVICE_NAME_TAG);
 
-        ConfigTree eprElement = _config.getFirstChild(ListenerTagNames.EPR_TAG);
-        if (null == eprElement)
-            throw new ConfigurationException(
-                    "Missing or invalid " + ListenerTagNames.EPR_TAG + " element");
-        _epr = ListenerUtil.assembleEpr(eprElement);
+		ConfigTree eprElement = _config.getFirstChild(ListenerTagNames.EPR_TAG);
+		if (null == eprElement)
+			throw new ConfigurationException(
+					"Missing or invalid " + ListenerTagNames.EPR_TAG + " element");
+		_epr = ListenerUtil.assembleEpr(eprElement);
 
-        String latency = _config.getAttribute(ListenerTagNames.POLL_LATENCY_SECS_TAG);
-        long lSeconds = 10;
-        if (null != latency) {
-            try {
-                lSeconds = Integer.parseInt(latency);
+                String latency = _config.getAttribute(ListenerTagNames.POLL_LATENCY_SECS_TAG);
+                long lSeconds = 10;
+                if (null != latency)
+                {
+                    try
+                    {
+                        lSeconds = Integer.parseInt(latency);
+                    }
+                    catch (NumberFormatException e)
+                    {
+                        _logger.warn("Invalid number format <" + latency + "> using default value (" + lSeconds + ")");
+                    }
+                }
+                _latencySecs = lSeconds ;
+	}
+
+        /**
+         * Handle the initialisation of the managed instance.
+         *
+         * @throws ManagedLifecycleException for errors while initialisation.
+         */
+        protected void doInitialise()
+            throws ManagedLifecycleException
+        {
+            final ActionProcessingPipeline pipeline ;
+            try
+            {
+                pipeline = new ActionProcessingPipeline(_config) ;
+                pipeline.initialise() ;
             }
-            catch (NumberFormatException e) {
-                _logger.warn("Invalid number format <" + latency + "> using default value (" + lSeconds + ")");
+            catch (final ConfigurationException ce)
+            {
+                throw new ManagedLifecycleException("Error configuring action processing pipeline", ce) ;
             }
-        }
-        _latencySecs = lSeconds;
-    }
-
-    /**
-     * Handle the initialisation of the managed instance.
-     *
-     * @throws ManagedLifecycleException for errors while initialisation.
-     */
-    protected void doInitialise()
-            throws ManagedLifecycleException {
-        final ActionProcessingPipeline pipeline;
-        try {
-            pipeline = new ActionProcessingPipeline(_config);
-            pipeline.initialise();
-        }
-        catch (final ConfigurationException ce) {
-            throw new ManagedLifecycleException("Error configuring action processing pipeline", ce);
-        }
-        this.pipeline = pipeline;
-        final TwoWayCourier pickUpCourier;
-        try {
-            pickUpCourier = CourierFactory.getPickupCourier(_epr);
-            try {
-                final Method setPollLatency = pickUpCourier.getClass().getMethod(
-                        "setPollLatency", new Class[]{Long.class});
-                setPollLatency.invoke(pickUpCourier, new Long(1000 * _latencySecs));
+            this.pipeline = pipeline ;
+            final TwoWayCourier pickUpCourier ;
+            try
+            {
+                pickUpCourier = CourierFactory.getPickupCourier(_epr) ;
+                try
+                {
+                    final Method setPollLatency = pickUpCourier.getClass().getMethod(
+                        "setPollLatency", new Class[] { Long.class });
+                    setPollLatency.invoke(pickUpCourier, new Long(1000 * _latencySecs));
+                }
+                catch (final NoSuchMethodException nsme)
+                {
+                        // OK, just leave it null
+                }
+                catch (final Exception ex)
+                {
+                    CourierUtil.cleanCourier(pickUpCourier);
+                    throw new ManagedLifecycleException("Problems invoking setPollLatency(long)", ex) ;
+                }
             }
-            catch (final NoSuchMethodException nsme) {
-                // OK, just leave it null
+            catch (final MalformedEPRException mepre)
+            {
+                throw new ManagedLifecycleException("Malformed EPR: " + _epr) ;
             }
-            catch (final Exception ex) {
-                CourierUtil.cleanCourier(pickUpCourier);
-                throw new ManagedLifecycleException("Problems invoking setPollLatency(long)", ex);
+            catch (final CourierException ce)
+            {
+                throw new ManagedLifecycleException("No appropriate courier can be obtained for " + _epr, ce);
             }
-        }
-        catch (final MalformedEPRException mepre) {
-            throw new ManagedLifecycleException("Malformed EPR: " + _epr);
-        }
-        catch (final CourierException ce) {
-            throw new ManagedLifecycleException("No appropriate courier can be obtained for " + _epr, ce);
-        }
 
-        _pickUpCourier = pickUpCourier;
+            _pickUpCourier = pickUpCourier ;
 
-        try {
-            RegistryUtil.register(_config, _epr);
+            try
+            {
+                RegistryUtil.register(_config, _epr);
+            }
+            catch (final RegistryException re)
+            {
+                CourierUtil.cleanCourier(_pickUpCourier);
+                throw new ManagedLifecycleException("Unexpected error during registration for epr " + _epr, re);
+            }
         }
-        catch (final RegistryException re) {
-            CourierUtil.cleanCourier(_pickUpCourier);
-            throw new ManagedLifecycleException("Unexpected error during registration for epr " + _epr, re);
-        }
-    }
 
-    /**
-     * Handle the start of the managed instance.
-     *
-     * @throws ManagedLifecycleException for errors while starting.
-     */
-    protected void doStart()
-            throws ManagedLifecycleException {
-        checkExecutorTermination();
+        /**
+         * Handle the start of the managed instance.
+         *
+         * @throws ManagedLifecycleException for errors while starting.
+         */
+        protected void doStart()
+            throws ManagedLifecycleException
+        {
+            checkExecutorTermination() ;
 
-        _execService = Executors.newFixedThreadPool(_maxThreads);
+            _execService = Executors.newFixedThreadPool(_maxThreads) ;
 
-        super.doStart();
-    }
-
-    /**
-     * Execute on the thread.
-     */
-    protected void doRun() {
-        if (_logger.isDebugEnabled()) {
-            _logger.debug("doRun() method of " + this.getClass().getSimpleName()
-                    + " started on thread " + Thread.currentThread().getName());
+            super.doStart() ;
         }
 
-        while (isRunning()) {
-            // Only pickup a message when a thread is available
-            if (waitForThread(_pauseLapseInMillis)) {
-                waitForEventAndProcess(100);
+        /**
+         * Execute on the thread.
+         */
+        protected void doRun()
+        {
+            if (_logger.isDebugEnabled())
+            {
+                _logger.debug("doRun() method of " + this.getClass().getSimpleName()
+                            + " started on thread " + Thread.currentThread().getName());
             }
-        }
 
-        if (_logger.isDebugEnabled()) {
-            _logger.debug("run() method of " + this.getClass().getSimpleName()
-                    + " finished on thread " + Thread.currentThread().getName());
-        }
-    }
+            while (isRunning())
+            {
+                // Only pickup a message when a thread is available
+                if (waitForThread(_pauseLapseInMillis))
+                {
+                    waitForEventAndProcess(100) ;
+                }
+            }
 
-    public void waitForEventAndProcess(long maxWaitMillis) {
-        final Message message;
-        try {
-            message = (maxWaitMillis > 0) ? _pickUpCourier
-                    .pickup(maxWaitMillis) : null;
-            errorDelay = 0;
-        }
-        catch (CourierTimeoutException e) {
-            return;
-        }
-        catch (CourierException e) {
-            _logger.debug("Courier Exception", e);
-            if (errorDelay == 0) {
-                errorDelay = MIN_ERROR_DELAY;
-            } else if (errorDelay < MAX_ERROR_DELAY) {
-                errorDelay <<= 1;
+            if (_logger.isDebugEnabled())
+            {
+                _logger.debug("run() method of " + this.getClass().getSimpleName()
+                            + " finished on thread " + Thread.currentThread().getName());
             }
-            _logger.warn("Error processing courier, backing off for " + errorDelay + " milliseconds");
-            waitForRunningStateChange(ManagedLifecycleThreadState.STOPPING, errorDelay);
-            return;
         }
 
-        if (null != message) {
-            final Runnable pipelineRunner = new Runnable() {
-                public void run() {
-                    try {
-                        pipeline.process(message);
-                    } finally {
-                        updateThreadCount(-1);
-                    }
-                }
-            };
-            updateThreadCount(+1);
-            _execService.execute(pipelineRunner);
-        }
+	public void waitForEventAndProcess (long maxWaitMillis)
+	{
+		final Message message ;
+		try
+		{
+			message = (maxWaitMillis > 0) ? _pickUpCourier
+					.pickup(maxWaitMillis) : null;
+                        errorDelay = 0 ;
+		}
+		catch (CourierTimeoutException e)
+		{
+			return;
+		}
+		catch (CourierException e)
+		{
+                        _logger.debug("Courier Exception", e);
+                        if (errorDelay == 0)
+                        {
+                            errorDelay = MIN_ERROR_DELAY ;
+                        }
+                        else if (errorDelay < MAX_ERROR_DELAY)
+                        {
+                            errorDelay <<= 1 ;
+                        }
+                        _logger.warn("Error processing courier, backing off for " + errorDelay + " milliseconds") ;
+                        waitForRunningStateChange(ManagedLifecycleThreadState.STOPPING, errorDelay) ;
+			return;
+		}
 
-    } // ________________________________
+		if (null != message)
+		{
+                    final Runnable pipelineRunner = new Runnable() {
+                        public void run() {
+                            try {
+                                pipeline.process(message) ;
+                            } finally {
+                                updateThreadCount(-1) ;
+                            }
+                        }
+                    } ;
+                    updateThreadCount(+1);
+                    _execService.execute(pipelineRunner);
+		}
 
-    /**
-     * Handle the threaded destroy of the managed instance.
-     *
-     * @throws ManagedLifecycleException for errors while destroying.
-     */
-    protected void doThreadedDestroy()
-            throws ManagedLifecycleException {
-        if (_execService != null) {
-            _execService.shutdown();
-            checkExecutorTermination();
-        }
+	} // ________________________________
 
-        pipeline.destroy();
-        pipeline = null;
+        /**
+         * Handle the threaded destroy of the managed instance.
+         *
+         * @throws ManagedLifecycleException for errors while destroying.
+         */
+        protected void doThreadedDestroy()
+            throws ManagedLifecycleException
+        {
+            if (_execService != null)
+            {
+                _execService.shutdown() ;
+                checkExecutorTermination() ;
+            }
 
-        CourierUtil.cleanCourier(_pickUpCourier);
-        RegistryUtil.unregister(_eprCategoryName, _eprName, _epr);
-    }
+            pipeline.destroy() ;
+            pipeline = null ;
 
-    /**
-     * Check that the existing executor has been closed down.
-     *
-     * @throws ManagedLifecycleException If executor tasks are still active.
-     */
-    private void checkExecutorTermination()
-            throws ManagedLifecycleException {
-        if (_execService != null) {
-            try {
-                try {
-                    if (!_execService.awaitTermination(getTerminationPeriod(), TimeUnit.MILLISECONDS)) {
-                        throw new ManagedLifecycleException("Tasks remain active in executor");
+            CourierUtil.cleanCourier(_pickUpCourier);
+            RegistryUtil.unregister(_eprCategoryName, _eprName, _epr) ;
+        }
+
+        /**
+         * Check that the existing executor has been closed down.
+         * @throws ManagedLifecycleException If executor tasks are still active.
+         */
+        private void checkExecutorTermination()
+            throws ManagedLifecycleException
+        {
+            if (_execService != null)
+            {
+                try
+                {
+                    try
+                    {
+                        if (!_execService.awaitTermination(getTerminationPeriod(), TimeUnit.MILLISECONDS))
+                        {
+                            throw new ManagedLifecycleException("Tasks remain active in executor") ;
+                        }
                     }
+                    catch (final InterruptedException ie)
+                    {
+                        throw new ManagedLifecycleException("Interrupted waiting for active tasks to terminate") ;
+                    }
                 }
-                catch (final InterruptedException ie) {
-                    throw new ManagedLifecycleException("Interrupted waiting for active tasks to terminate");
+                finally
+                {
+                    _execService = null ;
                 }
             }
-            finally {
-                _execService = null;
-            }
         }
-    }
 
-    private boolean waitForThread(final long delay) {
-        boolean result = true;
-        synchronized (_synchThreads) {
-            if (_qRunningThreads >= _maxThreads) {
-                try {
-                    _synchThreads.wait(delay);
+        private boolean waitForThread(final long delay)
+        {
+            boolean result = true ;
+            synchronized(_synchThreads)
+            {
+                if (_qRunningThreads >= _maxThreads)
+                {
+                    try
+                    {
+                        _synchThreads.wait(delay) ;
+                    }
+                    catch (final InterruptedException ie) {}
+                    result = _qRunningThreads < _maxThreads ;
                 }
-                catch (final InterruptedException ie) {
-                }
-                result = _qRunningThreads < _maxThreads;
             }
+            return result ;
         }
-        return result;
-    }
 
-    private void updateThreadCount(Integer i) {
-        synchronized (_synchThreads) {
-            _qRunningThreads += i.intValue();
-            if (_qRunningThreads < _maxThreads) {
-                _synchThreads.notifyAll();
+        private void updateThreadCount(Integer i)
+        {
+            synchronized (_synchThreads)
+            {
+                _qRunningThreads += i.intValue();
+                if (_qRunningThreads < _maxThreads)
+                {
+                    _synchThreads.notifyAll() ;
+                }
             }
         }
-    }
 
-    private ConfigTree _config;
+        private ConfigTree _config;
 
-    private String _eprCategoryName;
+        private String _eprCategoryName;
 
-    private String _eprName;
+        private String _eprName;
 
-    private EPR _epr;
+        private EPR _epr;
 
-    private int _maxThreads;
+        private int _maxThreads;
 
-    private int _defaultMaxThreads = 1;
+        private int _defaultMaxThreads = 1;
 
-    private long _latencySecs;
+        private long _latencySecs;
 
-    private long _pauseLapseInMillis = 50;
+        private long _pauseLapseInMillis = 50 ;
 
-    private ExecutorService _execService;
+        private ExecutorService _execService;
 
-    private Object _synchThreads = new Short((short) -1);
+        private Object _synchThreads = new Short((short) -1);
 
-    private int _qRunningThreads;
+        private int _qRunningThreads;
 
-    private Logger _logger = Logger.getLogger(MessageAwareListener.class);
+        private Logger _logger = Logger.getLogger(MessageAwareListener.class);
 
-    private PickUpOnlyCourier _pickUpCourier;
+        private PickUpOnlyCourier _pickUpCourier;
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageComposer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -39,7 +39,7 @@
 public interface MessageComposer<T> {
 
     /**
-     * Set the conposer's configuration.
+     * Set the composer's configuration.
      *
      * @param config Composer configuration.
      * @throws ConfigurationException Bad configuration.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageCounter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageCounter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/MessageCounter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -24,7 +24,6 @@
 import java.util.Observable;
 import java.util.Observer;
 
-import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.system.ServiceMBeanSupport;
 
 /**
@@ -94,7 +93,7 @@
 	/**
 	 * Update the message counter based on the MessageStatusBean that is returned
 	 * from the observable.
-	 * @param Observable the observable object
+	 * @param o the observable object
 	 * @param arg the MessageStatusBean 
 	 */
 	public void update(Observable o, Object arg) {
@@ -111,10 +110,12 @@
 		}
 		
 		totalProcessTime += msb.getProcessTime();
-        byte[] byteArray = (byte[]) msb.getMessage().getBody().get(BytesBody.BYTES_LOCATION);
-        
-        if(byteArray != null) {
-            totalBytes += byteArray.length;
+
+        Object payload = msb.getMessage().getBody().get();
+        if(payload instanceof byte[]) {
+            totalBytes += ((byte[])payload).length;
+        } else {
+            // ???? http://jira.jboss.com/jira/browse/JBESB-1183
         }
     }
 

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -159,6 +159,8 @@
                 composer = defaultComposer;
             }
 
+            composer.setConfiguration(gatewayConfig);
+
             return new UncomposedMessageDeliveryAdapter(targetServiceCategory, targetServiceName, composer);
         } catch (MessageDeliverException e) {
             throw new ConfigurationException("Remoting Listener configuration failed.", e);

Added: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/MessagePayloadProxy.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/MessagePayloadProxy.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/MessagePayloadProxy.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -0,0 +1,352 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.message;
+
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.common.ModulePropertyManager;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.internal.soa.esb.assertion.AssertArgument;
+import org.apache.log4j.Logger;
+
+import java.util.Arrays;
+import java.util.List;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * Utility class to help make accessing the message payload a little more deterministic.
+ * <p/>
+ * This class can be used by actions/listeners to manage access to the payload on a
+ * Message instance.  The class is constructed from the configuration of the
+ * component (listener, actions etc) using the proxy instance.  It checks the
+ * configuration for "get-payload-location" and "set-payload-location" configuration
+ * properties, defaulting both to the Default Body Location
+ * ({@link Body#DEFAULT_LOCATION}).
+ * <p/>
+ * Prior to the introduction of this class, there was no standardised pattern for
+ * components exchanging data through the ESB Message.  It was adhoc in nature,
+ * with components needing to have knowledge of where other components set
+ * the data in the message.  This functionality is still supported through the
+ * "get-payload-location" and "set-payload-location" configuration
+ * properties, but all ESB now (by default) get and set their data on the
+ * {@link Body#DEFAULT_LOCATION}.
+ * <p/>
+ * Code writen to work against ESB version up to and including version 4.2GA
+ * can still use the old adhoc exchange patterns by setting the
+ * "core:use.legacy.message.payload.exchange.patterns" config property in the
+ * jbossesb-properties.xml file. 
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class MessagePayloadProxy {
+
+    /**
+     * jbossesb-properties.xml config key for switching on and off legacy (adhoc) message payload
+     * location getting/setting.
+     */
+    public static final String USE_LEGACY_EXCHANGE_PATTERNS_CONFIG = "use.legacy.message.payload.exchange.patterns";
+    /**
+     * Component property for the message location used in the {@link #getPayload(Message)} method.
+     * Defaults to {@link org.jboss.soa.esb.message.Body#DEFAULT_LOCATION}. 
+     */
+    public static final String GET_PAYLOAD_LOCATION = "get-payload-location";
+    /**
+     * Component property for the message location used in the {@link #setPayload(Message, Object)} method.
+     * Defaults to {@link org.jboss.soa.esb.message.Body#DEFAULT_LOCATION}.
+     */
+    public static final String SET_PAYLOAD_LOCATION = "set-payload-location";
+    /**
+     * Mime type message property key.
+     */
+    public static final String MIME_TYPE = "mime-type";
+
+    public static enum NullPayloadHandling {
+        NONE, // Do nothing
+        LOG, // Create an INFO log.
+        WARN, // Create a WARN log.
+        EXCEPTION, // Throw a MessageDeliverException
+    }
+
+    private static Logger logger = Logger.getLogger(MessagePayloadProxy.class);
+    private static boolean USE_LEGACY_EXCHANGE_LOCATIONS;
+    static {
+        setUseLegacyPatterns(ModulePropertyManager.getPropertyManager(ModulePropertyManager.CORE_MODULE).getProperty(USE_LEGACY_EXCHANGE_PATTERNS_CONFIG, "false").equals("true"));
+    }
+    
+    private List<String> getPayloadLocations;
+    private List<String> setPayloadLocations;
+    private NullPayloadHandling nullGetPayloadHandling = NullPayloadHandling.EXCEPTION;
+    private NullPayloadHandling nullSetPayloadHandling = NullPayloadHandling.NONE;
+
+    /**
+     * Public constructor.
+     *
+     * @param config The component configuration.
+     * @param legacyGetPayloadLocations The message input locations as defined in the 4.2.x codebase.
+     * @param legacySetPayloadLocations The message output locations as defined in the 4.2.x codebase.
+     * @deprecated Use the {@link #MessagePayloadProxy(org.jboss.soa.esb.helpers.ConfigTree) non-legacy constructor}.
+     * This method is here simply to support code that is dependent on the
+     * 4.2.x message payload exchange patterns an will be removed in a subsequent release.  New code should use the
+     * {@link #MessagePayloadProxy(org.jboss.soa.esb.helpers.ConfigTree)} constructor.
+     */
+    public MessagePayloadProxy(ConfigTree config, String[] legacyGetPayloadLocations, String[] legacySetPayloadLocations) {
+        this(config);
+        if(USE_LEGACY_EXCHANGE_LOCATIONS) {
+            AssertArgument.isNotNullAndNotEmpty(legacyGetPayloadLocations, "legacyGetPayloadLocations");
+            AssertArgument.isNotNullAndNotEmpty(legacySetPayloadLocations, "legacySetPayloadLocations");
+            setDataLocations(legacyGetPayloadLocations, legacySetPayloadLocations);
+        }
+    }
+
+    /**
+     * Public constructor.
+     *
+     * @param config The component configuration.
+     */
+    public MessagePayloadProxy(ConfigTree config) {
+        AssertArgument.isNotNull(config, "config");
+        setDataLocations(new String[] {config.getAttribute(GET_PAYLOAD_LOCATION, Body.DEFAULT_LOCATION)},
+                         new String[] {config.getAttribute(SET_PAYLOAD_LOCATION, Body.DEFAULT_LOCATION)});
+    }
+
+    private void setDataLocations(String[] getPayloadLocations, String[] setPayloadLocations) {
+        this.getPayloadLocations = Arrays.asList(getPayloadLocations);
+        this.setPayloadLocations = Arrays.asList(setPayloadLocations);
+    }
+
+    /**
+     * Get the primary message payload from the supplied message.
+     * @param message The Message instance.
+     * @return The primary message payload.
+     * @throws MessageDeliverException See {@link #setNullGetPayloadHandling(org.jboss.soa.esb.message.MessagePayloadProxy.NullPayloadHandling)}.
+     */
+    public Object getPayload(Message message) throws MessageDeliverException {
+        AssertArgument.isNotNull(message, "message");
+        for(String getPayloadLocation: getPayloadLocations) {
+            Object object = message.getBody().get(getPayloadLocation);
+            if(object != null) {
+                if(USE_LEGACY_EXCHANGE_LOCATIONS && object instanceof byte[] && getPayloadLocation.equals(BytesBody.BYTES_LOCATION)) {
+                    return legacyDecodeBinaryPayload((byte[])object, (String)message.getProperties().getProperty(MIME_TYPE));
+                } else {
+                    return object;
+                }
+            }
+        }
+
+        // Null get handling...
+        if(nullGetPayloadHandling == NullPayloadHandling.NONE) {
+            // Do nothing
+        } else if(nullGetPayloadHandling == NullPayloadHandling.LOG) {
+            logger.info("Null data found in message location(s): " + getPayloadLocations);
+        } else if(nullGetPayloadHandling == NullPayloadHandling.WARN) {
+            logger.warn("Null data found in message location(s): " + getPayloadLocations);
+        } else if(nullGetPayloadHandling == NullPayloadHandling.EXCEPTION) {
+            throw new MessageDeliverException("Null data found in message location(s): " + getPayloadLocations);
+        }
+        
+        return null;
+    }
+
+    /**
+     * Set the primary message payload on the supplied message.
+     * @param message The message instance.
+     * @param payload The message primary payload.
+     * @throws MessageDeliverException See {@link #setNullSetPayloadHandling(org.jboss.soa.esb.message.MessagePayloadProxy.NullPayloadHandling)}.
+     */
+    public void setPayload(Message message, Object payload) throws MessageDeliverException {
+        AssertArgument.isNotNull(message, "message");
+        if(payload != null) {
+            for(String setPayloadLocation : setPayloadLocations) {
+                if(USE_LEGACY_EXCHANGE_LOCATIONS && setPayloadLocation.equals(BytesBody.BYTES_LOCATION)) {
+                    legacyEncodeBinaryPayload(payload, message);
+                } else {
+                    setPayload(message, setPayloadLocation, payload);
+                }
+            }
+        } else {
+            // Null set handling...
+            if(nullSetPayloadHandling == NullPayloadHandling.NONE) {
+                // Just fall through and clear everything...
+            } else if(nullSetPayloadHandling == NullPayloadHandling.LOG) {
+                // Log... fall through and clear everything...
+                logger.info("Setting null data in message location(s): " + setPayloadLocations);
+            } else if(nullSetPayloadHandling == NullPayloadHandling.WARN) {
+                // Warn... fall through and clear everything...
+                logger.warn("Setting null data in message location(s): " + setPayloadLocations);
+            } else if(nullSetPayloadHandling == NullPayloadHandling.EXCEPTION) {
+                throw new MessageDeliverException("Setting null data in message location(s): " + setPayloadLocations);
+            }
+
+            // Clear everything...
+            for(String getPayloadLocation : getPayloadLocations) {
+                message.getBody().remove(getPayloadLocation);
+            }
+            for(String setPayloadLocation : setPayloadLocations) {
+                message.getBody().remove(setPayloadLocation);
+            }
+        }
+    }
+
+    private void setPayload(Message message, String setPayloadLocation, Object payload) {
+        message.getBody().add(setPayloadLocation, payload);
+
+        // Attach a stack trace to the message, allowing trackback on
+        // where data is being set on the message from.  Useful for debugging. 
+        if(!logger.isDebugEnabled()) {
+            message.getBody().add(setPayloadLocation + "-set-stack", new Exception("setPayload stack trace for '" + setPayloadLocation + "'."));
+        }
+    }
+
+    /**
+     * Perform a legacy style Object to byte[] encoding.
+     * <p/>
+     * A number of places in the code (e.g. {@link org.jboss.soa.esb.listeners.gateway.PackageJmsMessageContents})
+     * had a somewhat dodgy idea about Object to byte[] serialization whereby Objects being set in the
+     * {@link BytesBody#BYTES_LOCATION} were getting serialized by doing xxx.toString().getBytes(), which is
+     * clearly not accurate.  This method provides backward compatibility for this functionality.
+     * <p/>
+     * We're adding a half-baked MIME type property on the message such that the receiver has some idea
+     * of what it's receiving.
+     *
+     * @param payload The payload object.
+     * @param message The ESB Message.
+     *
+     * @see #legacyDecodeBinaryPayload(byte[], String) 
+     */
+    private void legacyEncodeBinaryPayload(Object payload, Message message) {
+        if(payload instanceof byte[]) {
+            // Raw bytes... intentionally not setting the mime type...
+            setPayload(message, BytesBody.BYTES_LOCATION, payload);
+        } else {
+            // This is the more dodgy stuff :-)  Also... the caller should be encoding the message
+            // to bytes themselves if they want to set on BytesBody.BYTES_LOCATION.
+            if(payload instanceof String) {
+                // We can work text safely enough because we can clearly mark its mime type for the receiver...
+                try {
+                    setPayload(message, BytesBody.BYTES_LOCATION, payload.toString().getBytes("UTF-8"));
+                    message.getProperties().setProperty(MIME_TYPE, "text/plain");
+                } catch (UnsupportedEncodingException e) {
+                    throw new IllegalStateException("Unexpected environmental exception.  UTF-8 character encoding not supported.");
+                }
+            } else {
+                // General catch all... doing toString on some objects may make no sense, but we need to
+                // keep this in for backward compatibility...
+                try {
+                    setPayload(message, BytesBody.BYTES_LOCATION, payload.toString().getBytes("UTF-8"));
+                    message.getProperties().setProperty(MIME_TYPE, "java/" + payload.getClass().getName());
+                } catch (UnsupportedEncodingException e) {
+                    throw new IllegalStateException("Unexpected environmental exception.  UTF-8 character encoding not supported.");
+                }
+            }
+        }
+    }
+
+    /**
+     * Perform a legacy style byte[] to Object decoding.
+     * <p/>
+     * We're not offering full decoding capability here because the old code didn't, but also
+     * because it's simply the wrong place/mechanism.  We'll support text/plain, but after that
+     * we're simply returning the byte[] undecoded.
+     *
+     * @param bytes The message payload bytes.
+     * @param mimeType The binary data mime type.
+     * @return The "decoded" byte[] ;-)
+     *
+     * @see #legacyEncodeBinaryPayload(Object, Message) 
+     */
+    private Object legacyDecodeBinaryPayload(byte[] bytes, String mimeType) {
+        if(mimeType != null && mimeType.trim().equals("text/plain")) {
+            try {
+                return new String(bytes, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new IllegalStateException("Unexpected environmental exception.  UTF-8 character encoding not supported.");
+            }
+        }
+
+        return bytes;
+    }
+
+    /**
+     * Get the primary message input Location as configured on the component config ("get-payload-location").
+     * @return The message input location.
+     */
+    public String getGetPayloadLocation() {
+        return getPayloadLocations.get(0);
+    }
+
+    /**
+     * Get the primary message output Location as configured on the component config ("set-payload-location").
+     * @return The message output location.
+     */
+    public String getSetPayloadLocation() {
+        return setPayloadLocations.get(0);
+    }
+
+    /**
+     * Get the null set-payload handling config.
+     * @return Null set-payload Handling config.
+     */
+    public NullPayloadHandling getNullGetPayloadHandling() {
+        return nullGetPayloadHandling;
+    }
+
+    /**
+     * Set the null set-payload handling config.
+     * <p/>
+     * If not set, defaults to {@link org.jboss.soa.esb.message.MessagePayloadProxy.NullPayloadHandling#EXCEPTION}.
+     *
+     * @param nullGetPayloadHandling Null set-payload Handling config.
+     */
+    public void setNullGetPayloadHandling(NullPayloadHandling nullGetPayloadHandling) {
+        this.nullGetPayloadHandling = (nullGetPayloadHandling != null ? nullGetPayloadHandling : NullPayloadHandling.EXCEPTION);
+    }
+
+    /**
+     * Get the null get-payload handling config.
+     * @return Null get-payload Handling config.
+     */
+    public NullPayloadHandling getNullSetPayloadHandling() {
+        return nullSetPayloadHandling;
+    }
+
+    /**
+     * Set the null get-payload handling config.
+     * <p/>
+     * If not set, defaults to {@link org.jboss.soa.esb.message.MessagePayloadProxy.NullPayloadHandling#NONE}.
+     *
+     * @param nullSetPayloadHandling Null get-payload Handling config.
+     */
+    public void setNullSetPayloadHandling(NullPayloadHandling nullSetPayloadHandling) {
+        this.nullSetPayloadHandling = (nullSetPayloadHandling != null ? nullSetPayloadHandling : NullPayloadHandling.NONE);
+    }
+
+    public static void setUseLegacyPatterns(boolean useLegacyPatterns) {
+        MessagePayloadProxy.USE_LEGACY_EXCHANGE_LOCATIONS = useLegacyPatterns;
+        if(USE_LEGACY_EXCHANGE_LOCATIONS) {
+            logger.warn("Using the legacy payload-to-message exchange patterns.  This is not recommended.  Please change to use the default message location, or the 'input-location' and 'output-location' properties.");
+        } else {
+            logger.info("Using the non-legacy payload-to-message exchange pattern.  To switch back to the legacy exchange patterns, use the '" + ModulePropertyManager.CORE_MODULE + ":" + USE_LEGACY_EXCHANGE_PATTERNS_CONFIG + "' property in jbossesb-properties.xml.");
+        }
+    }
+
+    public static boolean isUsingLegacyPatterns() {
+        return MessagePayloadProxy.USE_LEGACY_EXCHANGE_LOCATIONS;
+    }
+}


Property changes on: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/MessagePayloadProxy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/body/content/BytesBody.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/body/content/BytesBody.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/body/content/BytesBody.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -40,6 +40,7 @@
 
 public interface BytesBody extends Body
 {
+    @Deprecated
     public static final String BYTES_LOCATION = "org.jboss.soa.esb.message.content.bytes";
 	
 	public boolean readBoolean() throws IncompatibleModeException, IOException,

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 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/mapping/ObjectMapper.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,7 +28,10 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.mvel.MVEL;
 
 /**
@@ -80,6 +83,24 @@
      */
     private static final char EXPRESSION_SEPARATOR = '.' ;
 
+    private MessagePayloadProxy payloadProxy;
+    private static String[] legacyGetPayloadLocations = new String[] {BytesBody.BYTES_LOCATION};
+    private static String[] legacySetPayloadLocations = new String[] {BytesBody.BYTES_LOCATION};
+
+    public ObjectMapper() {
+        // Unconfigurable payload proxy...
+        this.payloadProxy = new MessagePayloadProxy(new ConfigTree("null-config"),
+                                                    legacyGetPayloadLocations,
+                                                    legacySetPayloadLocations);
+        payloadProxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.NONE);
+    }
+
+    public ObjectMapper(ConfigTree config) {
+        this.payloadProxy = new MessagePayloadProxy(config,
+                                                    legacyGetPayloadLocations,
+                                                    legacySetPayloadLocations);
+    }
+
     /**
      * Given a message and a series of MOPs, traverse the content and create
      * a list of Objects.
@@ -201,10 +222,14 @@
         String name     = path[1];
         if ("body".equalsIgnoreCase(location)) {
             Body body   = message.getBody();
-            object =
-                BODY_CONTENT.equals(name)
-                ? body.get(BytesBody.BYTES_LOCATION)
-                : body.get(name);
+            try {
+                object =
+                    BODY_CONTENT.equals(name)
+                    ? payloadProxy.getPayload(message)
+                    : body.get(name);
+            } catch (MessageDeliverException e) {
+                throw new ObjectMappingException("Unable to get payload '" + name + "' from message.", e);
+            }
         } else if ("properties".equalsIgnoreCase(location)) {
             object = message.getProperties().getProperty(name);
         } else if ("attachment".equalsIgnoreCase(location)) {
@@ -251,7 +276,11 @@
         if ("body".equalsIgnoreCase(location)) {
             Body body   = message.getBody();
             if (BODY_CONTENT.equals(name)) {
-                body.add(BytesBody.BYTES_LOCATION, getBytes((Serializable) object));
+                try {
+                    payloadProxy.setPayload(message, object);
+                } catch (MessageDeliverException e) {
+                    throw new ObjectMappingException("Unable to set payload on message.", e) ;
+                }
             } else {
                 body.add(name, object);
             }
@@ -464,7 +493,13 @@
         state.setIndex(index+1) ;
         return result ;
     }
-    
+
+    public static MessagePayloadProxy createPayloadProxy(ConfigTree config) {
+        return  new MessagePayloadProxy(config,
+                new String[] {BytesBody.BYTES_LOCATION},
+                new String[] {Body.DEFAULT_LOCATION, BytesBody.BYTES_LOCATION});
+    }
+
     /**
      * Skip whitespace from the specified location.
      * @param state The ObjectMapper state.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyConsole.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyConsole.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyConsole.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -24,26 +24,40 @@
 
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.util.Util;
+import org.jboss.soa.esb.actions.ActionUtils;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.apache.log4j.Logger;
 
 public class NotifyConsole extends NotificationTarget 
 {
+    private static Logger logger = Logger.getLogger(NotifyConsole.class);
+    private MessagePayloadProxy payloadProxy;
 
-	public NotifyConsole(ConfigTree tree)
+    public NotifyConsole(ConfigTree tree)
 	{
 		super(tree);
-	}
+        payloadProxy = new MessagePayloadProxy(tree,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
+        payloadProxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.LOG);
+    }
 	
 	@Override
 	public void sendNotification(Message message) throws NotificationException 
 	{
-        String content=null;  
-        if (message.getBody().get(BytesBody.BYTES_LOCATION)!=null) {
-            content = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+        try {
+            Object obj = payloadProxy.getPayload(message);
+            if(obj instanceof byte[]) {
+                System.out.println("ConsoleNotifier "+Util.getStamp()+"<" + new String((byte[])obj) + ">");
+            } else {
+                System.out.println("ConsoleNotifier "+Util.getStamp()+"<" + obj + ">");
+            }
+        } catch (MessageDeliverException e) {
+            throw new NotificationException(e);
         }
-		System.out.println
-			("ConsoleNotifier "+Util.getStamp()+"<"+content+">");
 	}
 	
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyEmail.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyEmail.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyEmail.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -27,9 +27,11 @@
 import javax.mail.internet.InternetAddress;
 
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.helpers.Email;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.util.Util;
 
@@ -46,20 +48,22 @@
  */
 public class NotifyEmail extends NotificationTarget
 {
-	/**
+    private MessagePayloadProxy payloadProxy;
+
+    /**
 	 * Instantiate a NotifyEmail object using the information contained in
 	 * &lt;arg 1&gt;
 	 * 
-	 * @param p_oP
+	 * @param configTree
 	 *            ConfigTree - See attributes and structure needed for the
 	 *            Email() constructor - The MESSAGE attribute will be filled in
 	 *            at sendNotification(Serializable) time
 	 * @throws ConfigurationException
 	 * @see NotifyEmail#sendNotification(Message)
 	 */
-	public NotifyEmail (ConfigTree p_oP) throws ConfigurationException
+	public NotifyEmail (ConfigTree configTree) throws ConfigurationException
 	{
-		super(p_oP);
+		super(configTree);
 
 		try
 		{
@@ -78,6 +82,9 @@
 		{
 			throw new ConfigurationException(ex);
 		}
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
 	} // __________________________________
 
 	/**
@@ -92,16 +99,23 @@
 	{
 		try
 		{
-            String content=null;
-            if (message.getBody().get(BytesBody.BYTES_LOCATION)!=null) {
-                content = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+            Object obj = payloadProxy.getPayload(message);
+            String content;
+
+            if(obj instanceof byte[]) {
+                content = new String((byte[]) obj);
+            } else {
+                content = obj.toString();
             }
+
 			ConfigTree oP = m_oParms.cloneObj();
 			String sMsg = oP.getAttribute(Email.MESSAGE);
                         sMsg = ((null == sMsg) ? content : (sMsg + "\n" + content));
 			oP.setAttribute(Email.MESSAGE, sMsg);
 			sendEmailNotification(oP);
-		}
+        } catch (MessageDeliverException e) {
+            throw new NotificationException(e);
+        }
 		catch (AddressException e)
 		{
 			Util.getDefaultLogger(this.getClass()).error("Send Mail Failed", e);

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFTP.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFTP.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFTP.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -32,10 +32,12 @@
 import org.jboss.soa.esb.addressing.eprs.FTPEpr;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.util.RemoteFileSystem;
 import org.jboss.soa.esb.util.RemoteFileSystemException;
 import org.jboss.soa.esb.util.RemoteFileSystemFactory;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * Sends a message to an outgoing FTP server. The outgoing filename can have
@@ -71,14 +73,18 @@
 
 	/** Base filename for temp file */
 	public static final String TEMP_FILE_BASE = "jbossesb-NotifyFTP";
+    private MessagePayloadProxy payloadProxy;
 
-	/**
+    /**
 	 * Create an outgoing FTP notification based on the given configuration.
 	 * 
 	 * @param config
 	 */
 	public NotifyFTP(ConfigTree config) {
 		this.config = config;
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
 	}
 
 	/**
@@ -184,10 +190,12 @@
 		try {
 			tmpFile = File.createTempFile(TEMP_FILE_BASE, null);
 			stream = new FileOutputStream(tmpFile);
-			IOUtils.write((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION), stream);
-			stream.close();
+            IOUtils.write((byte[]) payloadProxy.getPayload(message), stream);
+            stream.close();
 			rfs = RemoteFileSystemFactory.getRemoteFileSystem(getFtpEpr(), true);
 			rfs.uploadFile(tmpFile, getFileName(message));
+        } catch (MessageDeliverException e) {
+            e.printStackTrace();
 		} catch (RemoteFileSystemException e) {
 			throw new NotificationException("Could not complete FTP notification", e);
 		} catch (IOException e) {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFiles.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFiles.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyFiles.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -31,8 +31,10 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * Write the notification contents into a list of files specified in the
@@ -75,19 +77,23 @@
 	 * The NotificationFile[] that holds the output file list.
 	 */
 	protected NotificationFile[] m_oaOutF;
+    private MessagePayloadProxy payloadProxy;
 
-	/**
+    /**
 	 * Instantiate a NotifyFiles object according to contents of &lt;arg 1&gt;
 	 * 
-	 * @param p_oP
+	 * @param configTree
 	 *            ConfigTree - Should contain a nonempty set of child elements
 	 *            with elementName="file". Each child element must have a "URI"
 	 *            attribute and optionally a "append" element
 	 */
-	public NotifyFiles (ConfigTree p_oP)
+	public NotifyFiles (ConfigTree configTree)
 	{
-		super(p_oP);
-		setFiles(p_oP.getChildren(CHILD_FILE));
+		super(configTree);
+		setFiles(configTree.getChildren(CHILD_FILE));
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
 
 	} // __________________________________
 
@@ -160,25 +166,28 @@
 						notificationFile.append);
 				if (MessageType.JAVA_SERIALIZED.equals(message.getType()))
 				{
-                    objectNotification(fileOutStream, message.getBody().get(BytesBody.BYTES_LOCATION));
+                    objectNotification(fileOutStream, payloadProxy.getPayload(message));
 				}
 				else
 				{
+                    Object obj = payloadProxy.getPayload(message);
                     String content=null;
-                    if (message.getBody().get(BytesBody.BYTES_LOCATION)!=null) {
-                        content = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+                    if (obj instanceof byte[]) {
+                        content = new String((byte[]) obj);
+                    } else {
+                        content = obj.toString();
                     }
                     stringNotification(fileOutStream, content);
 				}
 			}
 			catch (IOException e)
-			{ 
-				final String msg = "[Exception while notifying file : " + notificationFile;
-                log.error(msg, e);
-                exceptions.append( NotifyUtil.createExceptionErrorString( msg, e ));
-			} 
-			finally
 			{
+                handleException(notificationFile, e, exceptions);
+			}
+            catch (MessageDeliverException e) {
+                handleException(notificationFile, e, exceptions);
+            } finally
+			{
 				try
 				{
 					if ( fileOutStream != null )
@@ -194,7 +203,13 @@
 			throw new NotificationException( exceptions.toString() );
 	} // __________________________________
 
-	protected void stringNotification (FileOutputStream p_oF, String p_s) throws IOException
+    private void handleException(NotificationFile notificationFile, Exception e, StringBuilder exceptions) {
+        final String msg = "[Exception while notifying file : " + notificationFile;
+        log.error(msg, e);
+        exceptions.append( NotifyUtil.createExceptionErrorString( msg, e ));
+    }
+
+    protected void stringNotification (FileOutputStream p_oF, String p_s) throws IOException
 	{
 		p_oF.write(p_s.getBytes());
 		if (!p_s.endsWith("\n")) 

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -39,11 +39,13 @@
 import org.jboss.internal.soa.esb.rosetta.pooling.JmsConnectionPool;
 import org.jboss.internal.soa.esb.rosetta.pooling.JmsConnectionPoolContainer;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.addressing.eprs.JMSEpr;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.notification.jms.DefaultJMSPropertiesSetter;
 import org.jboss.soa.esb.notification.jms.JMSPropertiesSetter;
 
@@ -73,8 +75,9 @@
      * Strategy for setting JMSProperties
      */
     private JMSPropertiesSetter jmsPropertiesStrategy = new DefaultJMSPropertiesSetter();
-	
-	/**
+    private MessagePayloadProxy payloadProxy;
+
+    /**
 	 * Abstract method - All classes that extend NotifyJMS must implement it
 	 * according to their own javax.jms.Destination needs (Queue/Topic)
 	 * 
@@ -221,7 +224,11 @@
 
 			m_oProps.setProperty(sKey.trim(), sVal);
 		}
-	} // __________________________________
+        payloadProxy = new MessagePayloadProxy(p_oP,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
+        payloadProxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.LOG);
+    } // __________________________________
 
 	/**
 	 * Performs an orderly release of all JMS resources utilized - Well behaved
@@ -256,16 +263,26 @@
 		try
 		{
 			Message jmsMessage = null;
-	
+            Object obj = payloadProxy.getPayload(esbMessage);
+
 			if (MessageType.JAVA_SERIALIZED.equals(esbMessage.getType()))
 			{
-				jmsMessage = sessions[0].createObjectMessage((byte[]) esbMessage.getBody().get(BytesBody.BYTES_LOCATION));
+                if(obj == null) {
+                    // create a null payload message...
+                    jmsMessage = sessions[0].createObjectMessage(null);
+                } else if(obj instanceof byte[]) {
+                    jmsMessage = sessions[0].createObjectMessage((byte[]) obj);
+                } else {
+                    throw new NotificationException("Expected payload type for '" + MessageType.JAVA_SERIALIZED + "' is byte[].  Recieved '" + obj.getClass().getName() + "'.");
+                }
 			}
 			else
 			{
-                String content=null;
-                if (esbMessage.getBody().get(BytesBody.BYTES_LOCATION)!=null) {
-                    content = new String((byte[]) esbMessage.getBody().get(BytesBody.BYTES_LOCATION));
+                String content = null;
+                if (obj instanceof byte[]) {
+                    content = new String((byte[]) obj);
+                } else if(obj != null) {
+                    content = obj.toString();
                 }
 				jmsMessage = sessions[0].createTextMessage(content);
 			}
@@ -283,8 +300,10 @@
 		catch (JMSException ex)
 		{
 			throw new NotificationException(ex);
-		}
-	} // __________________________________
+		} catch (MessageDeliverException e) {
+            throw new NotificationException(e);
+        }
+    } // __________________________________
 	
 	/**
 	 * This method will set appropriate JMSProperties on the outgoing JMSMessage object.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyQueues.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyQueues.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyQueues.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -42,8 +42,6 @@
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.helpers.NamingContext;
 
-;
-
 /**
  * This class that implements abstract methods defined in it's superclass
  * <p>
@@ -69,8 +67,8 @@
 	 * @see NotifyJMS#ATT_DEST_NAME
 	 */
 	public static final String CHILD_QUEUE = "queue";
-	
-	public NotifyQueues (ConfigTree p_oP) throws ConfigurationException, JMSException, ConnectionException
+
+    public NotifyQueues (ConfigTree p_oP) throws ConfigurationException, JMSException, ConnectionException
 	{
 		super(p_oP);
 		setQueues(p_oP.getChildren(CHILD_QUEUE));

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifySqlTable.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifySqlTable.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifySqlTable.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,10 +28,12 @@
 
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.helpers.persist.JdbcCleanConn;
 import org.jboss.soa.esb.helpers.persist.SimpleDataSource;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 
 public class NotifySqlTable extends NotificationTarget
@@ -51,10 +53,11 @@
 	protected String m_sDriver, m_sURL, m_sUser, m_sPwd, m_sTable, m_sDataCol;
 
 	protected Properties m_oCols;
+    private MessagePayloadProxy payloadProxy;
 
-	public NotifySqlTable (ConfigTree p_oP) throws ConfigurationException
+    public NotifySqlTable (ConfigTree configTree) throws ConfigurationException
 	{
-		super(p_oP);
+		super(configTree);
 		m_sDriver = getAttr(SimpleDataSource.DRIVER);
 		m_sURL = getAttr(SimpleDataSource.URL);
 		m_sUser = getAttr(SimpleDataSource.USER);
@@ -63,7 +66,7 @@
 		m_sDataCol = getAttr(ATT_DATA);
 
 		m_oCols = new Properties();
-		ConfigTree[] oaP = p_oP.getChildren(CHILD_COLUMN);
+		ConfigTree[] oaP = configTree.getChildren(CHILD_COLUMN);
 		for (int i1 = 0; i1 < oaP.length; i1++)
 		{
 			ConfigTree oCurr = oaP[i1];
@@ -84,6 +87,10 @@
 			}
 			m_oCols.setProperty(sCol, sVal);
 		}
+
+        payloadProxy = new MessagePayloadProxy(configTree,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
 	} // __________________________________
 
 	private String getAttr (String p_sAtt) throws ConfigurationException
@@ -128,10 +135,19 @@
 
 	public void sendNotification (Message message) throws NotificationException
 	{
-        String content=null;
-        if (message.getBody().get(BytesBody.BYTES_LOCATION)!=null) {
-            content = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+        Object obj;
+        try {
+            obj = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new NotificationException(e);
         }
+        String content;
+        if (obj instanceof byte[]) {
+            content = new String((byte[]) obj);
+        } else {
+            content = obj.toString();
+        }
+
 		m_oCols.setProperty(m_sDataCol, content);
 		JdbcCleanConn oConn = null;
 		PreparedStatement ps = null;

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierIntegrationTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierIntegrationTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierIntegrationTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -115,7 +115,7 @@
 
 		Message message = MessageFactory.getInstance().getMessage();
 		message.getHeader().setCall(call);
-		message.getBody().add(BytesBody.BYTES_LOCATION, "Hello World".getBytes());
+		message.getBody().add("Hello World".getBytes());
 		Courier courier = CourierFactory.getCourier(call.getTo());
 
 		courier.deliver(message);

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierUtilUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierUtilUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/CourierUtilUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -57,7 +57,7 @@
 	{
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
 		
-		msg1.getBody().add("foo", "bar");
+        msg1.getBody().add("bar");
 		msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 		msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));
 		
@@ -73,7 +73,7 @@
 	{
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
 		
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 		msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));
 		
@@ -89,7 +89,7 @@
 		tmpFile.delete();
 		
 		Assert.assertNotNull(msg2);
-		Assert.assertEquals(msg2.getBody().get("foo"), "bar");
+		Assert.assertEquals(msg2.getBody().get(), "bar");
 		Assert.assertEquals(msg2.getHeader().getCall().getMessageID().toString(), "urn:1234");
 		Assert.assertEquals(msg2.getHeader().getCall().getTo().getAddr().toString(), "PortReference < http://foo.bar >");
 	}

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -119,7 +119,7 @@
 		toEpr.setInputSuffix(TEST_SUFFIX);
 		
 		Message msg = MessageFactory.getInstance().getMessage();
-		msg.getBody().add(BytesBody.BYTES_LOCATION, contents.getBytes());
+		msg.getBody().add(contents.getBytes());
 
 		Call call = new Call(toEpr);
 		String uid = UUID.randomUUID().toString();
@@ -143,7 +143,7 @@
 		Message retrieved = pickUp.pickup(1000);
 		Assert.assertFalse("Null message retrieved",null==retrieved);
 		
-		String back = new String((byte[]) retrieved.getBody().get(BytesBody.BYTES_LOCATION));
+		String back = new String((byte[]) retrieved.getBody().get());
 		Assert.assertEquals(contents,back);
 		_logger.info("Contents of retrieved msg equal original text <"+back+">");
 		
@@ -220,7 +220,7 @@
 		toEpr.setInputSuffix(TEST_SUFFIX);
 		
 		Message msg = MessageFactory.getInstance().getMessage();
-		msg.getBody().add(BytesBody.BYTES_LOCATION, contents.getBytes());
+		msg.getBody().add(contents.getBytes());
 
 		Call call = new Call(toEpr);
 		String uid = UUID.randomUUID().toString();
@@ -240,7 +240,7 @@
 		Message retrieved = pickUp.pickup(1000);
 		Assert.assertFalse("Null message retrieved",null==retrieved);
 		
-		String back = new String((byte[]) retrieved.getBody().get(BytesBody.BYTES_LOCATION));
+		String back = new String((byte[]) retrieved.getBody().get());
 		Assert.assertEquals(contents,back);
 		_logger.info("Contents of retrieved msg equal original text <"+back+">");
 		
@@ -261,8 +261,8 @@
 		toEpr.setInputSuffix(TEST_SUFFIX);
 		
 		Message msg = MessageFactory.getInstance().getMessage();
-		msg.getBody().add(BytesBody.BYTES_LOCATION, contents.getBytes());
-		msg.getBody().add(new ExampleObject("hello", 1234));
+		msg.getBody().add(contents.getBytes());
+		msg.getBody().add("exampleObj", new ExampleObject("hello", 1234));
 		
 		Call call = new Call(toEpr);
 		final String uid = UUID.randomUUID().toString();
@@ -283,11 +283,11 @@
 		Message retrieved = pickUp.pickup(1000);
 		Assert.assertFalse("Null message retrieved",null==retrieved);
 		
-		String back = new String((byte[]) retrieved.getBody().get(BytesBody.BYTES_LOCATION));
+		String back = new String((byte[]) retrieved.getBody().get());
 		Assert.assertEquals(contents,back);
 		_logger.info("Contents of retrieved msg equal original text <"+back+">");
 		
-		Object payload = retrieved.getBody().get();
+		Object payload = retrieved.getBody().get("exampleObj");
 		
 		Assert.assertEquals(payload instanceof ExampleObject, true);
 		

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/DefaultMessageURIGeneratorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/DefaultMessageURIGeneratorUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/DefaultMessageURIGeneratorUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -54,7 +54,7 @@
 		DefaultMessageURIGenerator dmurig = new DefaultMessageURIGenerator();
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
 			
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));
@@ -80,7 +80,7 @@
 		DefaultMessageURIGenerator dmurig = new DefaultMessageURIGenerator();
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
 			
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/JcrMessageURIGeneratorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/JcrMessageURIGeneratorUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/message/urigen/JcrMessageURIGeneratorUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -49,7 +49,7 @@
 		JcrMessageURIGenerator jmurig = new JcrMessageURIGenerator();
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
 		
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ByteArrayToStringUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ByteArrayToStringUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ByteArrayToStringUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -30,6 +30,7 @@
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.actions.ActionUtils;
 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;
 
@@ -44,17 +45,16 @@
 
 	public void test() throws ActionProcessingException
 	{
-		List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
+        ConfigTree config = new ConfigTree("config");
 
-		properties.add(new KeyValuePair("encoding", "UTF-8"));
-		ByteArrayToString byteArrayToString = new ByteArrayToString(
-				properties);
+        config.setAttribute("encoding", "UTF-8");
 
-		String sTest = "TestString";
+        ByteArrayToString byteArrayToString = new ByteArrayToString(config);
+        String sTest = "TestString";
 		Message msg = MessageFactory.getInstance().getMessage();
-		msg.getBody().add(ActionUtils.POST_ACTION_DATA, sTest.getBytes());
+		msg.getBody().add(sTest.getBytes());
 		byteArrayToString.process(msg);
-		String decodedBytes = (String)msg.getBody().get(ActionUtils.POST_ACTION_DATA);
+		String decodedBytes = (String)msg.getBody().get();
 		assertEquals(sTest, decodedBytes);
 	}
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/LongToDateConverter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/LongToDateConverter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/LongToDateConverter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -29,6 +29,10 @@
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * LongToDate Converter Test Action Handler.
@@ -39,17 +43,29 @@
 public class LongToDateConverter extends AbstractActionPipelineProcessor
 {
 	private Logger log = Logger.getLogger( LongToDateConverter.class );
+    private MessagePayloadProxy payloadProxy;
 
-	/*
+    public LongToDateConverter(ConfigTree config) {
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
+    }
+
+    /*
 	 * (non-Javadoc)
 	 * 
 	 * @see org.jboss.soa.esb.actions.ActionProcessor#processAction(java.lang.Object)
 	 */
 	public Message process(Message message) throws ActionProcessingException
 	{
-	    Object oCurr = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-	    
-		if (!(oCurr instanceof Long))
+        Object oCurr = null;
+        try {
+            oCurr = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
+        if (!(oCurr instanceof Long))
 		{
 			throw new ActionProcessingException(
 					"This action handler only accepts Long object instances.");
@@ -57,7 +73,7 @@
 		log.debug("LongToDateConverter");
 
         try { 
-            message.getBody().add(ActionUtils.POST_ACTION_DATA, new Date((Long)oCurr));
+            payloadProxy.setPayload(message, new Date((Long)oCurr));
             }
         catch (Exception e)
         { throw new ActionProcessingException(e); }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectInvokeTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectInvokeTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectInvokeTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -30,6 +30,7 @@
 import org.jboss.soa.esb.actions.MockPojoAction;
 import org.jboss.soa.esb.actions.MockPojoAction.MockPojo;
 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;
 import org.junit.Assert;
@@ -78,17 +79,18 @@
     }
 
     private Object test_invoke(String className, String methodName, Object param) throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
-        properties.add(new KeyValuePair("class-processor", className));
-        properties.add(new KeyValuePair("class-method", methodName));
+        ConfigTree config = new ConfigTree("config");
 
+        config.setAttribute("class-processor", className);
+        config.setAttribute("class-method", methodName);
+
         Message oMsg = MessageFactory.getInstance().getMessage();
         
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, param);
+        oMsg.getBody().add(param);
 
-        ObjectInvoke objectInvoke = new ObjectInvoke("ObjectInvoke",properties);
+        ObjectInvoke objectInvoke = new ObjectInvoke(config);
         objectInvoke.process(oMsg);
 
-        return oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        return oMsg.getBody().get();
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToCSVStringUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToCSVStringUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToCSVStringUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -32,6 +32,7 @@
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.actions.ActionUtils;
 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;
 
@@ -45,49 +46,50 @@
 	private Logger log = Logger.getLogger( ObjectToCSVStringUnitTest.class );
 
     public void test() throws ConfigurationException, ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
+        ConfigTree config;
         Message oMsg = MessageFactory.getInstance().getMessage();
         
         // Single value - property exist on bean...
-        properties.add(new KeyValuePair(ObjectToCSVString.BEAN_PROPERTIES_PROP, "name"));
-        ObjectToCSVString processor = new ObjectToCSVString("ObjectToCSVString", properties);
+        config = new ConfigTree("config");
+        config.setAttribute(ObjectToCSVString.BEAN_PROPERTIES_PROP, "name");
+        ObjectToCSVString processor = new ObjectToCSVString(config);
         
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean());
+        oMsg.getBody().add(new TestBean());
         oMsg = processor.process(oMsg);
-        assertEquals("Tom Fennelly", oMsg.getBody().get(ActionUtils.POST_ACTION_DATA));
+        assertEquals("Tom Fennelly", oMsg.getBody().get());
 
         // Multi value - properties all exist on bean...
-        properties.clear();
-        properties.add(new KeyValuePair(ObjectToCSVString.BEAN_PROPERTIES_PROP, "name,age"));
-        processor = new ObjectToCSVString("ObjectToCSVString", properties);
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean());
+        config = new ConfigTree("config");
+        config.setAttribute(ObjectToCSVString.BEAN_PROPERTIES_PROP, "name,age");
+        processor = new ObjectToCSVString(config);
+        oMsg.getBody().add(new TestBean());
         processor.process(oMsg);
-        assertEquals("Tom Fennelly,21", oMsg.getBody().get(ActionUtils.POST_ACTION_DATA));
+        assertEquals("Tom Fennelly,21", oMsg.getBody().get());
 
         // Multi value - some properties exist on bean and some don't...
-        properties.clear();
-        properties.add(new KeyValuePair(ObjectToCSVString.BEAN_PROPERTIES_PROP, "id,name,phone,age"));
-        processor = new ObjectToCSVString("ObjectToCSVString", properties);
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean());
+        config = new ConfigTree("config");
+        config.setAttribute(ObjectToCSVString.BEAN_PROPERTIES_PROP, "id,name,phone,age");
+        processor = new ObjectToCSVString(config);
+        oMsg.getBody().add(new TestBean());
         log.warn( "The following two error messages are intentional" );
         processor.process(oMsg);
-        assertEquals("<no-such-property>,Tom Fennelly,<no-such-property>,21", oMsg.getBody().get(ActionUtils.POST_ACTION_DATA));
+        assertEquals("<no-such-property>,Tom Fennelly,<no-such-property>,21", oMsg.getBody().get());
 
         // Single value - property doesn't exist on bean...
-        properties.clear();
-        properties.add(new KeyValuePair(ObjectToCSVString.BEAN_PROPERTIES_PROP, "id"));
-        processor = new ObjectToCSVString("ObjectToCSVString", properties);
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean());
+        config = new ConfigTree("config");
+        config.setAttribute(ObjectToCSVString.BEAN_PROPERTIES_PROP, "id");
+        processor = new ObjectToCSVString(config);
+        oMsg.getBody().add(new TestBean());
         log.warn( "The following error message is intentional" );
         processor.process(oMsg);
-        assertEquals("<no-such-property>", oMsg.getBody().get(ActionUtils.POST_ACTION_DATA));
+        assertEquals("<no-such-property>", oMsg.getBody().get());
 
         // Single value - property doesn't exist on bean and "fail-on-missing-property" action config is set on...
-        properties.clear();
-        properties.add(new KeyValuePair(ObjectToCSVString.BEAN_PROPERTIES_PROP, "id"));
-        properties.add(new KeyValuePair(ObjectToCSVString.FAIL_ON_MISSING_PROPERTY, "true"));
-        processor = new ObjectToCSVString("ObjectToCSVString", properties);
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean());
+        config = new ConfigTree("config");
+        config.setAttribute(ObjectToCSVString.BEAN_PROPERTIES_PROP, "id");
+        config.setAttribute(ObjectToCSVString.FAIL_ON_MISSING_PROPERTY, "true");
+        processor = new ObjectToCSVString(config);
+        oMsg.getBody().add(new TestBean());
         
         try {
 	        log.warn( "The following error message is intentional" );

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-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/ObjectToXStreamUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -31,6 +31,7 @@
 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;
 
@@ -45,14 +46,14 @@
 public class ObjectToXStreamUnitTest extends TestCase {
 
     public void test_default() throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
+        ConfigTree config = new ConfigTree("config");
+
+        ObjectToXStream objectToXStream = new ObjectToXStream(config);
         
-        ObjectToXStream objectToXStream = new ObjectToXStream("TestBean-Serialiser", properties);
-        
         Message oMsg = MessageFactory.getInstance().getMessage();
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean("Tom", "1234"));
+        oMsg.getBody().add(new TestBean("Tom", "1234"));
         oMsg = objectToXStream.process(oMsg);
-        String xml = (String)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        String xml = (String)oMsg.getBody().get();
         XStream xstream = new XStream(new DomDriver());
         TestBean bean = new TestBean();
 
@@ -65,15 +66,15 @@
     }
 
     public void test_with_package() throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
+        ConfigTree config = new ConfigTree("config");
         
-        properties.add(new KeyValuePair("exclude-package", "false"));
-        ObjectToXStream objectToXStream = new ObjectToXStream("TestBean-Serialiser", properties);
+        config.setAttribute("exclude-package", "false");
+        ObjectToXStream objectToXStream = new ObjectToXStream(config);
         
         Message oMsg = MessageFactory.getInstance().getMessage();
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean("Tom", "1234"));
+        oMsg.getBody().add(new TestBean("Tom", "1234"));
         objectToXStream.process(oMsg);
-        String xml = (String)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        String xml = (String)oMsg.getBody().get();
 
         XStream xstream = new XStream(new DomDriver());
         TestBean bean = new TestBean();
@@ -86,15 +87,15 @@
     }
 
     public void test_with_alias() throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
+        ConfigTree config = new ConfigTree("config");
+
+        config.setAttribute("class-alias", "TomsClass");
+        ObjectToXStream objectToXStream = new ObjectToXStream(config);
         
-        properties.add(new KeyValuePair("class-alias", "TomsClass"));
-        ObjectToXStream objectToXStream = new ObjectToXStream("TestBean-Serialiser", properties);
-        
         Message oMsg = MessageFactory.getInstance().getMessage();
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, new TestBean("Tom", "1234"));
+        oMsg.getBody().add(new TestBean("Tom", "1234"));
         objectToXStream.process(oMsg);
-        String xml = (String)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        String xml = (String)oMsg.getBody().get();
 
         XStream xstream = new XStream(new DomDriver());
         xstream.alias("TomsClass", TestBean.class);

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/StringToLongConverter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/StringToLongConverter.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/StringToLongConverter.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -26,6 +26,10 @@
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 
 /**
  * StringToLong Converter Test Action Handler.
@@ -33,22 +37,38 @@
  * @since Version 4.0
  */
 public class StringToLongConverter extends AbstractActionPipelineProcessor {
+    private MessagePayloadProxy payloadProxy;
 
+    public StringToLongConverter(ConfigTree config) {
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
+    }
+
     /* (non-Javadoc)
      * @see org.jboss.soa.esb.actions.ActionProcessor#processAction(java.lang.Object)
      */
     public Message process(Message message) throws ActionProcessingException {
-    	Object oCurr = message.getBody().get(ActionUtils.POST_ACTION_DATA);
+        Object oCurr = null;
+
+        try {
+            oCurr = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
         if(!(oCurr instanceof String)) {
             throw new ActionProcessingException("This action handler only accepts String object instances.");
         }
         
-        System.out.println("StringToLongConverter");
         try {
-            message.getBody().add(ActionUtils.POST_ACTION_DATA, new Long((String)oCurr));
+            payloadProxy.setPayload(message, new Long((String)oCurr));
+        } catch (NumberFormatException e) {
+            throw new ActionProcessingException("'" + oCurr + "' is not a valid long value.");
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
         }
-        catch (Exception e)
-        { throw new ActionProcessingException(e); }
+
         return message;
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/XStreamToObjectUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/XStreamToObjectUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/converters/XStreamToObjectUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -57,19 +57,20 @@
 	
 	@Test
     public void test_default() throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
-        properties.add(new KeyValuePair("incoming-type",TestBean.class.getName() ));
+        ConfigTree config = new ConfigTree("config");
+
+        config.setAttribute("incoming-type",TestBean.class.getName());
         
-        XStreamToObject xstreamToObject = new XStreamToObject("IntroductionsAnnotationReaderUnitTest-Serialiser", properties);
+        XStreamToObject xstreamToObject = new XStreamToObject(config);
 
         Message oMsg = MessageFactory.getInstance().getMessage();
 
         String msg = "<" + TestBean.class.getSimpleName() + "> <name>Tom</name><phone>1234</phone></" + TestBean.class.getSimpleName() + ">";
         
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, msg);
+        oMsg.getBody().add(msg);
         oMsg = xstreamToObject.process(oMsg);
        
-        TestBean bean = (TestBean)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        TestBean bean = (TestBean)oMsg.getBody().get();
   
         assertEquals("Tom", bean.getName());
         assertEquals("1234", bean.getPhone());
@@ -78,20 +79,20 @@
 
 	@Test
     public void test_with_package() throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
-        properties.add(new KeyValuePair("exclude-package", "false"));
-        properties.add(new KeyValuePair("incoming-type",TestBean.class.getName() ));
-        
-        XStreamToObject xstreamToObject = new XStreamToObject("IntroductionsAnnotationReaderUnitTest-Serialiser", properties);
+        ConfigTree config = new ConfigTree("config");
 
+        config.setAttribute("exclude-package", "false");
+        config.setAttribute("incoming-type", TestBean.class.getName());
+        XStreamToObject xstreamToObject = new XStreamToObject(config);
+
         Message oMsg = MessageFactory.getInstance().getMessage();
         
         String msg = "<" + TestBean.class.getName() + "> <name>Tom</name><phone>1234</phone></"+ TestBean.class.getName() +">";
         
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, msg);
+        oMsg.getBody().add(msg);
         oMsg = xstreamToObject.process(oMsg);
        
-        TestBean bean = (TestBean)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        TestBean bean = (TestBean)oMsg.getBody().get();
   
         assertEquals("Tom", bean.getName());
         assertEquals("1234", bean.getPhone());
@@ -100,22 +101,22 @@
 
 	@Test
     public void test_with_alias() throws ActionProcessingException {
-        List<KeyValuePair> properties = new ArrayList<KeyValuePair>();
+        ConfigTree config = new ConfigTree("config");
+
+        config.setAttribute("class-alias", "TomsClass");
+        config.setAttribute("exclude-package", "false");
+        config.setAttribute("incoming-type", TestBean.class.getName());
         
-        properties.add(new KeyValuePair("class-alias", "TomsClass"));
-        properties.add(new KeyValuePair("exclude-package", "false"));
-        properties.add(new KeyValuePair("incoming-type",TestBean.class.getName() ));
-        
-        XStreamToObject xstreamToObject = new XStreamToObject("IntroductionsAnnotationReaderUnitTest-Serialiser", properties);
+        XStreamToObject xstreamToObject = new XStreamToObject(config);
 
         Message oMsg = MessageFactory.getInstance().getMessage();
         
         String msg = "<TomsClass><name>Tom</name><phone>1234</phone></TomsClass>";
         
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, msg);
+        oMsg.getBody().add(msg);
         oMsg = xstreamToObject.process(oMsg);
        
-        TestBean bean = (TestBean)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        TestBean bean = (TestBean)oMsg.getBody().get();
   
         assertEquals("Tom", bean.getName());
         assertEquals("1234", bean.getPhone());
@@ -165,10 +166,10 @@
         
         String msg = "<TomsClass><name>Tom</name><phone>1234</phone></TomsClass>";
         
-        oMsg.getBody().add(ActionUtils.POST_ACTION_DATA, msg);
+        oMsg.getBody().add(msg);
         oMsg = xstreamToObject.process(oMsg);
        
-        TestBean bean = (TestBean)oMsg.getBody().get(ActionUtils.POST_ACTION_DATA);
+        TestBean bean = (TestBean)oMsg.getBody().get();
   
         assertEquals("Tom", bean.getName());
         assertEquals("1234", bean.getPhone());

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/FileNameGeneratorActionUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/FileNameGeneratorActionUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/FileNameGeneratorActionUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -67,7 +67,7 @@
 		
 		// Test processing a message
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/AddTimestampNamingStrategyUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/AddTimestampNamingStrategyUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/AddTimestampNamingStrategyUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -46,7 +46,7 @@
 	public void testProcess() {
 		AddTimestampNamingStrategy atns = new AddTimestampNamingStrategy();
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/ChangeSuffixNamingStrategyUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/ChangeSuffixNamingStrategyUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/naming/strategy/ChangeSuffixNamingStrategyUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -48,7 +48,7 @@
 	public void testProcess() {
 		ChangeSuffixNamingStrategy csns = new ChangeSuffixNamingStrategy();
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-		msg1.getBody().add("foo", "bar");
+		msg1.getBody().add("bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/EchoRouterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/EchoRouterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/EchoRouterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -27,6 +27,7 @@
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.helpers.ConfigTree;
 
 public class EchoRouterUnitTest extends TestCase
 {
@@ -36,10 +37,10 @@
 
 	public void testRouter () throws Exception
 	{
-		EchoRouter router = new EchoRouter(null);
+		EchoRouter router = new EchoRouter(new ConfigTree("config"));
 		Message msg = MessageFactory.getInstance().getMessage();
 		
-		msg.getBody().add(BytesBody.BYTES_LOCATION, "hello world".getBytes());
+		msg.getBody().add("hello world".getBytes());
 		
 		router.process(msg);
 	}

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/HttpRouterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/HttpRouterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/HttpRouterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -46,7 +46,7 @@
 	@Before
 	public void setUp()
 	{
-		msg.getBody().add(BytesBody.BYTES_LOCATION, "hello world".getBytes());
+		msg.getBody().add("hello world".getBytes());
 	}
 	
 	
@@ -72,7 +72,7 @@
 		
 		Message msg = MessageFactory.getInstance().getMessage();
 		
-		msg.getBody().add(BytesBody.BYTES_LOCATION, "hello world".getBytes());
+		msg.getBody().add("hello world".getBytes());
 		
 		boolean exception = false;
 		

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/JmsRouterIntegrationTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/JmsRouterIntegrationTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/routing/JmsRouterIntegrationTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -167,7 +167,7 @@
 		
 		Message msg = MessageFactory.getInstance().getMessage();
 		
-		msg.getBody().add(BytesBody.BYTES_LOCATION, "hello world".getBytes());
+		msg.getBody().add("hello world".getBytes());
 		JMSRouter router = new JMSRouter( createConfigTree() );
 		try
 		{
@@ -185,7 +185,7 @@
 		
 		try
 		{
-			msg.getBody().add(ActionUtils.POST_ACTION_DATA, "hello world");
+			msg.getBody().add("hello world");
 			router.process(msg);
 		}
 		catch (ActionProcessingException ex)
@@ -274,13 +274,8 @@
 		public MockJMSRouter(ConfigTree propertiesTree) throws ConfigurationException, NamingException, JMSException
 		{
 			super( propertiesTree );
-		}
+        }
 
-		public MockJMSRouter(String actionName, List<KeyValuePair> properties) throws ConfigurationException
-		{
-			super( actionName, properties );
-		}
-
 		@Override
 		protected void createQueueSetup( String queueName ) throws ConfigurationException { }
 
@@ -316,7 +311,7 @@
 	{
 		Message msg = MessageFactory.getInstance().getMessage();
 		msg.getHeader().getCall().setMessageID( new URI ( "1234-junittest" ) );
-		msg.getBody().add(BytesBody.BYTES_LOCATION, body.getBytes());
+		msg.getBody().add(body.getBytes());
 		return msg;
 	}
 	

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/GroovyActionProcessorUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -58,8 +58,8 @@
         Message message = MessageFactory.getInstance().getMessage();
 
         // Set the script as the message task object...
-        ActionUtils.setTaskObject(message, "import org.jboss.soa.esb.message.*\n" +
-                "message.getBody().add(org.jboss.soa.esb.message.body.content.BytesBody.BYTES_LOCATION, config.getAttribute(\"messageContents\").getBytes());");
+        message.getBody().add("import org.jboss.soa.esb.message.*\n" +
+                "message.getBody().add(config.getAttribute(\"messageContents\").getBytes());");
 
         assertProcessingOK(processor, message, messageContents);
     }
@@ -67,7 +67,7 @@
     private void assertProcessingOK(GroovyActionProcessor processor, Message message, String messageContents) throws ActionLifecycleException, ActionProcessingException {
         processor.initialise();
         processor.process(message);
-        byte[] bodyContents = (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION);
+        byte[] bodyContents = (byte[]) message.getBody().get();
         assertNotNull("Expected body contents to be set.", bodyContents);
         assertEquals(messageContents, new String(bodyContents));
     }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/test.groovy
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/test.groovy	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/scripting/test.groovy	2007-10-17 08:47:44 UTC (rev 15872)
@@ -1,3 +1,3 @@
 import org.jboss.soa.esb.message.*
 
-message.getBody().add(org.jboss.soa.esb.message.body.content.BytesBody.BYTES_LOCATION, config.getAttribute("messageContents").getBytes());
\ No newline at end of file
+message.getBody().add(config.getAttribute("messageContents").getBytes());
\ No newline at end of file

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templates/MockActionUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templates/MockActionUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templates/MockActionUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -34,7 +34,7 @@
 		MockAction action = new MockAction();
 		Message msg = MessageFactory.getInstance().getMessage();
 		
-		msg.getBody().add("Hello", "World");
+		msg.getBody().add("World");
 		
 		action.process(msg);
 	}

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessorUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/templating/StringTemplateProcessorUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -5,6 +5,8 @@
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Map;
+import java.util.HashMap;
 
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.addressing.eprs.HTTPEpr;
@@ -40,7 +42,18 @@
 		StringTemplateProcessor stp = new StringTemplateProcessor(confTree);
 		
 		Message msg1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-		msg1.getBody().add("foo", "bar");
+
+        Map beans = new HashMap();
+        Map orderItem = new HashMap();
+        beans.put("orderItem", orderItem);
+        orderItem.put("position", orderItem);
+        orderItem.put("quantity", orderItem);
+        orderItem.put("productId", orderItem);
+        orderItem.put("title", orderItem);
+        orderItem.put("price", orderItem);
+
+        //msg1.getBody().add(beans);
+        msg1.getBody().add("foo", "bar");
 		try {
 			msg1.getHeader().getCall().setTo(new HTTPEpr("http://foo.bar"));
 			msg1.getHeader().getCall().setMessageID(new URI("urn:1234"));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFileReplyToEprUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFileReplyToEprUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFileReplyToEprUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -101,7 +101,7 @@
         	Message outgoingMsg = MessageFactory.getInstance().getMessage();
         	outgoingMsg.getHeader().getCall().setTo(toEpr);
         	outgoingMsg.getHeader().getCall().setReplyTo(replyToEpr);
-        	outgoingMsg.getBody().add(BytesBody.BYTES_LOCATION, text_1.getBytes());
+        	outgoingMsg.getBody().add(text_1.getBytes());
         	CourierUtil.deliverMessage(outgoingMsg);
 
         	// Mock a service that picks up the original message and replies
@@ -110,7 +110,7 @@
         	serviceEpr.setPostDelete(true);
         	PickUpOnlyCourier listener = CourierFactory.getPickupCourier(serviceEpr);
         	Message received = listener.pickup(100);
-        	String text_2 = new String((byte[]) received.getBody().get(BytesBody.BYTES_LOCATION));
+        	String text_2 = new String((byte[]) received.getBody().get());
         	assertTrue(text_1.equals(text_2));
         	assertTrue(replyToEpr.equals(received.getHeader().getCall().getReplyTo()));
         	
@@ -118,13 +118,13 @@
         	text_2	+= " + processed by listener";
         	Message response = MessageFactory.getInstance().getMessage();
         	response.getHeader().getCall().setTo(received.getHeader().getCall().getReplyTo());
-        	response.getBody().add(BytesBody.BYTES_LOCATION, text_2.getBytes());
+        	response.getBody().add(text_2.getBytes());
         	CourierUtil.deliverMessage(response);
         	
         	// try to pick up reply
         	PickUpOnlyCourier waiter = CourierFactory.getPickupCourier(replyToEpr);
         	Message finalMsg = waiter.pickup(100);
-        	assertTrue(text_2.equals(new String((byte[]) finalMsg.getBody().get(BytesBody.BYTES_LOCATION))));
+        	assertTrue(text_2.equals(new String((byte[]) finalMsg.getBody().get())));
         	
         	_logger.info(text_2+"... and back from local filesystem");
         	_logger.info("getDefaultReplyToEpr test succeeded for local file transport");

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFtpReplyToEprIntegrationTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFtpReplyToEprIntegrationTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultFtpReplyToEprIntegrationTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -102,7 +102,7 @@
         	Message outgoingMsg = MessageFactory.getInstance().getMessage();
         	outgoingMsg.getHeader().getCall().setTo(toEpr);
         	outgoingMsg.getHeader().getCall().setReplyTo(replyToEpr);
-        	outgoingMsg.getBody().add(BytesBody.BYTES_LOCATION, text_1.getBytes());
+        	outgoingMsg.getBody().add(text_1.getBytes());
         	CourierUtil.deliverMessage(outgoingMsg);
 
         	// Mock a service that picks up the original message and replies
@@ -111,7 +111,7 @@
         	serviceEpr.setPostDelete(true);
         	PickUpOnlyCourier listener = CourierFactory.getPickupCourier(serviceEpr);
         	Message received = listener.pickup(100);
-        	String text_2 = new String((byte[]) received.getBody().get(BytesBody.BYTES_LOCATION));
+        	String text_2 = new String((byte[]) received.getBody().get());
         	assertTrue(text_1.equals(text_2));
         	assertTrue(replyToEpr.equals(received.getHeader().getCall().getReplyTo()));
         	
@@ -119,13 +119,13 @@
         	text_2	+= " + processed by listener";
         	Message response = MessageFactory.getInstance().getMessage();
         	response.getHeader().getCall().setTo(received.getHeader().getCall().getReplyTo());
-        	response.getBody().add(BytesBody.BYTES_LOCATION, text_2.getBytes());
+        	response.getBody().add(text_2.getBytes());
         	CourierUtil.deliverMessage(response);
         	
         	// try to pick up reply
         	PickUpOnlyCourier waiter = CourierFactory.getPickupCourier(replyToEpr);
         	Message finalMsg = waiter.pickup(100);
-        	assertTrue(text_2.equals(new String((byte[]) finalMsg.getBody().get(BytesBody.BYTES_LOCATION))));
+        	assertTrue(text_2.equals(new String((byte[]) finalMsg.getBody().get())));
         	
         	_logger.info(text_2+"... and back from FTP server");
         	_logger.info("getDefaultReplyToEpr test succeeded for FTP transport");

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultJdbcReplyToEprUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultJdbcReplyToEprUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/tests/DefaultJdbcReplyToEprUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -132,14 +132,14 @@
         	Message outgoingMsg = MessageFactory.getInstance().getMessage();
         	outgoingMsg.getHeader().getCall().setTo(toEpr);
         	outgoingMsg.getHeader().getCall().setReplyTo(replyToEpr);
-        	outgoingMsg.getBody().add(BytesBody.BYTES_LOCATION, text_1.getBytes());
+        	outgoingMsg.getBody().add(text_1.getBytes());
         	CourierUtil.deliverMessage(outgoingMsg);
 
         	// Mock a service that picks up the original message and replies
         	JDBCEpr serviceEpr = getEpr("foo");
         	PickUpOnlyCourier listener = CourierFactory.getPickupCourier(serviceEpr);
         	Message received = listener.pickup(100);
-        	String text_2 = new String((byte[]) received.getBody().get(BytesBody.BYTES_LOCATION));
+        	String text_2 = new String((byte[]) received.getBody().get());
         	assertTrue(text_1.equals(text_2));
 //        	assertTrue(replyToEpr.equals(received.getHeader().getCall().getReplyTo()));
         	
@@ -147,13 +147,13 @@
         	text_2	+= " + processed by listener";
         	Message response = MessageFactory.getInstance().getMessage();
         	response.getHeader().getCall().setTo(received.getHeader().getCall().getReplyTo());
-        	response.getBody().add(BytesBody.BYTES_LOCATION, text_2.getBytes());
+        	response.getBody().add(text_2.getBytes());
         	CourierUtil.deliverMessage(response);
         	
         	// try to pick up reply
         	PickUpOnlyCourier waiter = CourierFactory.getPickupCourier(replyToEpr);
         	Message finalMsg = waiter.pickup(100);
-        	assertTrue(text_2.equals(new String((byte[]) finalMsg.getBody().get(BytesBody.BYTES_LOCATION))));
+        	assertTrue(text_2.equals(new String((byte[]) finalMsg.getBody().get())));
         	
         	_logger.info(text_2+"... and back from jdbc ReplyTo EPR");
         	_logger.info("getDefaultReplyToEpr test succeeded for JDBC message transport");

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerBaseTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerBaseTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerBaseTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -254,7 +254,7 @@
 
 		public Message notifyTest(Message message) throws Exception
 		{
-			addMessage((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+			addMessage((byte[]) message.getBody().get());
 
 			return message;
 		}

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFTPIntegrationTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFTPIntegrationTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFTPIntegrationTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -86,7 +86,7 @@
 		
 		Message message = MessageFactory.getInstance().getMessage();
 		message.getHeader().setCall(new Call(toEPR));
-		message.getBody().add(BytesBody.BYTES_LOCATION, THE_TEXT.getBytes());
+		message.getBody().add(THE_TEXT.getBytes());
 		
 		for (int i1 = 0; i1 < howMany; i1++)
 		{

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFileUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFileUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerFileUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -118,7 +118,7 @@
 		
 		Message message = MessageFactory.getInstance().getMessage();
 		message.getHeader().setCall(new Call(toEPR));
-		message.getBody().add(BytesBody.BYTES_LOCATION, THE_TEXT.getBytes());
+		message.getBody().add(THE_TEXT.getBytes());
 		
 		for (int i1 = 0; i1 < howMany; i1++)
 		{

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJDBCUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJDBCUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJDBCUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -112,7 +112,7 @@
 		
 		Message message = MessageFactory.getInstance().getMessage();
 		message.getHeader().setCall(new Call(toEPR));
-		message.getBody().add(BytesBody.BYTES_LOCATION, THE_TEXT.getBytes());
+		message.getBody().add(THE_TEXT.getBytes());
 		
 		for (int i1 = 0; i1 < howMany; i1++)
 		{

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJMSXntegrationTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJMSXntegrationTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/ListenerManagerJMSXntegrationTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -100,7 +100,7 @@
 		
 		Message message = MessageFactory.getInstance().getMessage();
 		message.getHeader().setCall(new Call(toEPR));
-		message.getBody().add(BytesBody.BYTES_LOCATION, THE_TEXT.getBytes());
+		message.getBody().add(THE_TEXT.getBytes());
 		
 		for (int i1 = 0; i1 < howMany; i1++)
 		{

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListenerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListenerUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListenerUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -115,10 +115,11 @@
 		
 		gateway.onSchedule();
 		
-		LocalFileMessageComposer<File> f = new LocalFileMessageComposer<File>();
+		LocalFileMessageComposer<File> messageComposer = new LocalFileMessageComposer<File>();
 
         try {
-            f.compose(new File("hello"));
+            messageComposer.setConfiguration(new ConfigTree("config"));
+            messageComposer.compose(new File("hello"));
             fail("Expected exception on non-existant file.");
         } catch(MessageDeliverException e) {
             // expected
@@ -137,13 +138,13 @@
 			stream.write(testString.getBytes());
 			stream.close();
 
-			Message message = f.compose(testFile);
+			Message message = messageComposer.compose(testFile);
 			
 			File nFile = null;
 			
 			try
 			{
-				byte[] content = (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION);
+				byte[] content = (byte[]) message.getBody().get();
 				String value = new String(content);
 				
 				if (!value.equals(testString))
@@ -189,9 +190,8 @@
 		}
 		catch (Throwable ex)
 		{
-			log.error(ex);
-			
-			fail();
+			ex.printStackTrace();
+			fail(ex.getMessage());
 		}
 		finally
 		{

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GatewayFilterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GatewayFilterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GatewayFilterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -72,7 +72,7 @@
     {
 	ConfigTree config = new ConfigTree("test");
 	Message msg = MessageFactory.getInstance().getMessage();
-	msg.getBody().add(BytesBody.BYTES_LOCATION, "Hello World".getBytes());
+	msg.getBody().add("Hello World".getBytes());
 
 	Map<String, Object> params = new HashMap<String, Object>();
 

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GroovyGatewayUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GroovyGatewayUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/GroovyGatewayUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -103,7 +103,9 @@
 
         protected UncomposedMessageDeliveryAdapter createDeliveryAdapter() throws ConfigurationException {
             try {
-                return new UncomposedMessageDeliveryAdapter("x", "y", new BasicMessageComposer());
+                BasicMessageComposer composer = new BasicMessageComposer();
+                composer.setConfiguration(getConfig());
+                return new UncomposedMessageDeliveryAdapter("x", "y", composer);
             } catch (MessageDeliverException e) {
                 fail(e.getMessage());
             }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListenerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListenerUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListenerUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -218,7 +218,7 @@
             assertEquals("<ack/>", response);
 
             // Make sure the courier payload after matches the input...
-            Object courierPayloadAfter = courier2.message.getBody().get(ActionUtils.POST_ACTION_DATA);
+            Object courierPayloadAfter = courier2.message.getBody().get();
             assertEquals(messagePayload, courierPayloadAfter);
         } finally {
             if(remotingClient != null) {

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContentsUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContentsUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/PackageJmsMessageContentsUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -41,7 +41,10 @@
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.eprs.JMSEpr;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockejb.jms.MockQueue;
@@ -69,13 +72,15 @@
 	@Before
 	public void setup()
 	{
-		packer = new PackageJmsMessageContents();
+        ConfigTree emptyConfig = new ConfigTree("empty");
+        MessagePayloadProxy proxy = PackageJmsMessageContents.createPayloadProxy(emptyConfig);
+        
+        packer = new PackageJmsMessageContents(proxy);
 		objectMsg = new ObjectMessageImpl();
 	}
 	
 	@Test
-	public void process_ObjectMessage() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_ObjectMessage() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		objectMsg.setObject( messageContent );
 		Message message = packer.process( objectMsg );
 		
@@ -85,12 +90,11 @@
 		assertTrue ( object instanceof String );
 		assertEquals (  String.class.getName(), object.getClass().getName() );
 		
-		assertEquals ( messageContent, new String ( (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION) ) );
+		assertEquals ( messageContent, message.getBody().get());
 	}
 	
 	@Test
-	public void process_ObjectMessage_HashMap() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_ObjectMessage_HashMap() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		final String key = "testkey";
 		final String value = "testvalue";
 		HashMap<String,String> hashMap = new HashMap<String,String>();
@@ -109,8 +113,7 @@
 	}
 	
 	@Test
-	public void process_TextMessage() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_TextMessage() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		TextMessageImpl textMessage = new TextMessageImpl();
 		textMessage.setText( messageContent );
 		Message message = packer.process( textMessage );
@@ -124,8 +127,7 @@
 	}
 	
 	@Test
-	public void process_BytesMessage() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_BytesMessage() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		MockBytesMessage byteMessage = new MockBytesMessage();
 		
 		Message message = packer.process( byteMessage );
@@ -135,21 +137,19 @@
 	}
 	
 	@Test
-	public void process_with_JMSMessageID() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_with_JMSMessageID() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		objectMsg.setObject( messageContent );
 		objectMsg.setJMSMessageID( jmsMessageID );
 		
 		Message message = packer.process( objectMsg );
 		
-		final String actualContent = new String ( (byte[]) message.getBody().get(BytesBody.BYTES_LOCATION) );
+		final String actualContent = (String)message.getBody().get();
 		assertEquals ( messageContent, actualContent );
 		assertEquals ( new URI( jmsMessageID ), message.getHeader().getCall().getMessageID()  );
 	}
 	
 	@Test
-	public void process_with_JMSCorrelationID() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_with_JMSCorrelationID() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		objectMsg.setObject( messageContent );
 		objectMsg.setJMSCorrelationID( jmsCorrelationID );
 		
@@ -159,8 +159,7 @@
 	}
 	
 	@Test
-	public void process_with_Properties() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_with_Properties() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		final String propertyKey = "myProperty";
 		final String propertyValue = "myPropertyValue";
 		objectMsg.setObject( messageContent );
@@ -172,8 +171,7 @@
 	}
 	
 	@Test
-	public void process_with_JMSReplyTo() throws JMSException, IOException, URISyntaxException
-	{
+	public void process_with_JMSReplyTo() throws JMSException, IOException, URISyntaxException, MessageDeliverException {
 		objectMsg.setObject( messageContent );
 		MockQueue jmsReplyToQueue = new MockQueue( "mockReplyToQueueName");
 		objectMsg.setJMSReplyTo( jmsReplyToQueue );
@@ -197,7 +195,7 @@
 	 */
 	private void assertThatByteArrayHasBeenSet( Message esbMessage )
 	{
-		assertNotNull ("byte array must always be set regardless of the type of JMS Message", esbMessage.getBody().get(BytesBody.BYTES_LOCATION) );
+		assertNotNull ("byte array must always be set regardless of the type of JMS Message", esbMessage.getBody().get() );
 	}
 	
 	/**

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/ReadOnlyRemoteGatewayListenerIntegrationTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/ReadOnlyRemoteGatewayListenerIntegrationTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/gateway/ReadOnlyRemoteGatewayListenerIntegrationTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -106,7 +106,7 @@
 		assertTrue( "The test file was not included in the List! " , fileList.contains( new File ( testFile.getName() )  ));
 	}
 	
-	@Test ( timeout=3000 )
+	@Test ( timeout=10000 )
 	public void doRun_PostDir_Same_As_InputDir() throws ManagedLifecycleException, ConfigurationException, GatewayException, RegistryException, InterruptedException
 	{
 		setAbsoluteInputDir();

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -35,6 +35,7 @@
 import org.jboss.soa.esb.addressing.MalformedEPRException;
 import org.jboss.soa.esb.couriers.CourierException;
 import org.jboss.soa.esb.services.registry.RegistryException;
+import org.jboss.soa.esb.helpers.ConfigTree;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -59,7 +60,8 @@
     private static MockCourier courier4;
     private static UncomposedMessageDeliveryAdapter deliveryAdapter;
     private String payload = "*XX*";
-    
+    private BasicMessageComposer composer;
+
     @Before
     public void setUp() throws Exception {
         MockCourierFactory.install();
@@ -78,8 +80,10 @@
         MockRegistry.register("cat", "service", epr2, courier2);
         MockRegistry.register("cat", "service", epr3, courier3);
         MockRegistry.register("cat", "service", epr4, courier4);
-        
-        deliveryAdapter = new UncomposedMessageDeliveryAdapter("cat", "service", new MockMessageComposer());
+
+        composer = new BasicMessageComposer();
+        composer.setConfiguration(new ConfigTree("config"));
+        deliveryAdapter = new UncomposedMessageDeliveryAdapter("cat", "service", composer);
     }
     @After
     public void tearDown() throws Exception {
@@ -120,7 +124,7 @@
     public void test_No_EPRs() throws RegistryException, MessageDeliverException {
         // Make sure there's no attempt to make a delivery when there's no
         // EPRs for the service.
-        deliveryAdapter = new UncomposedMessageDeliveryAdapter("x", "y", new MockMessageComposer());
+        deliveryAdapter = new UncomposedMessageDeliveryAdapter("x", "y", composer);
         try {
             deliveryAdapter.deliverAsync(payload);
             fail("Expected MessageDeliverException");
@@ -139,11 +143,11 @@
             assertEquals(null, courier1.message);
             assertEquals(null, courier2.message);
             assertEquals(null, courier3.message);
-            assertEquals(payload, courier4.message.getBody().get(ActionUtils.POST_ACTION_DATA));
+            assertEquals(payload, courier4.message.getBody().get());
     
             String payload2 = "*YYY*";
             deliveryAdapter.deliverAsync(payload2);
-            assertEquals(payload2, courier4.message.getBody().get(ActionUtils.POST_ACTION_DATA));
+            assertEquals(payload2, courier4.message.getBody().get());
         } catch(RegistryException re) {
             fail("RegistryException");
         }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MockMessageComposer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MockMessageComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MockMessageComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -9,12 +9,10 @@
 
 /**
  * @author kstam
- *
+ * @deprecated Use {@link org.jboss.soa.esb.listeners.message.BasicMessageComposer}
  */
 public class MockMessageComposer extends AbstractMessageComposer {
-    public void setConfiguration(ConfigTree config) {
-    }
     public void populateMessage(Message message, Object messagePayload) throws MessageDeliverException {
-        ActionUtils.setTaskObject(message, messagePayload);
+        getPayloadProxy().setPayload(message, messagePayload);
     }
 }

Added: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/MessagePayloadProxyUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/MessagePayloadProxyUnitTest.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/MessagePayloadProxyUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -0,0 +1,136 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.message;
+
+import junit.framework.TestCase;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.actions.ActionUtils;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class MessagePayloadProxyUnitTest extends TestCase {
+
+    public void test_non_legacy() throws MessageDeliverException {
+        Message message = MessageFactory.getInstance().getMessage();
+        ConfigTree config = new ConfigTree("x");
+        MessagePayloadProxy proxy;
+
+        proxy = new MessagePayloadProxy(config);
+        
+        // Test normal flow....
+        proxy.setPayload(message, "Hi");
+        assertEquals("Hi", message.getBody().get());
+        assertEquals("Hi", proxy.getPayload(message));
+
+        // Test overriding the get/set location on the message...
+        config.setAttribute(MessagePayloadProxy.GET_PAYLOAD_LOCATION, "message-loc");
+        config.setAttribute(MessagePayloadProxy.SET_PAYLOAD_LOCATION, "message-loc");
+        proxy = new MessagePayloadProxy(config);
+        proxy.setPayload(message, "Hi");
+        assertEquals("Hi", message.getBody().get("message-loc"));
+        assertEquals("Hi", proxy.getPayload(message));
+
+        // Test for no exception on null set...
+        proxy.setPayload(message, null);
+
+        // Test for exception on null get...
+        try {
+            proxy.getPayload(message);
+            fail("Expected MessageDeliverException");
+        } catch(MessageDeliverException e) {
+            assertEquals("Null data found in message location(s): [message-loc]", e.getMessage());
+        }
+
+        // Now change the Null get Handling config so as there's no exception...
+        proxy.setNullGetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.NONE);
+        proxy.getPayload(message);
+
+        // Now change the Null set Handling config so as there is an exception...
+        proxy.setNullSetPayloadHandling(MessagePayloadProxy.NullPayloadHandling.EXCEPTION);
+        try {
+            proxy.setPayload(message, null);
+            fail("Expected MessageDeliverException");
+        } catch(MessageDeliverException e) {
+            assertEquals("Setting null data in message location(s): [message-loc]", e.getMessage());
+        }
+    }
+
+    public void test_legacy() throws MessageDeliverException, UnsupportedEncodingException {
+        Message message = MessageFactory.getInstance().getMessage();
+        ConfigTree config = new ConfigTree("x");
+        MessagePayloadProxy proxy;
+
+        MessagePayloadProxy.setUseLegacyPatterns(true);
+
+        String stringObj = "Hi";
+        
+        // Multiple get and set locations...
+        proxy = new MessagePayloadProxy(config,
+                                        new String[] {ActionUtils.POST_ACTION_DATA, BytesBody.BYTES_LOCATION},
+                                        new String[] {ActionUtils.POST_ACTION_DATA, BytesBody.BYTES_LOCATION});
+        proxy.setPayload(message, stringObj);
+        assertTrue(message.getBody().get(ActionUtils.POST_ACTION_DATA) == stringObj);
+        assertTrue(proxy.getPayload(message) == stringObj);
+        assertTrue(message.getBody().get(BytesBody.BYTES_LOCATION) instanceof byte[]);
+        assertEquals("text/plain", message.getProperties().getProperty(MessagePayloadProxy.MIME_TYPE));
+        assertEquals("Hi", new String((byte[])message.getBody().get(BytesBody.BYTES_LOCATION), "UTF-8"));
+
+        // Check that setting null clears everything...
+        proxy.setPayload(message, null);
+        assertTrue(message.getBody().get(ActionUtils.POST_ACTION_DATA) == null);
+        assertTrue(message.getBody().get(BytesBody.BYTES_LOCATION) == null);
+
+        // BytesBody.BYTES_LOCATION as the "primary" location...
+        proxy = new MessagePayloadProxy(config,
+                                        new String[] {BytesBody.BYTES_LOCATION},
+                                        new String[] {BytesBody.BYTES_LOCATION});
+        proxy.setPayload(message, stringObj);
+        // So the String should be stored as a byte[] in BytesBody.BYTES_LOCATION,
+        // But proxy.getPayload() should decode the bytes into a String because the
+        // mime type is set to "text/plain".
+        assertTrue(message.getBody().get(BytesBody.BYTES_LOCATION) instanceof byte[]);
+        assertEquals("text/plain", message.getProperties().getProperty(MessagePayloadProxy.MIME_TYPE));
+        assertTrue(proxy.getPayload(message) instanceof String);
+        assertEquals("Hi", proxy.getPayload(message));
+
+        // Now try a different Object type (non String).  The functionality being tested here is highly
+        // suspect, but we still need to maintain backward compatibility to it...
+        proxy.setPayload(message, 123);
+        assertTrue(message.getBody().get(BytesBody.BYTES_LOCATION) instanceof byte[]);
+        assertEquals("java/java.lang.Integer", message.getProperties().getProperty(MessagePayloadProxy.MIME_TYPE));
+        assertTrue(proxy.getPayload(message) instanceof byte[]);
+    }
+
+    public void test_nonbytes_to_byteslocation() {
+        Message message = MessageFactory.getInstance().getMessage();
+
+        try {
+            message.getBody().add(BytesBody.BYTES_LOCATION, "not-bytes");
+        } catch(Throwable t) {
+            fail("Body implementation has changed.  No longer possible to set non-bytes to BytesBody.BYTES_LOCATION, which makes sense.  Review implications for MessagePayloadProxy re legacy support.");
+        }
+    }
+}


Property changes on: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/message/MessagePayloadProxyUnitTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotificationListUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotificationListUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotificationListUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -47,7 +47,7 @@
 		TestNotificationTarget2.messageList = messageList;
 		
         Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "tom".getBytes());
+        message.getBody().add("tom".getBytes());
 		nList.sendNotification(message);
 		assertEquals(4, messageList.size());
 		assertEquals("message 1-tom", messageList.get(0));

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyEmailUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyEmailUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyEmailUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -49,7 +49,7 @@
 		
 		NotifyEmail ne = new TestNotifyEmail(emailMessageEl, "Hi there!!!\nHello");
         Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "Hello".getBytes());
+        message.getBody().add("Hello".getBytes());
 		ne.sendNotification(message);
 	}
 
@@ -62,7 +62,7 @@
                 
                 NotifyEmail ne = new TestNotifyEmail(emailMessageEl, "Hello");
         Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "Hello".getBytes());
+        message.getBody().add("Hello".getBytes());
                 ne.sendNotification(message);
         }
 	

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyFilesUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyFilesUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyFilesUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -30,7 +30,6 @@
 
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
-import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.soa.esb.message.format.MessageType;
 
@@ -82,7 +81,7 @@
 		// Create the class and call the sendNotification method twice...
 		notifyFiles = new NotifyFiles(rootEl);
         Message message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "object".getBytes());
+        message.getBody().add("object".getBytes());
 		notifyFiles.sendNotification(message);
 		notifyFiles.sendNotification(message);
 
@@ -105,7 +104,7 @@
 		addFileConfig(rootEl, "file2.notif", true);
 		final NotifyFiles notifyFiles = new MockNotifyFiles(rootEl);
         final Message message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "object".getBytes());
+        message.getBody().add("object".getBytes());
 		try
 		{
 			notifyFiles.sendNotification( message );

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyJMSUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyJMSUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyJMSUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -95,7 +95,7 @@
 	{
 		notifyJMS = new MockNotifyJMS( new ConfigTree("") );
 		message = MessageFactory.getInstance().getMessage();
-		message.getHeader().getCall().setMessageID( new URI( messageID ) ) ;
+		message.getHeader().getCall().setMessageID( new URI( messageID ) ) ;
 	}
 		
 

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyQueuesUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyQueuesUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyQueuesUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -124,7 +124,7 @@
 	@Test
 	public void test_StringObj() throws Exception {
         org.jboss.soa.esb.message.Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "Hello".getBytes());
+        message.getBody().add("Hello".getBytes());
 		notifyQueues.sendNotification(message);
 		
 		checkQueueTextMessage(mockQueue1, 0, "Hello");
@@ -134,7 +134,7 @@
 	@Test
 	public void test_NonStringObj() throws Exception {
         org.jboss.soa.esb.message.Message message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-        message.getBody().add(BytesBody.BYTES_LOCATION, ((new Integer(123).toString().getBytes())));
+        message.getBody().add(((new Integer(123).toString().getBytes())));
 		notifyQueues.sendNotification(message);
 		
 		checkQueueObjectMessage(mockQueue1, 0, new Integer(123).toString().getBytes());

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifySqlTableUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifySqlTableUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifySqlTableUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -67,7 +67,7 @@
 		ConfigTree domEl = ConfigTree.fromInputStream(getClass().getResourceAsStream("NotifySqlTable_testfile1.xml"));
 		NotifySqlTable nst = new MockNotifySqlTable(domEl);
         org.jboss.soa.esb.message.Message message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-        message.getBody().add(BytesBody.BYTES_LOCATION, (new Integer(123).toString().getBytes()));
+        message.getBody().add((new Integer(123).toString().getBytes()));
         try
         {
 			nst.sendNotification( message );

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyTopicsUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyTopicsUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/NotifyTopicsUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -82,7 +82,7 @@
 
 	public void test_StringObj() throws Exception {
         org.jboss.soa.esb.message.Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
-        message.getBody().add(BytesBody.BYTES_LOCATION, "Hello".getBytes());
+        message.getBody().add("Hello".getBytes());
 		notifyTopics.sendNotification(message);
 		
 		checkTopicTextMessage(mockTopic1, 0, "Hello");
@@ -91,7 +91,7 @@
 	
 	public void test_NonStringObj() throws Exception {
         org.jboss.soa.esb.message.Message message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
-        message.getBody().add(BytesBody.BYTES_LOCATION, (new Integer(123).toString().getBytes()));
+        message.getBody().add((new Integer(123).toString().getBytes()));
 		notifyTopics.sendNotification(message);
 		
 		checkTopicObjectMessage(mockTopic1, 0, new Integer(123).toString().getBytes());

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/TestNotificationTarget1.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/TestNotificationTarget1.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/notification/TestNotificationTarget1.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -23,7 +23,7 @@
 	public void sendNotification (Message message)
 			throws NotificationException
 	{
-        String content = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+        String content = new String((byte[]) message.getBody().get());
 		messageList.add(config.getAttribute("message") + "-" + content);
 	}
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/tests/filter/TraceFilterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/tests/filter/TraceFilterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/tests/filter/TraceFilterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -65,7 +65,7 @@
 	msg.getHeader().getCall().setTo(new FTPEpr("ftp://foo.bar"));
 	msg.getHeader().getCall().setReplyTo(new HTTPEpr("http://bar.foo"));
 	msg.getHeader().getCall().setAction(new URI("urn:dowork"));
-	msg.getBody().add(BytesBody.BYTES_LOCATION, "Hello World".getBytes());
+	msg.getBody().add("Hello World".getBytes());
 	msg.getHeader().getCall().setMessageID(new URI("urn:foo/bar/1234"));
 
 	Message output = FilterManager.getInstance().doOutputWork(msg, null);

Modified: labs/jbossesb/trunk/product/samples/quickstarts/helloworld/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/helloworld/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/helloworld/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -35,7 +35,7 @@
   public Message displayMessage(Message message) throws Exception{
 		
 		  System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");		  		  
-		  System.out.println("Body: " + message.getBody().get().toString()) ;
+		  System.out.println("Body: " + message.getBody().get()) ;
 		  System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
 		  return message; 
         		

Modified: labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/jboss-esb-unfiltered.xml
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/jboss-esb-unfiltered.xml	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/jboss-esb-unfiltered.xml	2007-10-17 08:47:44 UTC (rev 15872)
@@ -62,9 +62,7 @@
                    		<property name="printfull" value="true"/>
                    	</action>
                         <!-- The next action is for Continuous Integration testing -->
-                   	<action name="testStore" class="org.jboss.soa.esb.actions.StoreMessageToFile">
-                   	    <property name="location" value="org.jboss.soa.esb.message.content.bytes"/>
-                   	</action>
+                   	<action name="testStore" class="org.jboss.soa.esb.actions.StoreMessageToFile" />
             </actions>
         </service>
       </services>

Modified: labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/src/org/jboss/soa/esb/samples/quickstart/helloworldfileaction/MyAction.java
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/src/org/jboss/soa/esb/samples/quickstart/helloworldfileaction/MyAction.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/helloworld_file_action/src/org/jboss/soa/esb/samples/quickstart/helloworldfileaction/MyAction.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -36,19 +36,19 @@
 
   public Message displayMessage(Message message) throws Exception{		
 		  logHeader();
-		  System.out.println("Body: " + new String(message.getBody().getByteArray()));
+		  System.out.println("Body: " + new String((byte[])message.getBody().get()));
 		  logFooter();
 		  return message;         	
 	}
   
    public Message playWithMessage(Message message) throws Exception {
 	   Body msgBody = message.getBody();
-	   String contents = new String(msgBody.getByteArray());
+	   String contents = new String((byte[])msgBody.get());
 	   StringBuffer sb = new StringBuffer();
 	   sb.append("\nBEFORE\n");
 	   sb.append(contents);
 	   sb.append("\nAFTER\n");
-	   msgBody.setByteArray(sb.toString().getBytes());
+	   msgBody.add(sb.toString().getBytes());
 	   return message;
    }
 	

Modified: labs/jbossesb/trunk/product/samples/quickstarts/scheduled_services/src/org/jboss/soa/esb/samples/quickstart/scheduler/MyScheduledActionMsgComposer.java
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/scheduled_services/src/org/jboss/soa/esb/samples/quickstart/scheduler/MyScheduledActionMsgComposer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/scheduled_services/src/org/jboss/soa/esb/samples/quickstart/scheduler/MyScheduledActionMsgComposer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -40,7 +40,7 @@
     public Message composeMessage() throws SchedulingException {
     	System.out.println("compose a message");
     	Message myMessage = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
-    	myMessage.getBody().setByteArray("Hello Scheduled World".getBytes());
+    	myMessage.getBody().add("Hello Scheduled World".getBytes());
     	return myMessage;
     }
     

Modified: labs/jbossesb/trunk/product/samples/quickstarts/scripting_groovy/scripts/messagePlay.groovy
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/scripting_groovy/scripts/messagePlay.groovy	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/scripting_groovy/scripts/messagePlay.groovy	2007-10-17 08:47:44 UTC (rev 15872)
@@ -3,9 +3,5 @@
 
 message.body.add("ScriptingBy", "Groovy - the best scripting language on the planet")
 
-println new String(message.body.contents)
+println message.getBody().get()
 
-message.body.contents = ("Message modified by Groovy: " + new String(message.body.contents)).getBytes()
-
-println new String(message.body.contents)
-

Modified: labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/jboss-esb.xml
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/jboss-esb.xml	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/jboss-esb.xml	2007-10-17 08:47:44 UTC (rev 15872)
@@ -46,6 +46,7 @@
 
                 <action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
                     <property name="resource-config" value="/smooks-res.xml" />
+                    <property name="java-output-location" value="$default" />
                 </action>
 
                 <action name="convertPOJO2Message" class="org.jboss.soa.esb.dvdstore.DVDStoreAction"	/>
@@ -53,7 +54,7 @@
                 <action name="returnToSender"
                 	class="org.jboss.soa.esb.samples.quickstart.transformxml2pojo.MyJMSListenerAction" process="sendResponse" />
 		<action name="println-xml2pojo" class="org.jboss.soa.esb.actions.SystemPrintln">
-			<property name="message" value=">>>> Message after Smooks intermediate xml -> target xml : " />
+			<property name="message" value=">>>> Message after Smooks intermediate xml -> target pojos : " />
 		</action>           	   
                 <!-- The next action is for Continuous Integration testing -->
 		<action name="testStore" class="org.jboss.soa.esb.actions.StoreMessageToFile">

Modified: labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/dvdstore/DVDStoreAction.java
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/dvdstore/DVDStoreAction.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/dvdstore/DVDStoreAction.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -42,30 +42,25 @@
 	}
 	
 	public Message process(Message message) throws ActionProcessingException {
-		HashMap beanHash = (HashMap) message.getBody().get("EXTRACTED_BEANS_HASH");
-		
-		StringBuffer results = new StringBuffer();		
-		if(beanHash != null) {
-			OrderHeader header = (OrderHeader) beanHash.get("orderHeader");
-			Customer customer = (Customer) beanHash.get("customer");
-			List orderItems = (List) beanHash.get("orderItemList");
-			results.append("Demonstrates Smooks ability to rip the XML into Objects\n");
-			results.append("********* DVDStoreAction - Order Value Objects Populated *********\n");
-			results.append("Header: " + header + "\n");
-			results.append("Customer: " + customer + "\n");
-			if(orderItems != null) {
-				results.append("Order Items (" + orderItems.size() + "):\n");
-				for(int i = 0; i < orderItems.size(); i++) {
-					results.append("\t" + i + ": " + orderItems.get(i) + "\n");
-				}
-			}
-			results.append("\n****************************************************************** ");
-		} else {
-			results.append("\n*** No beanhash found!");
-		}
-		
-		// Take this "parsed" output and make it a new message
-		message.getBody().setByteArray(results.toString().getBytes());
+		StringBuffer results = new StringBuffer();
+        OrderHeader header = (OrderHeader) message.getBody().get("orderHeader");
+        Customer customer = (Customer) message.getBody().get("customer");
+        List orderItems = (List) message.getBody().get("orderItemList");
+
+        results.append("Demonstrates Smooks ability to rip the XML into Objects\n");
+        results.append("********* DVDStoreAction - Order Value Objects Populated *********\n");
+        results.append("Header: " + header + "\n");
+        results.append("Customer: " + customer + "\n");
+        if(orderItems != null) {
+            results.append("Order Items (" + orderItems.size() + "):\n");
+            for(int i = 0; i < orderItems.size(); i++) {
+                results.append("\t" + i + ": " + orderItems.get(i) + "\n");
+            }
+        }
+        results.append("\n****************************************************************** ");
+
+		message.getBody().add(results.toString());
+
 		return message;
 	}
 }

Modified: labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/samples/quickstart/transformxml2pojo/MyJMSListenerAction.java
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/samples/quickstart/transformxml2pojo/MyJMSListenerAction.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/samples/quickstarts/transform_XML2POJO/src/org/jboss/soa/esb/samples/quickstart/transformxml2pojo/MyJMSListenerAction.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -20,71 +20,77 @@
  */
 package org.jboss.soa.esb.samples.quickstart.transformxml2pojo;
 
-import org.jboss.soa.esb.helpers.ConfigTree;
-import org.jboss.soa.esb.message.Message;
-import org.jboss.soa.esb.message.Header;
-import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.actions.AbstractActionLifecycle;
 import org.jboss.soa.esb.addressing.Call;
 import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.message.Body;
+import org.jboss.soa.esb.message.Header;
+import org.jboss.soa.esb.message.Message;
 
-public class MyJMSListenerAction extends AbstractActionLifecycle
-{
-    
-  protected ConfigTree	_config;
-	  
-  public MyJMSListenerAction(ConfigTree config) { _config = config; } 
-  
-  public Message noOperation(Message message) { return message; } 
+public class MyJMSListenerAction extends AbstractActionLifecycle {
 
-  public Message displayMessage(Message message) throws Exception{		
-		  logHeader();
-		  logFooter();
-		  return message;         	
-	}
-  
-   public Message playWithMessage(Message message) throws Exception {
-	   Header msgHeader = message.getHeader();
-	   Body msgBody = message.getBody();
-	   Call theCall = msgHeader.getCall();
-	   EPR theEpr = theCall.getFrom();
-	   String contents = new String(msgBody.getByteArray());
-	   StringBuffer sb = new StringBuffer();
-	   sb.append("BEFORE\n");
-	   sb.append(contents);
-	   sb.append("\nAFTER");
-	   msgBody.setByteArray(sb.toString().getBytes());
-	   return message;
-   }
-   
-   public void exceptionHandler(Message message, Throwable exception) {
-	   logHeader();
-	   System.out.println("!ERROR!");
-	   System.out.println(exception.getMessage());
-	   System.out.println("For Message: ");
-	   System.out.println(message.getBody().getByteArray());
-	   logFooter();
-   }
-	
-   public Message sendResponse(Message message) { 
-	   try {
-		   logHeader();
-		   logFooter();
-		   ReturnJMSMessage.sendMessage(message,"quickstart_simple_transformation_Response",_config);
-	   } catch (Exception e) {
-		   logHeader();
-		   System.out.println(e.getMessage());
-		   logFooter();
-	   }
-	   return message; //nothing was done to this but action methods must return a Message
-   }
-   // This makes it easier to read on the console
-   private void logHeader() {
-	   System.out.println("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
-   }
-   private void logFooter() {
-	   System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
-   }
-    
-	
+    protected ConfigTree _config;
+
+    public MyJMSListenerAction(ConfigTree config) {
+        _config = config;
+    }
+
+    public Message noOperation(Message message) {
+        return message;
+    }
+
+    public Message displayMessage(Message message) throws Exception {
+        logHeader();
+        System.out.println(message.getBody().get());
+        logFooter();
+        return message;
+    }
+
+    public Message playWithMessage(Message message) throws Exception {
+        Header msgHeader = message.getHeader();
+        Body msgBody = message.getBody();
+        Call theCall = msgHeader.getCall();
+        EPR theEpr = theCall.getFrom();
+        String contents = (String) msgBody.get();
+        StringBuffer sb = new StringBuffer();
+        sb.append("BEFORE\n");
+        sb.append(contents);
+        sb.append("\nAFTER");
+        msgBody.add(sb.toString());
+        return message;
+    }
+
+    public void exceptionHandler(Message message, Throwable exception) {
+        logHeader();
+        System.out.println("!ERROR!");
+        System.out.println(exception.getMessage());
+        System.out.println("For Message: ");
+        System.out.println(message.getBody().getByteArray());
+        logFooter();
+    }
+
+    public Message sendResponse(Message message) {
+        try {
+            logHeader();
+            logFooter();
+            ReturnJMSMessage.sendMessage(message, "quickstart_simple_transformation_Response", _config);
+        } catch (Exception e) {
+            logHeader();
+            System.out.println(e.getMessage());
+            logFooter();
+        }
+        return message; //nothing was done to this but action methods must return a Message
+    }
+
+    // This makes it easier to read on the console
+    private void logHeader() {
+        System.out.println("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
+    }
+
+    private void logFooter() {
+        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
+    }
+
+
 }

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/MessageStoreFactory.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/MessageStoreFactory.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/MessageStoreFactory.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,6 +28,10 @@
 import org.jboss.soa.esb.services.persistence.MessageStore;
 import org.jboss.soa.esb.services.persistence.RedeliverStore;
 import org.jboss.soa.esb.util.ClassUtil;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.Configurable;
+import org.jboss.soa.esb.ConfigurationException;
+
 /**
  * 
  * @author kurt.stam at jboss.com
@@ -38,8 +42,9 @@
 	private final ConcurrentHashMap<String, MessageStore> messageStores = new ConcurrentHashMap<String, MessageStore>();
 	private static MessageStoreFactory theFactory;
     private static Logger _log = Logger.getLogger(MessageStoreFactory.class);
-	
-	public MessageStoreFactory() {
+    private static final ConfigTree DEFAULT_STORE_CONFIG = new ConfigTree("default-config");
+
+    public MessageStoreFactory() {
 		reset();
 	}
     /**
@@ -66,16 +71,7 @@
      * @return MessageStore
 	 */
 	public MessageStore getMessageStore(String className) {
-		if (className == null) {
-			className = MessageStore.DEFAULT;
-        }
-        String messageStoreKey = className;
-		MessageStore messageStore = messageStores.get(messageStoreKey);
-		if (messageStore == null) {
-            messageStore = getMessageStoreInstance(className);
-            messageStores.put(messageStoreKey, messageStore);
-        } 
-        return messageStore;
+        return getMessageStore(className, DEFAULT_STORE_CONFIG);
 	}
 	
 	public void reset ()
@@ -111,4 +107,25 @@
         return theFactory;
     }
 
+    public MessageStore getMessageStore(String className, ConfigTree config) {
+        if (className == null) {
+            className = MessageStore.DEFAULT;
+        }
+        String messageStoreKey = className;
+        MessageStore messageStore = messageStores.get(messageStoreKey);
+        if (messageStore == null) {
+            messageStore = getMessageStoreInstance(className);
+            messageStores.put(messageStoreKey, messageStore);
+        }
+
+        if(config != null && messageStore instanceof Configurable) {
+            try {
+                ((Configurable)messageStore).setConfiguration(config);
+            } catch (ConfigurationException e) {
+                throw new IllegalStateException("Unable to configure message store '" + className + "'.", e);
+            }
+        }
+
+        return messageStore;
+    }
 }

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/jcr/JCRMessageStoreImpl.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/jcr/JCRMessageStoreImpl.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/internal/soa/esb/persistence/format/jcr/JCRMessageStoreImpl.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -43,6 +43,7 @@
 import org.jboss.internal.soa.esb.message.urigen.JcrMessageURIGenerator;
 import org.jboss.soa.esb.common.Configuration;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
 import org.jboss.soa.esb.message.properties.MessagePropertyFacade;
@@ -50,6 +51,10 @@
 import org.jboss.soa.esb.message.urigen.URIGenerationException;
 import org.jboss.soa.esb.services.persistence.MessageStore;
 import org.jboss.soa.esb.services.persistence.MessageStoreException;
+import org.jboss.soa.esb.Configurable;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.helpers.ConfigTree;
 
 /**
  * Message store that persists messages to a JSR 170 content repository.
@@ -58,7 +63,7 @@
  * 
  * @author Derek Adams
  */
-public class JCRMessageStoreImpl implements MessageStore {
+public class JCRMessageStoreImpl implements MessageStore, Configurable {
 
 	/** Static logger instance */
 	private static Logger LOGGER = Logger.getLogger(JCRMessageStoreImpl.class);
@@ -68,12 +73,13 @@
 
 	/** Root node under which JCR messages are stored (lazy-loaded) */
 	protected Node messageStoreRootNode;
+    private MessagePayloadProxy payloadProxy;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.jboss.soa.esb.services.persistence.MessageStore#addMessage(org.jboss.soa.esb.message.Message)
-	 */
+    /*
+      * (non-Javadoc)
+      *
+      * @see org.jboss.soa.esb.services.persistence.MessageStore#addMessage(org.jboss.soa.esb.message.Message)
+      */
 	public URI addMessage(Message message, String classification) throws MessageStoreException {
 		try {
 			Session session = JCRConnectionManager.getInstance().newRepositorySession();
@@ -116,6 +122,12 @@
         }
     }
 
+    public void setConfiguration(ConfigTree config) throws ConfigurationException {
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {BytesBody.BYTES_LOCATION},
+                                               new String[] {BytesBody.BYTES_LOCATION});
+    }
+
 	/**
 	 * Save a message to the content repository.
 	 * 
@@ -124,15 +136,23 @@
 	 * @throws RepositoryException
 	 */
 	protected URI saveMessage(Node root, Message message) throws RepositoryException {
+        assertConfigured("saveMessage");
 		try {
 			URI messageURI = uriGenerator.generateMessageURI(message);
 			MessagePropertyFacade msgProps = new MessagePropertyFacade(message);
 			msgProps.setMessageId(messageURI.toString());
 			Node messageNode = root.addNode(messageURI.toString());
 			Node bodyNode = messageNode.addNode(JCRNodeNames.BODY_NODE_NAME);
-			if (message.getBody().get(BytesBody.BYTES_LOCATION) != null) {
-				ByteArrayInputStream stream = new ByteArrayInputStream(
-						(byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+
+            Object messageBytes;
+            try {
+                messageBytes = payloadProxy.getPayload(message);
+            } catch (MessageDeliverException e) {
+                throw new RepositoryException(e);
+            }
+
+            if (messageBytes instanceof byte[]) {                                
+                ByteArrayInputStream stream = new ByteArrayInputStream((byte[]) messageBytes);
 				bodyNode.setProperty(JCRNodeNames.BODY_CONTENT_PROP_NAME, stream);
 			}
 			for (String propName : message.getProperties().getNames()) {
@@ -166,15 +186,20 @@
 	 * @throws RepositoryException
 	 */
 	protected Message loadMessage(Node root, URI uri) throws RepositoryException {
-		try {
+        assertConfigured("loadMessage");
+        try {
 			Node messageNode = root.getNode(uri.toString());
 			Node bodyNode = messageNode.getNode(JCRNodeNames.BODY_NODE_NAME);
 			Property bodyContents = bodyNode.getProperty(JCRNodeNames.BODY_CONTENT_PROP_NAME);
 			Message message = MessageFactory.getInstance().getMessage();
 			if (bodyContents != null) {
 				byte[] contentBytes = IOUtils.toByteArray(bodyContents.getStream());
-				message.getBody().add(BytesBody.BYTES_LOCATION, contentBytes);
-			}
+                try {
+                    payloadProxy.setPayload(message, contentBytes);
+                } catch (MessageDeliverException e) {
+                    throw new RepositoryException(e);
+                }
+            }
 			if (LOGGER.isInfoEnabled()) {
 				LOGGER.info("Loaded node from content repository:");
 				dumpNodeToLog(messageNode);
@@ -185,7 +210,13 @@
 		}
 	}
 
-	/**
+    private void assertConfigured(String calledMethod) {
+        if(payloadProxy == null) {
+            throw new IllegalStateException("Invalid call to '" + calledMethod + "' on '" + getClass().getName() + "'. setConfiguration(ConfigTree) must be called before calling this method.");
+        }
+    }
+
+    /**
 	 * Dumps the contents of a JCR node to the logger.
 	 * 
 	 * @param node

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/soa/esb/actions/MessagePersister.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/soa/esb/actions/MessagePersister.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/main/java/org/jboss/soa/esb/actions/MessagePersister.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -33,6 +33,7 @@
 import org.apache.log4j.Logger;
 import org.jboss.internal.soa.esb.persistence.format.MessageStoreFactory;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.Configurable;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.services.persistence.MessageStore;
@@ -86,7 +87,7 @@
             log.debug("MessagePersister started with classification=" + classification 
                 + " and message-store-class=" + messageStore);
         }
-        messageStore = MessageStoreFactory.getInstance().getMessageStore(messageStoreClass);
+        messageStore = MessageStoreFactory.getInstance().getMessageStore(messageStoreClass, config);
     }
     /* (non-Javadoc)
      * @see org.jboss.soa.esb.actions.ActionLifecycle#destroy()

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreClient.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreClient.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreClient.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -60,7 +60,7 @@
 		// set some content inside the Messages
 		for (int x = 0; x < msg.length; x++)
 		{
-			msg[x].getBody().add(BytesBody.BYTES_LOCATION, "TEST BODY".getBytes());
+			msg[x].getBody().add("TEST BODY".getBytes());
 			msg[x].getProperties().setProperty("prop" + x, "val" + x);
 			msg[x].getAttachment().addItem(new String("TEST ATTACHMENT"));
 		}

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/messagestore/MessageStoreUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -86,7 +86,7 @@
 						 MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED)};		
 		//set some content inside the Messages
 		for (int x=0; x<msg.length; x++) {
-			msg[x].getBody().add(BytesBody.BYTES_LOCATION, "TEST BODY".getBytes());
+			msg[x].getBody().add("TEST BODY".getBytes());
 			msg[x].getProperties().setProperty("prop"+x, "val"+x);
 			msg[x].getAttachment().addItem(new String("TEST ATTACHMENT"));						
 		}

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/actions/MessagePersisterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/actions/MessagePersisterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/actions/MessagePersisterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -73,7 +73,7 @@
             Date now = new Date();
             String body = "<message>First Message " + now + " </message>";
             Message msg = MessageFactory.getInstance().getMessage();
-            msg.getBody().add(BytesBody.BYTES_LOCATION, body.getBytes());
+            msg.getBody().add(body.getBytes());
             
            
             InputStream inputStream = ClassUtil.getResourceAsStream("MessagePersisterTest.xml", this.getClass());
@@ -92,7 +92,7 @@
             Iterator<Message> iter=messages.values().iterator();
             while (iter.hasNext()) {
                 Message message=iter.next();
-                String bodyFromStore = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+                String bodyFromStore = new String((byte[]) message.getBody().get());
                 System.out.println("Body=" + bodyFromStore);
             }
             System.out.println("Getting message for classification TEST:" + messages);
@@ -100,7 +100,7 @@
             
             //Now check if it is the same message
             Message message=messages.values().iterator().next();
-            String bodyFromStore = new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION));
+            String bodyFromStore = new String((byte[]) message.getBody().get());
             assertEquals(body, bodyFromStore);
 		}
 		catch (Exception re)

Modified: labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/tests/MessageStoreUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/tests/MessageStoreUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbossesb/src/test/java/org/jboss/soa/esb/persistence/tests/MessageStoreUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -167,8 +167,8 @@
 		msg2.getProperties().setProperty("prop2", "val2");
 
 		// set the body inside the Message
-		msg1.getBody().add(BytesBody.BYTES_LOCATION, ("TEST BODY").getBytes());
-		msg2.getBody().add(BytesBody.BYTES_LOCATION, ("TEST BODY").getBytes());
+		msg1.getBody().add(("TEST BODY").getBytes());
+		msg2.getBody().add(("TEST BODY").getBytes());
 
 		// set some object attachments inside the Message
 		msg1.getAttachment().addItem(new String("TEST ATTACHMENT1"));

Modified: labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -214,7 +214,7 @@
     	    boolean isPrcScope = (null == processScope) ? gblPrcScope : Boolean
     		    .parseBoolean(processScope);
     	    Object obj = (Constants.BODY_CONTENT_VARIABLE_NAME.equals(esbVar)) ? body
-    		    .get(BytesBody.BYTES_LOCATION)
+    		    .get()
     		    : body.get(esbVar);
     	    Object oldVal = (isPrcScope) ? ctxInstance.getVariable(jbpmVar)
     		    : ctxInstance.getVariable(jbpmVar, _token);

Modified: labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -34,6 +34,7 @@
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 
 public class EsbActionHandlerUnitTest extends TestCase 
 {
@@ -57,8 +58,8 @@
     @BeforeClass
     public static void runBeforeAllTests()
     {
-    	_logger.info("@BeforeClass invoked");
-    	try 
+        _logger.info("@BeforeClass invoked");
+    	try
     	{
     	}
     	catch (Exception e)

Modified: labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/BpmProcessorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/BpmProcessorUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/BpmProcessorUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -170,7 +170,7 @@
 			request	= Helper.commandMessageTemplate();
 			Helper.setLongValue(request, Constants.TOKEN_ID, tokenId);
 			String myContent = "My content travels in the message";
-			request.getBody().add(BytesBody.BYTES_LOCATION, myContent.getBytes());
+			request.getBody().add(myContent.getBytes());
 			response	= command.process(request);
 			_logger.info(JbpmTestUtil.dumpResponse(response, command.getOpCode()));
 			ret = Helper.getStringValue(response, Constants.RETURN_CODE);
@@ -200,5 +200,4 @@
 			assertTrue(false);
 		}
 	} //________________________________
-
 }
\ No newline at end of file

Modified: labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/JbpmTestUtil.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/JbpmTestUtil.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actions/JbpmTestUtil.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -92,9 +92,9 @@
 		Object obj = null;
 		if(Constants.BODY_CONTENT_VARIABLE_NAME.equals(key))
 		{
-			obj = message.getBody().get(BytesBody.BYTES_LOCATION);
+			obj = message.getBody().get();
 			return "Message body content = "
-				+((null==obj) ? "<null>" : new String((byte[])obj))
+				+((null==obj) ? "<null>" : obj)
 				+"\n";
 		}
 		

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -22,6 +22,7 @@
 package org.jboss.internal.soa.esb.services.routing.cbr;
 
 import java.io.ByteArrayInputStream;
+import java.io.StringReader;
 
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
@@ -30,7 +31,10 @@
 
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.xml.sax.InputSource;
 
 /**
@@ -45,7 +49,15 @@
 	private static Logger log = Logger.getLogger(DslHelper.class);
 	/** XPath instance */
 	private static XPathFactory xpf = XPathFactory.newInstance();
-	/** 
+    private static MessagePayloadProxy payloadProxy;
+
+    static {
+        payloadProxy = new MessagePayloadProxy(new ConfigTree("config"),
+                      new String[] {BytesBody.BYTES_LOCATION},
+                      new String[] {BytesBody.BYTES_LOCATION});
+    }
+
+    /**
 	 * Uses XPath to look for the occurence of a certain tag, specific in the xpath expression.
 	 * 
 	 * @param message - the ESB Message which body content will be used.
@@ -59,29 +71,30 @@
 			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message);
 		}
 		XPath xpath = xpf.newXPath();
-		InputSource inputSource = new InputSource(new ByteArrayInputStream((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION)));
-		Object node = xpath.evaluate(xpathExp, inputSource, XPathConstants.NODE);
+        InputSource inputSource = getInputSource(message);
+        Object node = xpath.evaluate(xpathExp, inputSource, XPathConstants.NODE);
 		if (log.isDebugEnabled()) {
 			log.debug("Found node=" + node);
 		}
 		return node != null;
 	}
-	/** 
+
+    /**
 	 * Uses XPath to look for the occurence of a certain tag, specific in the xpath expression.
-	 * 
+	 *
 	 * @param message - the ESB Message which body content will be used.
 	 * @param xpathExp - XPath expression to find a node.
 	 * @param value - used to compare against the result found using the XPath expression.
 	 * @return true if equal, false in all other cases.
 	 * @throws XPathExpressionException
 	 */
-	public static boolean xmlContentEquals(Message message, String xpathExp, String value) throws XPathExpressionException 
+	public static boolean xmlContentEquals(Message message, String xpathExp, String value) throws XPathExpressionException
 	{
 		if (log.isDebugEnabled()) {
-			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message.getBody().get(BytesBody.BYTES_LOCATION));
+			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message.getBody().get());
 		}
 		XPath xpath = xpf.newXPath();
-		InputSource inputSource = new InputSource(new ByteArrayInputStream((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION)));
+        InputSource inputSource = getInputSource(message);
 		String nodeValue = (String) xpath.evaluate(xpathExp, inputSource, XPathConstants.STRING);
 		if (log.isDebugEnabled()) {
 			log.debug("Found nodeValue=" + nodeValue + " which is matched to given value=" + value);
@@ -89,31 +102,31 @@
 		return value.equals(nodeValue);
 	}
 
-	/** 
+    /**
 	 * Uses XPath to look for the occurence of a certain tag, specific in the xpath expression.
-	 * 
+	 *
 	 * @param message - the ESB Message which body content will be used.
 	 * @param xpathExp - XPath expression to find a node.
 	 * @param value - used to compare against the result found using the XPath expression.
 	 * @return true if node (returned by the xpath expression) is greater than the current value, false in all other cases.
 	 * @throws XPathExpressionException
 	 */
-	public static boolean xmlContentGreaterThan(Message message, String xpathExp, String value) throws XPathExpressionException 
+	public static boolean xmlContentGreaterThan(Message message, String xpathExp, String value) throws XPathExpressionException
 	{
 		String nodeValue=null;
 		double doubleValue=0;
 		double doubleNodeValue=0;
-		
+
 		if (log.isDebugEnabled()) {
-			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message.getBody().get(BytesBody.BYTES_LOCATION));
+			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message.getBody().get());
 		}
 		XPath xpath = xpf.newXPath();
-		InputSource inputSource = new InputSource(new ByteArrayInputStream((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION)));	
+		InputSource inputSource = getInputSource(message);	
 		nodeValue = (String) xpath.evaluate(xpathExp, inputSource, XPathConstants.STRING);if (log.isDebugEnabled()) {
 			log.debug("Found nodeValue=" + nodeValue + " which is matched to given value=" + value);
 		}
 		if (nodeValue!=null && !"".equals(nodeValue)) {
-			
+
 			try {
 				doubleValue = Double.parseDouble(value);
 			} catch (NumberFormatException ne) {
@@ -130,32 +143,32 @@
 		}
 		return false;
 	}
-	
-	/** 
+
+    /**
 	 * Uses XPath to look for the occurence of a certain tag, specific in the xpath expression.
-	 * 
+	 *
 	 * @param message - the ESB Message which body content will be used.
 	 * @param xpathExp - XPath expression to find a node.
 	 * @param value - used to compare against the result found using the XPath expression.
 	 * @return true if node (returned by the xpath expression) is less than the current value, false in all other cases.
 	 * @throws XPathExpressionException
 	 */
-	public static boolean xmlContentLessThan(Message message, String xpathExp, String value) throws XPathExpressionException 
+	public static boolean xmlContentLessThan(Message message, String xpathExp, String value) throws XPathExpressionException
 	{
 		String nodeValue=null;
 		double doubleValue=0;
 		double doubleNodeValue=0;
-		
+
 		if (log.isDebugEnabled()) {
-			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message.getBody().get(BytesBody.BYTES_LOCATION));
+			log.debug("Trying to match xpath: '" + xpathExp +  "' in message=" + message.getBody().get());
 		}
 		XPath xpath = xpf.newXPath();
-		InputSource inputSource = new InputSource(new ByteArrayInputStream((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION)));	
+		InputSource inputSource = getInputSource(message);
 		nodeValue = (String) xpath.evaluate(xpathExp, inputSource, XPathConstants.STRING);if (log.isDebugEnabled()) {
 			log.debug("Found nodeValue=" + nodeValue + " which is matched to given value=" + value);
 		}
 		if (nodeValue!=null && !"".equals(nodeValue)) {
-			
+
 			try {
 				doubleValue = Double.parseDouble(value);
 			} catch (NumberFormatException ne) {
@@ -172,5 +185,23 @@
 		}
 		return false;
 	}
+
+    private static InputSource getInputSource(Message message) throws XPathExpressionException {
+        Object payload;
+
+        try {
+            payload = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new XPathExpressionException(e);
+        }
+
+        if(payload instanceof byte[]) {
+            return new InputSource(new ByteArrayInputStream((byte[]) payload));
+        } else if(payload instanceof String) {
+            return new InputSource(new StringReader((String) payload));
+        } else {
+            throw new XPathExpressionException("Unsupport expression input object type: " + payload.getClass().getName());
+        }
+    }
 }
 	

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/ContentBasedWiretap.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/ContentBasedWiretap.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/ContentBasedWiretap.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -71,7 +71,7 @@
         _registry = RegistryFactory.getRegistry();
         _cbr = ContentBasedRouterFactory.getRouter(_cbrClass);
         _cbr.setConfigTree(config);
-        _mapper = new ObjectMapper();
+        _mapper = new ObjectMapper(config);
         try {
             dlQueueInvoker = new ServiceInvoker(INTERNAL_SERVICE_CATEGORY, DEAD_LETTER_SERVICE_NAME);
         } catch (MessageDeliverException e) {

Modified: labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -51,7 +51,7 @@
 		message.getProperties().setProperty("prop1", "val1");
 		message.getProperties().setProperty("prop2", "val2");
 		//set the body inside the Message
-		message.getBody().add(BytesBody.BYTES_LOCATION, ("TEST BODY").getBytes());
+		message.getBody().add(("TEST BODY").getBytes());
 		//set some object attachments inside the Message
 		message.getAttachment().addItem(new String("TEST ATTACHMENT1"));
 		message.getAttachment().addItem(new String("TEST ATTACHMENT2"));
@@ -60,7 +60,7 @@
         try {
     		List<String> destinationServices = jbossRulesRouter.route("JBossESBRules.drl", false, message, null);
     		assertEquals(destinationServices.iterator().next(),"serialized-destination");
-            System.out.println(message.getBody().get("test"));
+            System.out.println(message.getBody().get());
         } catch (MessageRouterException mre) {
             System.out.println("Exception was thrown.");
             mre.printStackTrace();
@@ -77,7 +77,7 @@
 		message.getProperties().setProperty("prop1", "val1");
 		message.getProperties().setProperty("prop2", "val2");
 		//set the body inside the Message
-		message.getBody().add(BytesBody.BYTES_LOCATION, ("TEST BODY").getBytes());
+		message.getBody().add(("TEST BODY").getBytes());
 		//set some object attachments inside the Message
 		message.getAttachment().addItem(new String("TEST ATTACHMENT1"));
 		message.getAttachment().addItem(new String("TEST ATTACHMENT2"));

Modified: labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -53,7 +53,7 @@
 			message.getProperties().setProperty("prop1", "val1");
 			message.getProperties().setProperty("prop2", "val2");
 			//set the body inside the Message
-			message.getBody().add(BytesBody.BYTES_LOCATION, ("TEST BODY").getBytes());
+			message.getBody().add(("TEST BODY").getBytes());
 			//set some object attachments inside the Message
 			message.getAttachment().addItem(new String("TEST ATTACHMENT1"));
 			message.getAttachment().addItem(new String("TEST ATTACHMENT2"));
@@ -77,7 +77,7 @@
 			message.getProperties().setProperty("prop1", "val1");
 			message.getProperties().setProperty("prop2", "val2");
 			//set the body inside the Message
-			message.getBody().add(BytesBody.BYTES_LOCATION, ("TEST BODY").getBytes());
+			message.getBody().add(("TEST BODY").getBytes());
 			//set some object attachments inside the Message
 			message.getAttachment().addItem(new String("TEST ATTACHMENT1"));
 			message.getAttachment().addItem(new String("TEST ATTACHMENT2"));
@@ -100,7 +100,7 @@
 			message.getProperties().setProperty("prop1", "val1");
 			message.getProperties().setProperty("prop2", "val2");
 			//set the body inside the Message
-			message.getBody().add(BytesBody.BYTES_LOCATION, ("<jbossesb>TEST BODY</jbossesb>").getBytes());
+			message.getBody().add(("<jbossesb>TEST BODY</jbossesb>").getBytes());
 			//set some object attachments inside the Message
 			message.getAttachment().addItem(new String("TEST ATTACHMENT1"));
 			message.getAttachment().addItem(new String("TEST ATTACHMENT2"));
@@ -120,7 +120,7 @@
 			//add new messages
 			Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
 			//set the body inside the Message
-			message.getBody().add(BytesBody.BYTES_LOCATION, ("<Dave>rocks</Dave>").getBytes());
+			message.getBody().add(("<Dave>rocks</Dave>").getBytes());
 		
 			ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter(org.jboss.soa.esb.actions.ContentBasedRouter.DEFAULT_CBR_CLASS);
 			List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message,null);
@@ -137,7 +137,7 @@
 			//add new messages
 			Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
 			//set the body inside the Message
-			message.getBody().add(BytesBody.BYTES_LOCATION, ("<price>1.55</price>").getBytes());
+			message.getBody().add(("<price>1.55</price>").getBytes());
 			
 			ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter(org.jboss.soa.esb.actions.ContentBasedRouter.DEFAULT_CBR_CLASS);
 			List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message,null);
@@ -154,7 +154,7 @@
 			//add new messages
 			Message message = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
 			//set the body inside the Message
-			message.getBody().add(BytesBody.BYTES_LOCATION, ("<price>0.55</price>").getBytes());
+			message.getBody().add(("<price>0.55</price>").getBytes());
 			
 			ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter(org.jboss.soa.esb.actions.ContentBasedRouter.DEFAULT_CBR_CLASS);
 			List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message,null);

Modified: labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksTransformer.java
===================================================================
--- labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksTransformer.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/converters/SmooksTransformer.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -24,6 +24,7 @@
 
 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.ActionLifecycleException;
 import org.jboss.soa.esb.actions.ActionPipelineProcessor;
 import org.jboss.soa.esb.actions.ActionProcessingException;
@@ -32,6 +33,7 @@
 import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.services.transform.TransformationException;
 import org.jboss.soa.esb.services.transform.TransformationService;
@@ -155,14 +157,11 @@
 	public static final String FROM_TYPE = "from-type";
 	public static final String TO = "to";
 	public static final String TO_TYPE = "to-type";
-    public static final String SMOOKS_CDRL_FILE="smooks-cdrl-file";
     public static final String UPDATE_TOPIC="update-topic";
 
-    private static final String BEANS_SPEC = "beans:";
-    private static final String BEANS_SPEC_ALL = BEANS_SPEC + "*";
-    
     private static Logger logger = Logger.getLogger(SmooksTransformer.class);
     private SmooksInstanceManager smooksInstanceManager;
+    private MessagePayloadProxy payloadProxy;
     private String inputLocation;
     private String outputLocation;
     private String javaOutputLocation;
@@ -181,11 +180,8 @@
 	public SmooksTransformer(ConfigTree propertiesTree) throws ConfigurationException {
         List<KeyValuePair> properties = propertiesTree.attributesAsList();
 
-        // if no input location given, then assume default location in message body.
-        inputLocation = KeyValuePair.getValue(INPUT_LOCATION, properties, Body.DEFAULT_LOCATION);
-        // if no output location given, then assume default location in message body.
-        outputLocation = KeyValuePair.getValue(OUTPUT_LOCATION, properties, Body.DEFAULT_LOCATION);
-        javaOutputLocation = KeyValuePair.getValue(JAVA_OUTPUT, properties);
+        createPayloadProxy(properties, propertiesTree);
+
         if(javaOutputLocation != null) {
             javaOutputLocation = javaOutputLocation.trim();
         }
@@ -213,6 +209,29 @@
         actionConfig = propertiesTree;
     }
 
+    private void createPayloadProxy(List<KeyValuePair> properties, ConfigTree propertiesTree) {
+        // if no input location given, then assume default location in message body.
+        inputLocation = KeyValuePair.getValue(INPUT_LOCATION, properties);
+        // if no output location given, then assume default location in message body.
+        outputLocation = KeyValuePair.getValue(OUTPUT_LOCATION, properties);
+        javaOutputLocation = KeyValuePair.getValue(JAVA_OUTPUT, properties);
+
+        String[] legacyGetLocations;
+        String[] legacySetLocations;
+        if(inputLocation != null) {
+            legacyGetLocations = new String[] {inputLocation, BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA};
+        } else {
+            legacyGetLocations = new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA};
+        }
+        if(outputLocation != null) {
+            legacySetLocations = new String[] {outputLocation, ActionUtils.POST_ACTION_DATA};
+        } else {
+            legacySetLocations = new String[] {ActionUtils.POST_ACTION_DATA};
+        }
+        
+        payloadProxy = new MessagePayloadProxy(propertiesTree, legacyGetLocations, legacySetLocations);
+    }
+
     /**
      * Initialise the Smooks instance.
      * @throws ActionLifecycleException Failed to load Smooks configurations.
@@ -272,15 +291,12 @@
         }
         
         long startTime = System.nanoTime();
-        
-        Object payload = message.getBody().get(inputLocation);
 
-        if(payload == null) {
-            payload = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-            
-            if (payload == null) {
-        	    payload = message.getBody().get(BytesBody.BYTES_LOCATION);
-            }
+        Object payload = null;
+        try {
+            payload = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
         }
     	
         try {
@@ -349,10 +365,13 @@
     	return message;
     }
 
-    private void setTransformationOutput(Message message, String transformedMessage, StandaloneExecutionContext executionContext) {
+    private void setTransformationOutput(Message message, String transformedMessage, StandaloneExecutionContext executionContext) throws ActionProcessingException {
         // Set the transformation text output...
-        message.getBody().add(ActionUtils.POST_ACTION_DATA, transformedMessage);
-        message.getBody().add(outputLocation, transformedMessage);
+        try {
+            payloadProxy.setPayload(message, transformedMessage);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
 
         // Set the transformation Java output.  Will be the individual
         // java objects directly on the message and (optionally) the map itself...

Modified: labs/jbossesb/trunk/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/converters/SmooksTransformerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/converters/SmooksTransformerUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/converters/SmooksTransformerUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -35,6 +35,7 @@
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.Body;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.message.format.MessageFactory;
 
@@ -108,14 +109,14 @@
 
         // Perform the transformation by setting the payload on the task object...
         message = MessageFactory.getInstance().getMessage();
-        message.getBody().add(ActionUtils.POST_ACTION_DATA, stringMessage);
+        message.getBody().add(stringMessage);
         message = transformer.process(message);
-        String resultThroughTaskObj = (String) message.getBody().get(ActionUtils.POST_ACTION_DATA);
+        String resultThroughTaskObj = (String) message.getBody().get();
         assertEquals(resultThroughTaskObj, message.getBody().get());
 
         // Perform the transformation by setting the payload on the body as bytes...
         message = createNewMessage(fromType, from, to, toType);
-        message.getBody().add(BytesBody.BYTES_LOCATION, stringMessage.getBytes());
+        message.getBody().add(stringMessage.getBytes());
         message = transformer.process(message);
         assertEquals(resultThroughTaskObj, message.getBody().get());
 
@@ -126,8 +127,8 @@
         assertEquals(resultThroughTaskObj, message.getBody().get());
 
         // Perform the transformation by setting the payload input and output body locations...
-        properties.setAttribute(SmooksTransformer.INPUT_LOCATION, "input-loc1");
-        properties.setAttribute(SmooksTransformer.OUTPUT_LOCATION, "output-loc1");
+        properties.setAttribute(MessagePayloadProxy.GET_PAYLOAD_LOCATION, "input-loc1");
+        properties.setAttribute(MessagePayloadProxy.SET_PAYLOAD_LOCATION, "output-loc1");
         transformer = new SmooksTransformer(properties);
         transformer.initialise();
         message = MessageFactory.getInstance().getMessage();

Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -20,6 +20,7 @@
 import org.jboss.internal.soa.esb.soap.OGNLUtils;
 import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.http.HttpClientFactory;
 import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;
 import org.jboss.soa.esb.actions.ActionProcessingException;
@@ -27,6 +28,8 @@
 import org.jboss.soa.esb.actions.ActionLifecycleException;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.soa.esb.util.ClassUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -241,12 +244,12 @@
     private QNameMap responseXStreamQNameMap = new QNameMap();
     private Properties httpClientProps = new Properties();
     private HttpClient httpclient;
+    private MessagePayloadProxy payloadProxy;
 
     public SOAPClient(ConfigTree config) throws ConfigurationException {
         wsdl = config.getRequiredAttribute("wsdl");
         soapAction = config.getRequiredAttribute("SOAPAction");
-        paramsLocation = config.getAttribute("paramsLocation");
-        responseLocation = config.getAttribute("responseLocation");
+        createPayloadProxy(config);
         responseAsOgnlMap = "true".equalsIgnoreCase(config.getAttribute("responseAsOgnlMap"));
         smooksTransform = config.getAttribute("smooksTransform");
         if(smooksTransform != null) {
@@ -268,7 +271,27 @@
         httpclient = HttpClientFactory.createHttpClient(httpClientProps);
     }
 
+    private void createPayloadProxy(ConfigTree config) {
+        paramsLocation = config.getAttribute("paramsLocation");
+        responseLocation = config.getAttribute("responseLocation");
 
+        String[] legacyGetLocs;
+        String[] legacySetLocs;
+        if(paramsLocation != null) {
+            legacyGetLocs = new String[] {paramsLocation, BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA};
+        } else {
+            legacyGetLocs = new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA};
+        }
+        if(responseLocation != null) {
+            legacySetLocs = new String[] {responseLocation, ActionUtils.POST_ACTION_DATA};
+        } else {
+            legacySetLocs = new String[] {ActionUtils.POST_ACTION_DATA};
+        }
+
+        payloadProxy = new MessagePayloadProxy(config, legacyGetLocs, legacySetLocs);
+    }
+
+
     public void initialise() throws ActionLifecycleException {
         super.initialise();
         // Create the SoapUIInvoker instance for this SOAPClient...
@@ -292,21 +315,15 @@
     }
 
     public Message process(final Message message) throws ActionProcessingException {
-        Map params = null;
+        Map params;
 
-        if(paramsLocation != null) {
-            params = (Map) message.getBody().get(paramsLocation);
-        } else {
-            try {
-                params = (Map) message.getBody().get();
-            } catch(ClassCastException e) {/* ignore */}
-            if(params == null) {
-                params = (Map) message.getBody().get(ActionUtils.POST_ACTION_DATA);
-            }
+        try {
+            params = (Map) payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException("No params. SOAP message parameters must either be set as the default message body payload, or set on the body under the key defined in the 'paramsLocation' acton property.");
         }
-        if(params == null) {
-            throw new ActionProcessingException("No params. SOAP message parameters must either be set as the default message body payload, or set on the body under the key defined in the 'paramsLocation' acton property.");
-        } else if(params.isEmpty()) {
+
+        if(params.isEmpty()) {
             logger.warn("Params Map found in message, but the map is empty.");
         }
 
@@ -386,11 +403,10 @@
             responseObject = response;
         }
 
-        if(responseLocation != null) {
-            message.getBody().add(responseLocation, responseObject);
-        } else {
-            message.getBody().add(responseObject);
-            message.getBody().add(ActionUtils.POST_ACTION_DATA, responseObject);  // TODO why both?!
+        try {
+            payloadProxy.setPayload(message, responseObject);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
         }
     }
 

Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPProcessor.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPProcessor.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPProcessor.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -28,11 +28,13 @@
 
 import org.jboss.internal.soa.esb.publish.Publish;
 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.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
 import org.jboss.soa.esb.message.body.content.BytesBody;
 import org.jboss.wsf.spi.deployment.Endpoint;
 import org.jboss.wsf.spi.invocation.BasicInvocationContext;
@@ -97,6 +99,7 @@
 
     private static ThreadLocal<Message> messageTL = new ThreadLocal<Message>();
     private String jbossws_endpoint;
+    private MessagePayloadProxy payloadProxy;
 
     /**
      * Public constructor.
@@ -105,6 +108,9 @@
      */
     public SOAPProcessor(ConfigTree config) throws ConfigurationException {
         jbossws_endpoint = config.getRequiredAttribute(JBOSSWS_ENDPOINT);
+        payloadProxy = new MessagePayloadProxy(config,
+                                               new String[] {BytesBody.BYTES_LOCATION, ActionUtils.POST_ACTION_DATA},
+                                               new String[] {ActionUtils.POST_ACTION_DATA});
     }
 
     /**
@@ -118,6 +124,7 @@
     public Message process(Message message) throws ActionProcessingException {
         Endpoint endpoint = getServiceEndpoint(jbossws_endpoint);
         byte[] soapMessage;
+        String response = null;
 
         if(endpoint == null) {
             throw new ActionProcessingException("Unknown Service Endpoint '" + jbossws_endpoint + "'.");
@@ -136,16 +143,20 @@
             if(message.getProperties().getProperty("Content-Type") == null) {
                 message.getProperties().setProperty("Content-Type", "text/xml");
             }
-            
-            message.getBody().add(ActionUtils.POST_ACTION_DATA, new String(os.toByteArray()).trim());
-        }
-        catch (Exception ex) {
+
+            response = new String(os.toByteArray()).trim();
+        } catch (Exception ex) {
             throw new ActionProcessingException("Cannot process SOAP request", ex);
         } finally {
             // Get the message instance set on the Threadlocal before removing it.  The Webservice endpoint
             // may have reset it with a new Message instance.
             message = messageTL.get();
             messageTL.remove();
+            try {
+                payloadProxy.setPayload(message, response);
+            } catch (MessageDeliverException e) {
+                throw new ActionProcessingException(e);
+            }
         }
 
         return message;
@@ -153,11 +164,14 @@
 
     private byte[] getSOAPMessagePayload(Message message) throws ActionProcessingException {
         byte[] soapMessage;
-        Object messagePayload = message.getBody().get(BytesBody.BYTES_LOCATION);
-        
-        if (messagePayload == null)
-            messagePayload = message.getBody().get(ActionUtils.POST_ACTION_DATA);
-        
+        Object messagePayload;
+
+        try {
+            messagePayload = payloadProxy.getPayload(message);
+        } catch (MessageDeliverException e) {
+            throw new ActionProcessingException(e);
+        }
+
         if(messagePayload instanceof byte[]) {
             soapMessage = (byte[])messagePayload;
         } else if(messagePayload instanceof String) {

Modified: labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/soapclient-config-01.xml
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/soapclient-config-01.xml	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/soapclient-config-01.xml	2007-10-17 08:47:44 UTC (rev 15872)
@@ -41,7 +41,7 @@
                 <action name="soapui-client-action-04" class="org.jboss.soa.esb.actions.soap.SOAPClient">
                     <property name="wsdl" value="http://localhost:18080/active-bpel/services/RetailerCallback?wsdl"/>
                     <property name="SOAPAction" value="ZZZ"/>
-                    <property name="responseLocation" value="myTestLocation"/>
+                    <property name="set-payload-location" value="myTestLocation"/>
                 </action>
                 <action name="soapui-client-action-05" class="org.jboss.soa.esb.actions.soap.SOAPClient">
                     <property name="wsdl" value="http://localhost:18080/active-bpel/services/RetailerCallback?wsdl"/>

Modified: labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collect.jsp
===================================================================
--- labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collect.jsp	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collect.jsp	2007-10-17 08:47:44 UTC (rev 15872)
@@ -22,7 +22,7 @@
 		Message esbMessage = MessageFactory.getInstance().getMessage();
 		esbMessage.getProperties().setProperty(MessageBodyTypeNames.COMMAND_TYPE, MessageBodyTypeNames.STATISTICS_REQUEST); 
 
-		esbMessage.getBody().add(BytesBody.BYTES_LOCATION, MessageBodyTypeNames.STATISTICS_REQUEST.getBytes());
+		esbMessage.getBody().add(MessageBodyTypeNames.STATISTICS_REQUEST.getBytes());
 		
 	    URI uri = new URI(UUID.randomUUID().toString());
 	    esbMessage.getHeader().getCall().setMessageID(uri);

Modified: labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collectcommands.jsp
===================================================================
--- labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collectcommands.jsp	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/collectcommands.jsp	2007-10-17 08:47:44 UTC (rev 15872)
@@ -22,7 +22,7 @@
 		Message esbMessage = MessageFactory.getInstance().getMessage();
 		esbMessage.getProperties().setProperty(MessageBodyTypeNames.COMMAND_TYPE, MessageBodyTypeNames.STATISTICS_REQUEST); 
 
-		esbMessage.getBody().add(BytesBody.BYTES_LOCATION, MessageBodyTypeNames.STATISTICS_REQUEST.getBytes());
+		esbMessage.getBody().add(MessageBodyTypeNames.STATISTICS_REQUEST.getBytes());
 		
 	    URI uri = new URI(UUID.randomUUID().toString());
 	    esbMessage.getHeader().getCall().setMessageID(uri);

Modified: labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/manage.jsp
===================================================================
--- labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/manage.jsp	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/product/tools/console/management-web/src/main/webapp/manage.jsp	2007-10-17 08:47:44 UTC (rev 15872)
@@ -23,7 +23,7 @@
 		Message esbMessage = MessageFactory.getInstance().getMessage();
 		esbMessage.getProperties().setProperty(MessageBodyTypeNames.COMMAND_TYPE, MessageBodyTypeNames.OPERATIONS_REQUEST); 
 
-		esbMessage.getBody().add(BytesBody.BYTES_LOCATION, MessageBodyTypeNames.OPERATIONS_REQUEST.getBytes());
+		esbMessage.getBody().add(MessageBodyTypeNames.OPERATIONS_REQUEST.getBytes());
 		
 	    URI uri = new URI(UUID.randomUUID().toString());
 	    esbMessage.getHeader().getCall().setMessageID(uri);

Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/jms/JmsGatewayListenerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/jms/JmsGatewayListenerUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/jms/JmsGatewayListenerUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -46,7 +46,7 @@
         JMSUtil.sendMessageToTopic("Howya", "topic/JmsGatewayListenerUnitTest_topic", null);
 
         long start = System.currentTimeMillis();
-        while(System.currentTimeMillis() < (start + 10000)) {
+        while(System.currentTimeMillis() < (start + 20000)) {
             if(file1.exists() && file2.exists()) {
                 // Test passed...
                 return;

Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/MyAction.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/MyAction.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/MyAction.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -50,7 +50,7 @@
    public Message process(Message message) throws ActionProcessingException
    {
       logHeader();
-      System.out.println("Body: " + new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION)));
+      System.out.println("Body: " + message.getBody().get());
       logFooter();
       MBeanServer server = MBeanServerLocator.locateJBoss();
       StatsMBean stats ;

Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/SimpleDeployUnitTest.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/SimpleDeployUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/SimpleDeployUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -78,7 +78,7 @@
       sendAMessage("Hello World", "queue/esb_gateway_channel");
       Thread.sleep(2000); // wait for message to post.
       String version = (String)getServer().getAttribute(new ObjectName(StatsMBean.objectName), "ExecutedVersion");
-      assertEquals(version, "scope1");
+      assertEquals("scope1", version);
       
    }
 
@@ -87,7 +87,7 @@
       sendAMessage("Hello World", "queue/esb_gateway_channel_versioned");
       Thread.sleep(2000); // wait for message to post.
       String version = (String)getServer().getAttribute(new ObjectName(StatsMBean.objectName), "ExecutedVersion");
-      assertEquals(version, "scope2");
+      assertEquals("scope2", version);
 
    }
    public static Test suite() throws Exception

Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/ftp/FtpUnitTest.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/ftp/FtpUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/ftp/FtpUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -56,7 +56,7 @@
       Thread.sleep(10000); // wait for message to post.
       String version = (String)getServer().getAttribute(new ObjectName(StatsMBean.objectName), "ExecutedVersion");
       System.out.println("version=" + version);
-      assertEquals(version, "scope1");
+      assertEquals("scope1", version);
    }
 
    public void sendFtp() throws Exception

Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/jca/JcaUnitTest.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/jca/JcaUnitTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/server/jca/JcaUnitTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -79,7 +79,7 @@
       sendAMessage("Hello World", "queue/esb_gateway_channel");
       Thread.sleep(2000); // wait for message to post.
       String version = (String)getServer().getAttribute(new ObjectName(StatsMBean.objectName), "ExecutedVersion");
-      assertEquals(version, "scope1");
+      assertEquals("scope1", version);
 
    }
 

Modified: labs/jbossesb/trunk/qa/junit/versioned-scoped-src/org/jboss/soa/esb/server/MyAction.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/versioned-scoped-src/org/jboss/soa/esb/server/MyAction.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/junit/versioned-scoped-src/org/jboss/soa/esb/server/MyAction.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -50,7 +50,7 @@
    public Message process(Message message) throws Exception
    {
       logHeader();
-      System.out.println("Body: " + new String((byte[]) message.getBody().get(BytesBody.BYTES_LOCATION)));
+      System.out.println("Body: " + message.getBody().get());
       logFooter();
       MBeanServer server = MBeanServerLocator.locateJBoss();
       StatsMBean stats = (StatsMBean) MBeanProxyExt.create(StatsMBean.class, StatsMBean.objectName, server);

Modified: labs/jbossesb/trunk/qa/quickstarts/resources/transformedmessageXML2POJO.log
===================================================================
--- labs/jbossesb/trunk/qa/quickstarts/resources/transformedmessageXML2POJO.log	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/quickstarts/resources/transformedmessageXML2POJO.log	2007-10-17 08:47:44 UTC (rev 15872)
@@ -1,14 +1,9 @@
-<Order netAmount="59.97" orderDate="Wed Nov 15 13:45:28 EST 2006"
-  orderId="1" statusCode="0" tax="4.95" totalAmount="64.92">
-    <Customer firstName="Harry" lastName="Fletcher" state="SD"
-      userName="user1"/>
-    <OrderLines>
-        <OrderLine position="1" quantity="1">
-            <Product price="29.98" productId="364"
-              title="The 40-Year-Old Virgin "/>
-        </OrderLine>
-        <OrderLine position="2" quantity="1">
-            <Product price="29.99" productId="299" title="Pulp Fiction"/>
-        </OrderLine>
-    </OrderLines>
-</Order>
+Demonstrates Smooks ability to rip the XML into Objects
+********* DVDStoreAction - Order Value Objects Populated *********
+Header: 1, Wed Nov 15 18:45:28 GMT 2006, 0, 59.97, 64.92, 4.95,
+Customer: user1,Harry,Fletcher,SD
+Order Items (2):
+        0: 1,1,364,The 40-Year-Old Virgin ,29.98
+        1: 2,1,299,Pulp Fiction,29.99
+
+****************************************************************** 
\ No newline at end of file

Modified: labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/Helpers.java
===================================================================
--- labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/Helpers.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/Helpers.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -27,6 +27,8 @@
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.Hashtable;
+import java.util.List;
+import java.util.ArrayList;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
@@ -155,22 +157,62 @@
         final File quickstartDir = new File(System.getProperty("org.jboss.esb.test.quickstarts.dir"), location) ;
         return quickstartDir.getCanonicalPath() ;
     }
-    
+
+    public static boolean compareNonXMLContent(final String content1, final String content2, final boolean trimLines) throws IOException {
+        List<String> content1Lines = getLines(content1, trimLines);
+        List<String> content2Lines = getLines(content2, trimLines);
+
+        return content1Lines.equals(content2Lines);
+    }
+
+    private static List<String> getLines(final String string, final boolean trimLines) throws IOException {
+        BufferedReader reader = new BufferedReader(new StringReader(string));
+        List<String> lines = new ArrayList<String>();
+        String line;
+
+        while((line = reader.readLine()) != null) {
+            if(trimLines) {
+                lines.add(line.trim());
+            } else {
+                lines.add(line);
+            }
+        }
+
+        return lines;
+    }
+
     public static boolean compareXMLContent(final String content1, final String content2)
         throws ParserConfigurationException, SAXException, IOException
     {
-        final SAXParserFactory parserFactory = SAXParserFactory.newInstance() ;
-        parserFactory.setNamespaceAware(true) ;
-        
-        final SAXParser parser = parserFactory.newSAXParser() ;
-        
-        final IdentitySAXHandler handler1 = new IdentitySAXHandler() ;
-        parser.parse(new InputSource(new StringReader(content1)), handler1) ;
-        
-        final IdentitySAXHandler handler2 = new IdentitySAXHandler() ;
-        parser.parse(new InputSource(new StringReader(content2)), handler2) ;
-        
-        return (handler1.getRootElement().equals(handler2.getRootElement())) ;
+        try {
+            final SAXParserFactory parserFactory = SAXParserFactory.newInstance() ;
+            parserFactory.setNamespaceAware(true) ;
+
+            final SAXParser parser = parserFactory.newSAXParser() ;
+            final IdentitySAXHandler handler1;
+            final IdentitySAXHandler handler2;
+
+            try {
+                handler1 = new IdentitySAXHandler() ;
+                parser.parse(new InputSource(new StringReader(content1)), handler1) ;
+            } catch(SAXException e) {
+                System.out.println("Failed to parse content1 [" + content1 + "].");
+                throw e;
+            }
+
+            try {
+                handler2 = new IdentitySAXHandler() ;
+                parser.parse(new InputSource(new StringReader(content2)), handler2) ;
+            } catch(SAXException e) {
+                System.out.println("Failed to parse content2 [" + content2 + "].");
+                throw e;
+            }
+
+            return (handler1.getRootElement().equals(handler2.getRootElement())) ;
+        } catch(IOException e) {
+            e.printStackTrace();
+            throw e;
+        }
     }
     
     public static void main(final String[] args)

Modified: labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/ScriptingGroovyTest.java
===================================================================
--- labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/ScriptingGroovyTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/ScriptingGroovyTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -21,16 +21,15 @@
  */
 package org.jboss.soa.esb.quickstart.test;
 
-import java.io.File;
-import java.util.Hashtable;
-
 import junit.framework.Test;
-
 import org.jboss.soa.esb.actions.StoreMessageToFile;
 import org.jboss.soa.esb.samples.quickstart.scriptinggroovy.test.SendJMSMessage;
 import org.jboss.test.JBossTestCase;
 
+import java.io.File;
+import java.util.Hashtable;
 
+
 /**
  * Sample client for the jboss container.
  *
@@ -38,66 +37,61 @@
  */
 
 public class ScriptingGroovyTest
-        extends JBossTestCase
-{
+        extends JBossTestCase {
     private static final String JMS_MESSAGE = "ScriptingGroovyTest message";
 
     private static final String FILE_NAME = "ScriptingGroovyTest.log";
 
     private static final String LOG_FILE = Helpers.getTempDir(FILE_NAME)
-                    + FILE_NAME;
+            + FILE_NAME;
 
     private static final int EXPECTED_RECORD_COUNT = 1;
 
-	public ScriptingGroovyTest(String name)
-	{
-		super(name);
-	}
+    public ScriptingGroovyTest(String name) {
+        super(name);
+    }
 
-	public void testMessage() throws Exception
-	{
-            final File logFile = new File(LOG_FILE) ;
-            if (logFile.exists())
-            {
-                assertTrue("Deleting logfile", logFile.delete()) ;
-            }
-            
-            sendMessage();
+    public void testMessage() throws Exception {
+        final File logFile = new File(LOG_FILE);
+        if (logFile.exists()) {
+            assertTrue("Deleting logfile", logFile.delete());
+        }
 
-            /* Verify that the message file is created */
-            boolean fileExists = Helpers.checkForFile(LOG_FILE);
-            if (!fileExists) {
-                    fail("Event file " + LOG_FILE
-                                    + " not created - test marked as failing");
-            }
+        sendMessage();
 
-            /* Verify that the message file is complete */
-            boolean fileComplete = Helpers.checkFileContent(LOG_FILE,
-                            EXPECTED_RECORD_COUNT);
-            if (!fileComplete) {
-                    Hashtable<String, String> temp = Helpers.getMessageString(LOG_FILE);
-                    fail("Event file " + LOG_FILE + " not complete - expected "
-                                    + EXPECTED_RECORD_COUNT + " records - found " + temp.size()
-                                    + ", test marked as failing");
-            }
+        /* Verify that the message file is created */
+        boolean fileExists = Helpers.checkForFile(LOG_FILE);
+        if (!fileExists) {
+            fail("Event file " + LOG_FILE
+                    + " not created - test marked as failing");
+        }
 
-            Hashtable<String, String> theTable = Helpers.getMessageString(LOG_FILE);
-            String theMessage = (String) theTable.get("Message1");
-            assertEquals("The strings should match", JMS_MESSAGE, theMessage);
-            assertTrue("Deleting logfile", logFile.delete()) ;
-	}
+        /* Verify that the message file is complete */
+        boolean fileComplete = Helpers.checkFileContent(LOG_FILE,
+                EXPECTED_RECORD_COUNT);
+        if (!fileComplete) {
+            Hashtable<String, String> temp = Helpers.getMessageString(LOG_FILE);
+            fail("Event file " + LOG_FILE + " not complete - expected "
+                    + EXPECTED_RECORD_COUNT + " records - found " + temp.size()
+                    + ", test marked as failing");
+        }
 
-	public void sendMessage() throws Exception
-	{
-            SendJMSMessage sm = new SendJMSMessage();
-            sm.setupConnection();
-            sm.sendAMessage(JMS_MESSAGE + StoreMessageToFile.MESSAGE_CONTENT_FILENAME_START + FILE_NAME
-                            + StoreMessageToFile.MESSAGE_CONTENT_FILENAME_END) ;
-            sm.stop();
-	}
+        Hashtable<String, String> theTable = Helpers.getMessageString(LOG_FILE);
+        String theMessage = theTable.get("Message1");
 
-   public static Test suite() throws Exception
-   {
-      return getDeploySetup(ScriptingGroovyTest.class, "scripting-groovy-quickstart.esb");
-   }
+        assertEquals("The strings should match", JMS_MESSAGE, theMessage);
+        assertTrue("Deleting logfile", logFile.delete());
+    }
+
+    public void sendMessage() throws Exception {
+        SendJMSMessage sm = new SendJMSMessage();
+        sm.setupConnection();
+        sm.sendAMessage(JMS_MESSAGE + StoreMessageToFile.MESSAGE_CONTENT_FILENAME_START + FILE_NAME
+                + StoreMessageToFile.MESSAGE_CONTENT_FILENAME_END);
+        sm.stop();
+    }
+
+    public static Test suite() throws Exception {
+        return getDeploySetup(ScriptingGroovyTest.class, "scripting-groovy-quickstart.esb");
+    }
 }

Modified: labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/TransformXML2PojoTest.java
===================================================================
--- labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/TransformXML2PojoTest.java	2007-10-17 06:18:14 UTC (rev 15871)
+++ labs/jbossesb/trunk/qa/quickstarts/src/org/jboss/soa/esb/quickstart/test/TransformXML2PojoTest.java	2007-10-17 08:47:44 UTC (rev 15872)
@@ -50,7 +50,7 @@
 		File target = new File(LOG_FILE);
 		String targetString = FileUtil.readTextFile(target);
 		String expectedString = FileUtil.readStream(is);
-		final boolean match = Helpers.compareXMLContent(expectedString, targetString) ;
+		final boolean match = Helpers.compareNonXMLContent(expectedString, targetString, true);
                 assertTrue("Unexpected response: " + targetString, match) ;
 				
                 assertTrue("Deleting logfile", logFile.delete()) ;




More information about the jboss-svn-commits mailing list