You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2014/10/10 14:55:10 UTC
svn commit: r1630838 - in
/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms:
AutoOutboundTransformer.java JMSMappingOutboundTransformer.java
OutboundTransformer.java
Author: gsim
Date: Fri Oct 10 12:55:10 2014
New Revision: 1630838
URL: http://svn.apache.org/r1630838
Log:
PROTON-694: split conversion and encoding during outbound transformation to allow calling separately
Applied patch from Clebert Suconic
Modified:
qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java
qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java
qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java
Modified: qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java?rev=1630838&r1=1630837&r2=1630838&view=diff
==============================================================================
--- qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java (original)
+++ qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java Fri Oct 10 12:55:10 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/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java?rev=1630838&r1=1630837&r2=1630838&view=diff
==============================================================================
--- qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java (original)
+++ qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java Fri Oct 10 12:55:10 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/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java?rev=1630838&r1=1630837&r2=1630838&view=diff
==============================================================================
--- qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java (original)
+++ qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java Fri Oct 10 12:55:10 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