You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/09/22 20:49:49 UTC

svn commit: r1626868 - in /qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms: AutoOutboundTransformer.java JMSMappingOutboundTransformer.java OutboundTransformer.java

Author: robbie
Date: Mon Sep 22 18:49:48 2014
New Revision: 1626868

URL: http://svn.apache.org/r1626868
Log:
PROTON-694: split conversion and encoding during outbound transformation to allow calling separately

Applied patch from Clebert Suconic

Modified:
    qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java
    qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java
    qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java

Modified: qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java?rev=1626868&r1=1626867&r2=1626868&view=diff
==============================================================================
--- qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java (original)
+++ qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java Mon Sep 22 18:49:48 2014
@@ -24,8 +24,11 @@ import javax.jms.Message;
 */
 public class AutoOutboundTransformer extends JMSMappingOutboundTransformer {
 
+    private final JMSMappingOutboundTransformer transformer;
+
     public AutoOutboundTransformer(JMSVendor vendor) {
         super(vendor);
+        transformer = new JMSMappingOutboundTransformer(vendor);
     }
 
     @Override
@@ -39,7 +42,7 @@ public class AutoOutboundTransformer ext
                 return null;
             }
         } else {
-            return JMSMappingOutboundTransformer.transform(this, msg);
+            return transformer.transform(msg);
         }
     }
 

Modified: qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java?rev=1626868&r1=1626867&r2=1626868&view=diff
==============================================================================
--- qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java (original)
+++ qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java Mon Sep 22 18:49:48 2014
@@ -36,14 +36,10 @@ import java.util.Enumeration;
 import java.util.HashMap;
 
 /**
-* @author <a href="http://hiramchirino.com">Hiram Chirino</a>
-*/
+ * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
+ */
 public class JMSMappingOutboundTransformer extends OutboundTransformer {
 
-    String prefixDeliveryAnnotations = "DA_";
-    String prefixMessageAnnotations= "MA_";
-    String prefixFooter = "FT_";
-
     public JMSMappingOutboundTransformer(JMSVendor vendor) {
         super(vendor);
     }
@@ -59,30 +55,37 @@ public class JMSMappingOutboundTransform
         } catch (MessageFormatException e) {
             return null;
         }
-        return transform(this, msg);
-    }
-
-    static EncodedMessage transform(JMSMappingOutboundTransformer options, Message msg) throws JMSException, UnsupportedEncodingException {
-        final JMSVendor vendor = options.vendor;
-
-        final String messageFormatKey = options.prefixVendor + "MESSAGE_FORMAT";
-        final String nativeKey = options.prefixVendor + "NATIVE";
-        final String firstAcquirerKey = options.prefixVendor + "FirstAcquirer";
-        final String prefixDeliveryAnnotationsKey = options.prefixVendor + options.prefixDeliveryAnnotations;
-        final String prefixMessageAnnotationsKey = options.prefixVendor + options.prefixMessageAnnotations;
-        final String subjectKey =  options.prefixVendor +"Subject";
-        final String contentTypeKey = options.prefixVendor +"ContentType";
-        final String contentEncodingKey = options.prefixVendor +"ContentEncoding";
-        final String replyToGroupIDKey = options.prefixVendor +"ReplyToGroupID";
-        final String prefixFooterKey = options.prefixVendor + options.prefixFooter;
+        ProtonJMessage amqp = convert(msg);
 
         long messageFormat;
         try {
-            messageFormat = msg.getLongProperty(messageFormatKey);
+            messageFormat = msg.getLongProperty(this.messageFormatKey);
         } catch (MessageFormatException e) {
             return null;
         }
 
+        ByteBuffer buffer = ByteBuffer.wrap(new byte[1024 * 4]);
+        final DroppingWritableBuffer overflow = new DroppingWritableBuffer();
+        int c = amqp.encode(new CompositeWritableBuffer(
+                new WritableBuffer.ByteBufferWrapper(buffer), overflow));
+        if( overflow.position() > 0 ) {
+            buffer = ByteBuffer.wrap(new byte[1024 * 4 + overflow.position()]);
+            c = amqp.encode(new WritableBuffer.ByteBufferWrapper(buffer));
+        }
+
+        return new EncodedMessage(messageFormat, buffer.array(), 0, c);
+    }
+
+    /**
+     * Perform the conversion between JMS Message and Proton Message without re-encoding it to array.
+     * This is needed because some frameworks may elect to do this on their own way (Netty for instance using Nettybuffers)
+     *
+     * @param msg
+     * @return
+     * @throws Exception
+     */
+    public ProtonJMessage convert(Message msg)
+            throws JMSException, UnsupportedEncodingException {
         Header header = new Header();
         Properties props=new Properties();
         HashMap<Symbol, Object> daMap = null;
@@ -213,17 +216,7 @@ public class JMSMappingOutboundTransform
         Footer footer=null;
         if( footerMap!=null ) footer = new Footer(footerMap);
 
-        ProtonJMessage amqp = (ProtonJMessage) org.apache.qpid.proton.message.Message.Factory.create(header, da, ma, props, ap, body, footer);
-
-        ByteBuffer buffer = ByteBuffer.wrap(new byte[1024*4]);
-        final DroppingWritableBuffer overflow = new DroppingWritableBuffer();
-        int c = amqp.encode(new CompositeWritableBuffer(new WritableBuffer.ByteBufferWrapper(buffer), overflow));
-        if( overflow.position() > 0 ) {
-            buffer = ByteBuffer.wrap(new byte[1024*4+overflow.position()]);
-            c = amqp.encode(new WritableBuffer.ByteBufferWrapper(buffer));
-        }
-
-        return new EncodedMessage(messageFormat, buffer.array(), 0, c);
+        return (ProtonJMessage) org.apache.qpid.proton.message.Message.Factory.create(header, da, ma, props, ap, body, footer);
     }
 
     private static String destinationAttributes(Destination destination) {

Modified: qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java?rev=1626868&r1=1626867&r2=1626868&view=diff
==============================================================================
--- qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java (original)
+++ qpid/proton/trunk/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java Mon Sep 22 18:49:48 2014
@@ -26,10 +26,28 @@ import javax.jms.Message;
 public abstract class OutboundTransformer {
 
     JMSVendor vendor;
-    String prefixVendor = "JMS_AMQP_";
+    String prefixVendor;
 
-    public OutboundTransformer(JMSVendor vendor) {
+    String prefixDeliveryAnnotations = "DA_";
+    String prefixMessageAnnotations= "MA_";
+    String prefixFooter = "FT_";
+
+    String messageFormatKey;
+    String nativeKey;
+    String firstAcquirerKey;
+    String prefixDeliveryAnnotationsKey;
+    String prefixMessageAnnotationsKey;
+    String subjectKey;
+    String contentTypeKey;
+    String contentEncodingKey;
+    String replyToGroupIDKey;
+    String prefixFooterKey;
+
+
+
+   public OutboundTransformer(JMSVendor vendor) {
         this.vendor = vendor;
+        this.setPrefixVendor("JMS_AMQP_");
     }
 
     public abstract EncodedMessage transform(Message jms) throws Exception;
@@ -40,6 +58,18 @@ public abstract class OutboundTransforme
 
     public void setPrefixVendor(String prefixVendor) {
         this.prefixVendor = prefixVendor;
+
+        messageFormatKey = prefixVendor + "MESSAGE_FORMAT";
+        nativeKey = prefixVendor + "NATIVE";
+        firstAcquirerKey = prefixVendor + "FirstAcquirer";
+        prefixDeliveryAnnotationsKey = prefixVendor + prefixDeliveryAnnotations;
+        prefixMessageAnnotationsKey = prefixVendor + prefixMessageAnnotations;
+        subjectKey =  prefixVendor +"Subject";
+        contentTypeKey = prefixVendor +"ContentType";
+        contentEncodingKey = prefixVendor +"ContentEncoding";
+        replyToGroupIDKey = prefixVendor +"ReplyToGroupID";
+        prefixFooterKey = prefixVendor + prefixFooter;
+
     }
 
     public JMSVendor getVendor() {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org