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-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org