From 6c044b5802bc92d3a3738fb1cac9950c14fc2d83 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Wed, 27 Aug 2014 10:36:38 +0000 Subject: QPID-6047 : [Java Broker] Improve Message conversion between 1.0 and 0.x protocols - add mapping from application property qpid.subject to the 1.0 subject property git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1620858 13f79535-47bb-0310-9956-ffa450edef68 --- .../v0_10_v1_0/MessageConverter_0_10_to_1_0.java | 16 ++++++++++++++-- .../v0_10_v1_0/MessageConverter_1_0_to_v0_10.java | 16 ++++++++++++---- .../converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java | 13 ++++++++++++- .../v0_8_v1_0/MessageConverter_1_0_to_v0_8.java | 9 +++++++-- 4 files changed, 45 insertions(+), 9 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java b/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java index 84a57d474a..506e6b1850 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java @@ -22,7 +22,10 @@ package org.apache.qpid.server.protocol.converter.v0_10_v1_0; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; + import org.apache.qpid.amqp_1_0.messaging.SectionEncoder; import org.apache.qpid.amqp_1_0.type.Binary; import org.apache.qpid.amqp_1_0.type.Section; @@ -126,9 +129,18 @@ public class MessageConverter_0_10_to_1_0 extends MessageConverter_to_1_0 applicationProperties = msgProps.getApplicationHeaders(); + + if(applicationProperties != null) { - sections.add(new ApplicationProperties(msgProps.getApplicationHeaders())); + if(applicationProperties.containsKey("qpid.subject")) + { + props.setSubject(String.valueOf(applicationProperties.get("qpid.subject"))); + applicationProperties = new LinkedHashMap<>(applicationProperties); + applicationProperties.remove("qpid.subject"); + } + sections.add(new ApplicationProperties(applicationProperties)); + } } return new MessageMetaData_1_0(sections, sectionEncoder); diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_1_0_to_v0_10.java b/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_1_0_to_v0_10.java index 54d4638bb8..0c47ddf137 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_1_0_to_v0_10.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_1_0_to_v0_10.java @@ -21,14 +21,15 @@ package org.apache.qpid.server.protocol.converter.v0_10_v1_0; import java.nio.ByteBuffer; +import java.util.LinkedHashMap; import java.util.Map; -import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.plugin.PluggableService; import org.apache.qpid.server.protocol.v0_10.MessageMetaData_0_10; import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage; import org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0; +import org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0; import org.apache.qpid.server.protocol.v1_0.Message_1_0; import org.apache.qpid.server.store.StoredMessage; import org.apache.qpid.server.virtualhost.VirtualHostImpl; @@ -138,7 +139,7 @@ public class MessageConverter_1_0_to_v0_10 implements MessageConverter) MessageConverter_from_1_0.convertValue(serverMsg.getMessageHeader() - .getHeadersAsMap())); + Map appHeaders = + (Map) MessageConverter_from_1_0.convertValue(serverMsg.getMessageHeader() + .getHeadersAsMap()); + if(origHeader.getSubject() != null && !appHeaders.containsKey("qpid.subject")) + { + appHeaders = new LinkedHashMap<>(appHeaders); + appHeaders.put("qpid.subject", origHeader.getSubject()); + } + messageProps.setApplicationHeaders(appHeaders); Header header = new Header(deliveryProps, messageProps, null); return new MessageMetaData_0_10(header, size, serverMsg.getArrivalTime()); diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java index eb9d6842e4..553b1ba662 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_0_8_to_1_0.java @@ -22,7 +22,10 @@ package org.apache.qpid.server.protocol.converter.v0_8_v1_0; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; + import org.apache.qpid.amqp_1_0.messaging.SectionEncoder; import org.apache.qpid.amqp_1_0.type.Binary; import org.apache.qpid.amqp_1_0.type.Section; @@ -152,7 +155,15 @@ public class MessageConverter_0_8_to_1_0 extends MessageConverter_to_1_0 applicationProperties = FieldTable.convertToMap(contentHeader.getHeaders()); + + if(applicationProperties.containsKey("qpid.subject")) + { + props.setSubject(String.valueOf(applicationProperties.get("qpid.subject"))); + applicationProperties = new LinkedHashMap<>(applicationProperties); + applicationProperties.remove("qpid.subject"); + } + sections.add(new ApplicationProperties(applicationProperties)); return new MessageMetaData_1_0(sections, sectionEncoder); } diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java index 2de21e1a9f..783c6ca772 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java @@ -136,6 +136,8 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter headerProps = new LinkedHashMap(); + if(header.getSubject() != null) + { + headerProps.put("qpid.subject", header.getSubject()); + } + for(String headerName : serverMsg.getMessageHeader().getHeaderNames()) { headerProps.put(headerName, MessageConverter_from_1_0.convertValue(serverMsg.getMessageHeader().getHeader(headerName))); -- cgit v1.2.1