Index: pom.xml
===================================================================
--- pom.xml	(revision 15668)
+++ pom.xml	(working copy)
@@ -3,7 +3,7 @@
 	<parent>
 		<artifactId>petals-components-sls-parent</artifactId>
 		<groupId>org.ow2.petals</groupId>
-		<version>1</version>
+		<version>3-SNAPSHOT</version>
 	</parent>
 
 	<name>Petals ESB Binding Component :: JMS</name>
@@ -36,8 +36,25 @@
 		<dependency>
 			<groupId>org.ow2.petals</groupId>
 			<artifactId>petals-cdk-core</artifactId>
-			<version>5.0.2</version>
+			<version>5.1-SNAPSHOT</version>
 		</dependency>
+		
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-core</artifactId>
+         <version>5.3.0</version>
+         <scope>test</scope>
+         <exclusions>
+            <exclusion>
+               <groupId>org.apache.camel</groupId>
+               <artifactId>camel-core</artifactId>
+            </exclusion>
+            <exclusion>
+               <groupId>org.apache.activemq</groupId>
+               <artifactId>activeio-core</artifactId>
+            </exclusion>
+         </exclusions>
+      </dependency> 
 	</dependencies>
 
 	<build>
Index: src/main/java/org/ow2/petals/bc/jms/listener/JMSMessageListener.java
===================================================================
--- src/main/java/org/ow2/petals/bc/jms/listener/JMSMessageListener.java	(revision 15668)
+++ src/main/java/org/ow2/petals/bc/jms/listener/JMSMessageListener.java	(working copy)
@@ -22,6 +22,16 @@
 package org.ow2.petals.bc.jms.listener;
 
 
+import static org.ow2.petals.bc.jms.Constants.Extensions.OPERATION;
+import static org.ow2.petals.bc.jms.Constants.JMSPropertyNames.JMS_OPERATION_NAME;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.StringReader;
 import java.util.Enumeration;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -30,12 +40,19 @@
 import javax.jbi.messaging.NormalizedMessage;
 import javax.jms.BytesMessage;
 import javax.jms.JMSException;
+import javax.jms.MapMessage;
 import javax.jms.Message;
 import javax.jms.MessageListener;
 import javax.jms.ObjectMessage;
 import javax.jms.TextMessage;
 import javax.xml.namespace.QName;
+import javax.xml.transform.Result;
 import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
 
 import org.apache.commons.lang.CharEncoding;
 import org.ow2.petals.bc.jms.Constants;
@@ -46,8 +63,6 @@
 import org.ow2.petals.component.framework.listener.AbstractExternalListener;
 import org.ow2.petals.component.framework.util.UtilFactory;
 
-import static org.ow2.petals.bc.jms.Constants.Extensions.OPERATION;
-import static org.ow2.petals.bc.jms.Constants.JMSPropertyNames.JMS_OPERATION_NAME;
 
 /**
  * This class is the JMS message listener for the JmsBC component
@@ -77,9 +92,10 @@
         try {
             // 1. Only TextMessage, BytesMessage or Object Message are
             // supported.
-            if (!(jmsExchange instanceof TextMessage || jmsExchange instanceof BytesMessage || jmsExchange instanceof ObjectMessage)) {
+            if (!(jmsExchange instanceof TextMessage || jmsExchange instanceof BytesMessage
+                    || jmsExchange instanceof ObjectMessage || jmsExchange instanceof MapMessage)) {
                 this.logger.log(Level.SEVERE,
-                        "Only TextMessage, BytesMessage or ObjectMessage are supported."
+                        "Only TextMessage, BytesMessage, ObjectMessage or MapMessage are supported."
                                 + jmsExchange.getClass().getName());
             }
 
@@ -112,15 +128,16 @@
                 this.logger.log(Level.FINEST, "It's a TextMessage.");
                 final TextMessage textMessage = (TextMessage) jmsExchange;
                 this.transform(textMessage, exchange);
-            } /*else if (jmsExchange instanceof BytesMessage) {
-                this.logger.log(Level.FINEST, "It's a BytesMessage.");
-                final BytesMessage byteMessage = (BytesMessage) jmsExchange;
-                this.transform(byteMessage, exchange);
-            } else if (jmsExchange instanceof ObjectMessage) {
-                this.logger.log(Level.FINEST, "It's a ObjectMessage.");
-                final ObjectMessage objectMessage = (ObjectMessage) jmsExchange;
-                transform(objectMessage, exchange);
-            }*/
+            } else if (jmsExchange instanceof MapMessage) {
+                this.logger.log(Level.FINEST, "It's a MapMessage.");
+                final MapMessage mapMessage = (MapMessage) jmsExchange;
+                this.transform(mapMessage, exchange);
+            }/*
+              * else if (jmsExchange instanceof BytesMessage) { this.logger.log(Level.FINEST, "It's a BytesMessage.");
+              * final BytesMessage byteMessage = (BytesMessage) jmsExchange; this.transform(byteMessage, exchange); }
+              * else if (jmsExchange instanceof ObjectMessage) { this.logger.log(Level.FINEST, "It's a ObjectMessage.");
+              * final ObjectMessage objectMessage = (ObjectMessage) jmsExchange; transform(objectMessage, exchange); }
+              */
 
             // 4. send the exchange, use the framework's send() method
             this.externalListener.send(exchange);
@@ -169,8 +186,81 @@
     }
 
     /**
-     * Transform the BytesMessage into a NormalizedMessage of the JBI MsgExch .
-     * The content and properties are set.
+     * Transform the MapMessage into a NormalizedMessage of the JBI MsgExch . The content and properties are set.
+     * 
+     * @param jmsMessage
+     * @param exchange
+     * @throws PEtALSComponentSDKException
+     *             can not create a Source object from the jms map content
+     * @throws JMSException
+     *             getting jms content or properties
+     * @throws MessagingException
+     *             setting NormalizedMessage properties or content
+     * @throws PEtALSCDKException
+     */
+    private void transform(final MapMessage jmsMessage, final Exchange exchange) throws JMSException,
+            MessagingException, PEtALSCDKException {
+        this.logger.log(Level.FINE, "transform");
+
+        // We load the XSL
+        final String xslName = this.externalListener.getExtensions().get("xsl");
+        FileInputStream fisXsl;
+        try {
+            fisXsl = new FileInputStream(new File(this.externalListener.getInstallRoot(), xslName));
+            if (fisXsl != null) {
+                try {
+
+                    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+                    final Transformer transformer = TransformerFactory.newInstance().newTransformer(
+                            new StreamSource(fisXsl));
+
+                    // We set JMS map as global parameters into the XSL
+                    final Enumeration<String> jmsPropertyNames = jmsMessage.getMapNames();
+                    while (jmsPropertyNames.hasMoreElements()) {
+                        final String jmsPropertyName = jmsPropertyNames.nextElement();
+                        final String jmsPropertyValue = jmsMessage.getString(jmsPropertyName);
+                        if (this.logger.isLoggable(Level.FINE)) {
+                            this.logger.fine("JMS MapMessage property: name=" + jmsPropertyName + ", value="
+                                    + jmsPropertyValue);
+                        }
+                        transformer.setParameter(jmsPropertyName, jmsPropertyValue);
+                    }
+
+                    final Result outputResult = new StreamResult(baos);
+                    transformer.transform(new StreamSource(new StringReader("<empty></empty>")), outputResult);
+
+                    exchange.getInMessage().setContent(new StreamSource(new ByteArrayInputStream(baos.toByteArray())));
+
+                    // set the operation in the JBI message exchange
+                    this.setOperation(jmsMessage, exchange);
+
+                    // set remaining properties of the JMS message into the JBI message
+                    // exchange normalized message "IN"
+                    this.setMessageProperties(jmsMessage, exchange.getInMessage());
+
+                } catch (final TransformerException e) {
+                    throw new PEtALSCDKException(e);
+                } finally {
+                    try {
+                        fisXsl.close();
+                    } catch (IOException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            } else {
+                throw new PEtALSCDKException("Unable to load the Xsl '" + xslName);
+            }
+        } catch (FileNotFoundException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+
+    }
+
+    /**
+     * Transform the BytesMessage into a NormalizedMessage of the JBI MsgExch . The content and properties are set.
      * 
      * @param jmsMessage
      * @param exchange
Index: src/main/jbi/jbi.xml
===================================================================
--- src/main/jbi/jbi.xml	(revision 15668)
+++ src/main/jbi/jbi.xml	(working copy)
@@ -11,12 +11,14 @@
 		<component-class-path><path-element/></component-class-path>
 		<bootstrap-class-name>org.ow2.petals.component.framework.DefaultBootstrap</bootstrap-class-name>
 		<bootstrap-class-path><path-element/></bootstrap-class-path>
+      
+      <shared-library version="5.3.1-SNAPSHOT">petals-sl-activemq</shared-library> 
 		
 		<petalsCDK:acceptor-pool-size>5</petalsCDK:acceptor-pool-size>
 		<petalsCDK:processor-pool-size>10</petalsCDK:processor-pool-size>
 		<petalsCDK:ignored-status>DONE_AND_ERROR_IGNORED</petalsCDK:ignored-status>
 		
-		<petalsCDK:jbi-listener-class-name>org.ow2.petals.bc.jms.listener.JBIListener</petalsCDK:jbi-listener-class-name>
 		<petalsCDK:external-listener-class-name>org.ow2.petals.bc.jms.listener.JMSExternalListener</petalsCDK:external-listener-class-name>			
-	</component>
+	   <petalsCDK:jbi-listener-class-name>org.ow2.petals.bc.jms.listener.JBIListener</petalsCDK:jbi-listener-class-name>
+   </component>
 </jbi>
Index: src/test/java/PostMapMessage.java
===================================================================
--- src/test/java/PostMapMessage.java	(revision 0)
+++ src/test/java/PostMapMessage.java	(revision 0)
@@ -0,0 +1,56 @@
+import java.util.Hashtable;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import junit.framework.TestCase;
+
+
+public class PostMapMessage extends TestCase {
+    
+    public void test() {
+
+        try {
+            // get the initial context
+            final Hashtable<String, String> env = new Hashtable<String, String>();
+            env.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
+            env.put("java.naming.provider.url", "tcp://localhost:61616");
+            InitialContext ctx = new InitialContext(env);
+
+            // lookup the queue connection factory
+            ConnectionFactory connFactory = (ConnectionFactory) ctx.lookup("QueueConnectionFactory");
+            // lookup the queue object
+            Destination queue = (Destination) ctx.lookup("dynamicQueues/FOO.BAR");
+
+            // create a queue connection
+            Connection queueConn = connFactory.createConnection();
+            // create a queue session
+            Session queueSession = queueConn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+            MessageProducer producer = queueSession.createProducer(queue);
+
+            // create a simple message
+            MapMessage message = queueSession.createMapMessage();
+            message.setShort("myShort", (short) 10);
+            message.setInt("myInt", 20);
+            message.setString("myString", "stringValue");
+            producer.send(message);
+
+            queueConn.close();
+        } catch (NamingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (JMSException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+}
