Author: senaka
Date: Mon Oct 20 13:46:11 2008
New Revision: 706401

URL: http://svn.apache.org/viewvc?rev=706401&view=rev
Log:
Adding JMS MapMessage support.

Added:
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/MapMessageInputStream.java
Modified:
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/pom.xml
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseUtils.java
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/pom.xml
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
    
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/pom.xml
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/pom.xml?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/pom.xml
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/pom.xml
 Mon Oct 20 13:46:11 2008
@@ -92,6 +92,11 @@
             <artifactId>axiom-dom</artifactId>
             <version>${axiom.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>sciflex-axiom-patch</artifactId>
+            <version>${sciflex-axiom-patch.version}</version>
+        </dependency>
         <!-- Axis2 -->
         <dependency>
             <groupId>org.apache.axis2</groupId>
@@ -148,6 +153,7 @@
         <axiom.version>SNAPSHOT</axiom.version>
         <axis2.version>SNAPSHOT</axis2.version>
         <commons.logging.version>1.1</commons.logging.version>
+        <sciflex-axiom-patch.version>0.9-SNAPSHOT</sciflex-axiom-patch.version>
     </properties>
 
 </project>

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java
 Mon Oct 20 13:46:11 2008
@@ -72,6 +72,12 @@
     public static final QName DEFAULT_TEXT_WRAPPER =
             new QName(AXIOMPAYLOADNS, "text");
 
+    /**
+     * The name of the element which wraps map content into a SOAP envelope
+     */
+    public static final QName DEFAULT_MAP_WRAPPER =
+            new QName(AXIOMPAYLOADNS, "map");
+
     //-------------------------- services.xml parameters 
--------------------------------
     /**
      * The Parameter name indicating the operation to dispatch non SOAP/XML 
messages

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseUtils.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseUtils.java?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseUtils.java
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseUtils.java
 Mon Oct 20 13:46:11 2008
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 
 import javax.activation.DataHandler;
 import javax.mail.internet.ContentType;
@@ -35,7 +36,9 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.OMSourcedElement;
 import org.apache.axiom.om.OMText;
+import org.apache.axiom.om.ds.MapDataSource;
 import org.apache.axiom.om.impl.builder.StAXBuilder;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.impl.llom.OMTextImpl;
@@ -322,8 +325,19 @@
                 msgContext.setDoingMTOM(true);
                 
             } else {
-                handleException("Unable to read payload from message of type : 
"
-                    + message.getClass().getName());
+                Map msgMap = getMessageMapPayload(message);
+                if (msgMap != null) {
+                    if (wrapperQName == null) {
+                        wrapperQName = BaseConstants.DEFAULT_MAP_WRAPPER;
+                    }
+                    OMSourcedElement omData = soapFactory.createOMElement(new 
MapDataSource(msgMap, 
+                        wrapperQName.getLocalPart(), 
soapFactory.createOMNamespace(wrapperQName.getNamespaceURI(), 
wrapperQName.getPrefix())),
+                        wrapperQName.getLocalPart(), 
soapFactory.createOMNamespace(wrapperQName.getNamespaceURI(), 
wrapperQName.getPrefix()));
+                    wrapper = (OMElement) omData; 
+                } else {
+                    handleException("Unable to read payload from message of 
type : "
+                        + message.getClass().getName());
+                }
             }
         }
 
@@ -366,6 +380,14 @@
      */
     public abstract byte[] getMessageBinaryPayload(Object message);
 
+    /**
+     * Get the message payload as a Map, if the message is a non-SOAP, 
non-XML, binary Map-based message
+     *
+     * @param message the message Object
+     * @return the payload of the message as a Map
+     */
+    public abstract Map getMessageMapPayload(Object message);
+
     protected static void handleException(String s) {
         log.error(s);
         throw new BaseTransportException(s);

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/pom.xml
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/pom.xml?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/pom.xml 
(original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/pom.xml 
Mon Oct 20 13:46:11 2008
@@ -71,6 +71,12 @@
             <artifactId>geronimo-jms_1.1_spec</artifactId>
             <version>${jms-1.1-spec.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>sciflex-axiom-patch</artifactId>
+            <version>${sciflex-axiom-patch.version}</version>
+        </dependency>
     </dependencies>
     
     <properties>
@@ -78,6 +84,7 @@
         <commons.logging.version>1.1</commons.logging.version>
         <axis2-transport-base.version>SNAPSHOT</axis2-transport-base.version>
         <jms-1.1-spec.version>1.1</jms-1.1-spec.version>
+        <sciflex-axiom-patch.version>0.9-SNAPSHOT</sciflex-axiom-patch.version>
     </properties>
 
-</project>
\ No newline at end of file
+</project>

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
 Mon Oct 20 13:46:11 2008
@@ -93,6 +93,10 @@
      */
     public static final String JMS_BYTE_MESSAGE = "JMS_BYTE_MESSAGE";
     /**
+     * The message type indicating a MapMessage. See JMS_MESSAGE_TYPE
+     */
+    public static final String JMS_MAP_MESSAGE = "JMS_MAP_MESSAGE";
+    /**
      * The message type indicating a TextMessage. See JMS_MESSAGE_TYPE
      */
     public static final String JMS_TEXT_MESSAGE = "JMS_TEXT_MESSAGE";

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
 Mon Oct 20 13:46:11 2008
@@ -103,6 +103,8 @@
         try {
             if (message instanceof BytesMessage) {
                 
metrics.incrementBytesReceived((JMSUtils.getBodyLength((BytesMessage) 
message)));
+            } else if (message instanceof MapMessage) {
+                
metrics.incrementBytesReceived((JMSUtils.getBodyLength((MapMessage) message)));
             } else if (message instanceof TextMessage) {
                 metrics.incrementBytesReceived(((TextMessage) 
message).getText().getBytes().length);
             } else {

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
 Mon Oct 20 13:46:11 2008
@@ -16,9 +16,12 @@
 package org.apache.axis2.transport.jms;
 
 import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.OMDataSourceExt;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMSourcedElement;
 import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.ds.MapDataSource;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.ConfigurationContext;
@@ -243,6 +246,8 @@
                     try {
                         if (message instanceof BytesMessage) {
                             
metrics.incrementBytesSent(JMSUtils.getBodyLength((BytesMessage) message));
+                        } else if (message instanceof MapMessage) {
+                            
metrics.incrementBytesSent((JMSUtils.getBodyLength((MapMessage) message)));
                         } else if (message instanceof TextMessage) {
                             metrics.incrementBytesSent((
                                 (TextMessage) 
message).getText().getBytes().length);
@@ -337,6 +342,8 @@
                 try {
                     if (reply instanceof BytesMessage) {
                         
metrics.incrementBytesReceived(JMSUtils.getBodyLength((BytesMessage) reply));
+                    } else if (reply instanceof MapMessage) {
+                        
metrics.incrementBytesReceived((JMSUtils.getBodyLength((MapMessage) reply)));
                     } else if (reply instanceof TextMessage) {
                         metrics.incrementBytesReceived((
                             (TextMessage) reply).getText().getBytes().length);
@@ -418,6 +425,26 @@
                 message = session.createBytesMessage();
                 BytesMessage bytesMsg = (BytesMessage) message;
                 bytesMsg.writeBytes(baos.toByteArray());
+            } else if (msgType != null && 
JMSConstants.JMS_MAP_MESSAGE.equals(msgType)) {
+                message = session.createMapMessage();
+                MapMessage mapMsg = (MapMessage) message;
+                OMElement wrapper = 
msgContext.getEnvelope().getBody().getFirstElement();
+                if (wrapper != null && wrapper instanceof OMSourcedElement) {
+                    OMSourcedElement omNode = (OMSourcedElement) wrapper;
+                    Object ds = omNode.getDataSource();
+                    if (ds != null && ds instanceof MapDataSource) {
+                        OMDataSourceExt dse = (OMDataSourceExt) 
omNode.getDataSource();
+                        Map map = (Map) dse.getObject();
+                        Iterator it = map.keySet().iterator();
+                        while (it.hasNext()) {
+                            Object key = it.next();
+                            Object value = map.get(key);
+                            if (key != null && value != null && key instanceof 
String) {
+                                mapMsg.setObject((String)key, value);
+                            }
+                        }
+                    }
+                }
             } else {
                 message = session.createTextMessage();  // default
                 TextMessage txtMsg = (TextMessage) message;
@@ -454,6 +481,27 @@
             TextMessage txtMsg = (TextMessage) message;
             txtMsg.setText(msgContext.getEnvelope().getBody().
                 
getFirstChildWithName(BaseConstants.DEFAULT_TEXT_WRAPPER).getText());
+        } else if (JMSConstants.JMS_MAP_MESSAGE.equals(jmsPayloadType)) {
+            message = session.createMapMessage();
+            MapMessage mapMsg = (MapMessage) message;
+            OMElement wrapper = msgContext.getEnvelope().getBody().
+                getFirstChildWithName(BaseConstants.DEFAULT_MAP_WRAPPER);
+            if (wrapper != null && wrapper instanceof OMSourcedElement) {
+                OMSourcedElement omNode = (OMSourcedElement) wrapper;
+                Object ds = omNode.getDataSource();
+                if (ds != null && ds instanceof MapDataSource) {
+                    OMDataSourceExt dse = (OMDataSourceExt) 
omNode.getDataSource();
+                    Map map = (Map) dse.getObject();
+                    Iterator it = map.keySet().iterator();
+                    while (it.hasNext()) {
+                        Object key = it.next();
+                        Object value = map.get(key);
+                        if (key != null && value != null && key instanceof 
String) {
+                            mapMsg.setObject((String)key, value);
+                        }
+                    }
+                }
+            }   
         }
 
         // set the JMS correlation ID if specified
@@ -483,7 +531,8 @@
     /**
      * Guess the message type to use for JMS looking at the message contexts' 
envelope
      * @param msgContext the message context
-     * @return JMSConstants.JMS_BYTE_MESSAGE or JMSConstants.JMS_TEXT_MESSAGE 
or null
+     * @return JMSConstants.JMS_BYTE_MESSAGE, JMSConstants.JMS_TEXT_MESSAGE, 
+     * JMSConstants.JMS_MAP_MESSAGE or null
      */
     private String guessMessageType(MessageContext msgContext) {
         OMElement firstChild = 
msgContext.getEnvelope().getBody().getFirstElement();
@@ -492,6 +541,8 @@
                 return JMSConstants.JMS_BYTE_MESSAGE;
             } else if 
(BaseConstants.DEFAULT_TEXT_WRAPPER.equals(firstChild.getQName())) {
                 return JMSConstants.JMS_TEXT_MESSAGE;
+            } else if 
(BaseConstants.DEFAULT_MAP_WRAPPER.equals(firstChild.getQName())) {
+                return JMSConstants.JMS_MAP_MESSAGE;
             }
         }
         return null;

Modified: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java?rev=706401&r1=706400&r2=706401&view=diff
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
 (original)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
 Mon Oct 20 13:46:11 2008
@@ -330,6 +330,16 @@
                             
txtMsg.getText().getBytes(MessageContext.DEFAULT_CHAR_SET_ENCODING));
                 }
 
+            } else if (message instanceof MapMessage) {
+                MapMessage mapMsg = (MapMessage) message;
+                String contentType = getProperty(mapMsg, 
BaseConstants.CONTENT_TYPE);
+
+                if (contentType != null) {
+                    return new MapMessageInputStream(mapMsg, 
BuilderUtil.getCharSetEncoding(contentType));
+                } else {
+                    return new MapMessageInputStream(mapMsg, 
MessageContext.DEFAULT_CHAR_SET_ENCODING);
+                }
+
             } else {
                 handleException("Unsupported JMS message type : " + 
message.getClass().getName());
             }
@@ -722,6 +732,31 @@
         return null;
     }
 
+    public Map getMessageMapPayload(Object message) {
+
+        if (message instanceof MapMessage) {
+            MapMessage mapMessage = (MapMessage) message;
+
+            try {
+                Map outMap = new TreeMap();
+                for (Enumeration e = mapMessage.getMapNames() ; 
e.hasMoreElements() ;) {
+                    String key = (String) e.nextElement();
+                    Object value = mapMessage.getObject(key);
+                    if (value != null) {
+                        outMap.put(key, value);
+                    } else {
+                        log.warn("Ignoring key " + key + " that did not return 
any value");
+                    }
+                }
+                return outMap;
+
+            } catch (JMSException e) {
+                handleException("Error reading JMS map message payload", e);
+            }
+        }
+        return null;
+    }
+
     // ----------- JMS 1.0.2b compatibility methods -------------
     public static Connection createConnection(ConnectionFactory conFactory, 
String user,
         String pass, String destinationType) throws JMSException {
@@ -830,6 +865,42 @@
         } catch (JMSException ignore) {}
         return length;
     }
+
+    public static long getBodyLength(MapMessage mMsg) {
+        long length = 0;
+        MapMessage mapMessage = (MapMessage) mMsg;
+            try {
+                for (Enumeration e = mMsg.getMapNames() ; e.hasMoreElements() 
;) {
+                    String key = (String) e.nextElement();
+                    Object value = mMsg.getObject(key);
+                    if (value != null) {
+                        if (value instanceof Boolean || value instanceof Byte) 
{
+                            length += 1;
+                        } else if (value instanceof Character || value 
instanceof Short) {
+                            length += 2;
+                        } else if (value instanceof Integer || value 
instanceof Float) {
+                            length += 4;
+                        } else if (value instanceof Long || value instanceof 
Double) {
+                            length += 8;
+                        } else if (value instanceof byte[]) {
+                            length += ((byte[])value).length;
+                        } else if (value instanceof String) {
+                            length += ((String) value).getBytes().length;
+                        } else {
+                            log.error("Unable to determine message size. 
Invalid Object Type : " + value.getClass().getName());
+                            return 0; 
+                        }
+                    } else {
+                        log.warn("Ignoring key " + key + " that did not return 
any value");
+                    }
+                    length += key.getBytes().length;
+                }
+
+            } catch (JMSException e) {
+                handleException("Error reading JMS map message payload", e);
+            }
+            return length; 
+    }
     
     public static <T> T lookup(Context context, Class<T> clazz, String name)
         throws NamingException {

Added: 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/MapMessageInputStream.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/MapMessageInputStream.java?rev=706401&view=auto
==============================================================================
--- 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/MapMessageInputStream.java
 (added)
+++ 
webservices/commons/trunk/scratch/senaka/sci-flex/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/MapMessageInputStream.java
 Mon Oct 20 13:46:11 2008
@@ -0,0 +1,101 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.axis2.transport.jms;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.ds.MapDataSource;
+import org.apache.axis2.transport.base.BaseConstants;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Map;
+
+import javax.jms.MapMessage;
+import javax.jms.JMSException;
+import javax.jms.MessageEOFException;
+import javax.xml.namespace.QName;
+
+/**
+ * Input stream that reads data from a JMS [EMAIL PROTECTED] MapMessage}.
+ */
+public class MapMessageInputStream extends InputStream {
+
+    private static final Log log = 
LogFactory.getLog(MapMessageInputStream.class);
+    private MapMessage message;
+    private String encoding;
+    private ByteArrayInputStream byteStream = null;
+
+    public MapMessageInputStream(MapMessage message, String encoding) {
+        this.message = message;
+        this.encoding = encoding;
+    }
+
+    private ByteArrayInputStream getByteStream() {
+        if (byteStream != null) {
+            return byteStream;
+        } else {
+            JMSUtils utils = new JMSUtils();
+            Map payloadMap = utils.getMessageMapPayload(message);
+            if (payloadMap != null) {
+                QName wrapperQName = BaseConstants.DEFAULT_MAP_WRAPPER;
+                OMFactory ombuilderFactory = OMAbstractFactory.getOMFactory();
+                // It was assumed that the creation of a MapDataSource in here 
will
+                // always be based on the default wrapper QName.
+                MapDataSource mds = new MapDataSource(payloadMap, 
wrapperQName.getLocalPart(),
+                    
ombuilderFactory.createOMNamespace(wrapperQName.getNamespaceURI(), 
wrapperQName.getPrefix()));
+                try {
+                    byteStream = new 
ByteArrayInputStream(mds.getXMLBytes(encoding));
+                } catch (UnsupportedEncodingException e) {
+                    log.error("Unsupported Encoding");
+                    byteStream = null;
+                }
+            }
+            return byteStream;
+        }
+    }
+
+    @Override
+    public int read() {
+        ByteArrayInputStream readStream = getByteStream();
+        if (readStream == null) {
+            return -1;
+        }
+        return readStream.read();
+    }
+
+    @Override
+    public int read(byte[] b, int off, int len) {
+        ByteArrayInputStream readStream = getByteStream();
+        if (readStream == null) {
+            return -1;
+        }
+        return readStream.read(b, off, len);
+    }
+
+    @Override
+    public int read(byte[] b) throws IOException {
+        ByteArrayInputStream readStream = getByteStream();
+        if (readStream == null) {
+            return -1;
+        }
+        return readStream.read(b);
+    }
+}


Reply via email to