activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clebertsuco...@apache.org
Subject [1/2] activemq-artemis git commit: ARTEMIS-1834 don't alter STOMP 'destination' header when using prefix
Date Tue, 08 May 2018 22:55:49 GMT
Repository: activemq-artemis
Updated Branches:
  refs/heads/master a66b7dda2 -> 845f03dce


ARTEMIS-1834 don't alter STOMP 'destination' header when using prefix


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/90a604da
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/90a604da
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/90a604da

Branch: refs/heads/master
Commit: 90a604da202196fd4556aea30a889d2c7fe65ccd
Parents: a66b7dd
Author: Justin Bertram <jbertram@apache.org>
Authored: Tue May 8 15:24:10 2018 -0500
Committer: Justin Bertram <jbertram@apache.org>
Committed: Tue May 8 15:28:46 2018 -0500

----------------------------------------------------------------------
 .../org/apache/activemq/artemis/api/core/Message.java  |  6 ++++++
 .../org/apache/activemq/artemis/utils/PrefixUtil.java  | 13 +++++++++++++
 .../artemis/core/protocol/stomp/StompUtils.java        | 10 ++++++++--
 .../protocol/stomp/VersionedStompFrameHandler.java     | 11 ++++++++++-
 .../activemq/artemis/core/server/ServerSession.java    |  8 ++++++++
 .../artemis/core/server/impl/ServerSessionImpl.java    |  8 ++++++++
 .../artemis/tests/integration/stomp/StompTest.java     |  4 ++++
 7 files changed, 57 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
index 031c426..6ca37ea 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java
@@ -153,6 +153,12 @@ public interface Message {
     */
    SimpleString HDR_ROUTING_TYPE = new SimpleString("_AMQ_ROUTING_TYPE");
 
+   /**
+    * The prefix used (if any) when sending this message.  For protocols (e.g. STOMP) that
need to track this and restore
+    * the prefix when the message is consumed.
+    */
+   SimpleString HDR_PREFIX = new SimpleString("_AMQ_PREFIX");
+
    byte DEFAULT_TYPE = 0;
 
    byte OBJECT_TYPE = 2;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/PrefixUtil.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/PrefixUtil.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/PrefixUtil.java
index 9c6e92a..4066986 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/PrefixUtil.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/PrefixUtil.java
@@ -45,7 +45,20 @@ public class PrefixUtil {
       return address;
    }
 
+   public static SimpleString getPrefix(SimpleString address, Map<SimpleString, RoutingType>
prefixes) {
+      for (Map.Entry<SimpleString, RoutingType> entry : prefixes.entrySet()) {
+         if (address.startsWith(entry.getKey())) {
+            return removeAddress(address, entry.getKey());
+         }
+      }
+      return null;
+   }
+
    public static SimpleString removePrefix(SimpleString string, SimpleString prefix) {
       return string.subSeq(prefix.length(), string.length());
    }
+
+   public static SimpleString removeAddress(SimpleString string, SimpleString prefix) {
+      return string.subSeq(0, prefix.length());
+   }
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
index cd17982..07dcd8f 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompUtils.java
@@ -38,7 +38,7 @@ public class StompUtils {
 
    // Static --------------------------------------------------------
 
-   public static void copyStandardHeadersFromFrameToMessage(StompFrame frame, Message msg)
throws Exception {
+   public static void copyStandardHeadersFromFrameToMessage(StompFrame frame, Message msg,
String prefix) throws Exception {
       Map<String, String> headers = new HashMap<>(frame.getHeadersMap());
 
       String priority = headers.remove(Stomp.Headers.Send.PRIORITY);
@@ -89,6 +89,10 @@ public class StompUtils {
          }
       }
 
+      if (prefix != null) {
+         msg.putStringProperty(Message.HDR_PREFIX, prefix);
+      }
+
       // now the general headers
       for (Entry<String, String> entry : headers.entrySet()) {
          String name = entry.getKey();
@@ -101,7 +105,8 @@ public class StompUtils {
                                                             StompFrame command,
                                                             int deliveryCount) throws Exception
{
       command.addHeader(Stomp.Headers.Message.MESSAGE_ID, String.valueOf(message.getMessageID()));
-      command.addHeader(Stomp.Headers.Message.DESTINATION, message.getAddress().toString());
+      SimpleString prefix = message.getSimpleStringProperty(Message.HDR_PREFIX);
+      command.addHeader(Stomp.Headers.Message.DESTINATION,  (prefix == null ? "" : prefix)
+ message.getAddress());
 
       if (message.getObjectProperty(MessageUtil.CORRELATIONID_HEADER_NAME) != null) {
          command.addHeader(Stomp.Headers.Message.CORRELATION_ID, message.getObjectProperty(MessageUtil.CORRELATIONID_HEADER_NAME).toString());
@@ -135,6 +140,7 @@ public class StompUtils {
             name.equals(Message.HDR_CONTENT_TYPE) ||
             name.equals(Message.HDR_VALIDATED_USER) ||
             name.equals(Message.HDR_ROUTING_TYPE) ||
+            name.equals(Message.HDR_PREFIX) ||
             name.equals(MessageUtil.TYPE_HEADER_NAME) ||
             name.equals(MessageUtil.CORRELATIONID_HEADER_NAME) ||
             name.toString().equals(Stomp.Headers.Message.DESTINATION)) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
index 941cee6..023d885 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/VersionedStompFrameHandler.java
@@ -200,7 +200,7 @@ public abstract class VersionedStompFrameHandler {
          }
          message.setTimestamp(timestamp);
          message.setAddress(SimpleString.toSimpleString(destination));
-         StompUtils.copyStandardHeadersFromFrameToMessage(frame, message);
+         StompUtils.copyStandardHeadersFromFrameToMessage(frame, message, getPrefix(frame));
          if (frame.hasHeader(Stomp.Headers.CONTENT_LENGTH)) {
             message.setType(Message.BYTES_TYPE);
             message.getBodyBuffer().writeBytes(frame.getBodyAsBytes());
@@ -291,6 +291,15 @@ public abstract class VersionedStompFrameHandler {
       return connection.getSession().getCoreSession().removePrefix(SimpleString.toSimpleString(destination)).toString();
    }
 
+   public String getPrefix(StompFrame request) throws ActiveMQStompException {
+      String destination = request.getHeader(Headers.Send.DESTINATION);
+      if (destination == null) {
+         return null;
+      }
+      SimpleString prefix = connection.getSession().getCoreSession().getPrefix(SimpleString.toSimpleString(destination));
+      return prefix == null ? null : prefix.toString();
+   }
+
    public StompFrame postprocess(StompFrame request) {
       StompFrame response = null;
       if (request.hasHeader(Stomp.Headers.RECEIPT_REQUESTED)) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
index 59a400b..f5cca75 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
@@ -316,6 +316,14 @@ public interface ServerSession extends SecurityAuth {
    SimpleString removePrefix(SimpleString address);
 
    /**
+    * Get the prefix (if it exists) from the address based on the prefixes provided to the
ServerSession constructor.
+    *
+    * @param address the address to inspect
+    * @return the canonical (i.e. non-prefixed) address name
+    */
+   SimpleString getPrefix(SimpleString address);
+
+   /**
     * Get the canonical (i.e. non-prefixed) address and the corresponding routing-type.
     *
     * @param addressInfo the address to inspect

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
index f92b45a..0c6838d 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
@@ -1835,6 +1835,14 @@ public class ServerSessionImpl implements ServerSession, FailureListener
{
    }
 
    @Override
+   public SimpleString getPrefix(SimpleString address) {
+      if (prefixEnabled && address != null) {
+         return PrefixUtil.getPrefix(address, prefixes);
+      }
+      return null;
+   }
+
+   @Override
    public AddressInfo getAddressAndRoutingType(AddressInfo addressInfo) {
       if (prefixEnabled) {
          return addressInfo.getAddressAndRoutingType(prefixes);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/90a604da/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java
index de6a11d..bc363f2 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java
@@ -1621,6 +1621,7 @@ public class StompTest extends StompTestBase {
       Assert.assertEquals(Stomp.Responses.MESSAGE, frame.getCommand());
       Assert.assertEquals("Hello World 2", frame.getBody());
       Assert.assertEquals(RoutingType.ANYCAST.toString(), frame.getHeader(Stomp.Headers.Send.DESTINATION_TYPE));
+      Assert.assertEquals("/queue/" + ADDRESS, frame.getHeader(Stomp.Headers.Send.DESTINATION));
       frame = conn.receiveFrame(1000);
       Assert.assertNull(frame);
 
@@ -1643,6 +1644,7 @@ public class StompTest extends StompTestBase {
       Assert.assertEquals(Stomp.Responses.MESSAGE, frame.getCommand());
       Assert.assertEquals("Hello World 3", frame.getBody());
       Assert.assertEquals(RoutingType.MULTICAST.toString(), frame.getHeader(Stomp.Headers.Send.DESTINATION_TYPE));
+      Assert.assertEquals("/topic/" + ADDRESS, frame.getHeader(Stomp.Headers.Send.DESTINATION));
       frame = conn.receiveFrame(1000);
       Assert.assertNull(frame);
 
@@ -1699,6 +1701,7 @@ public class StompTest extends StompTestBase {
       Assert.assertEquals(Stomp.Responses.MESSAGE, frame.getCommand());
       Assert.assertEquals("Hello World 2", frame.getBody());
       Assert.assertEquals(RoutingType.MULTICAST.toString(), frame.getHeader(Stomp.Headers.Send.DESTINATION_TYPE));
+      Assert.assertEquals("/topic/" + ADDRESS, frame.getHeader(Stomp.Headers.Send.DESTINATION));
       frame = conn.receiveFrame(1000);
       Assert.assertNull(frame);
 
@@ -1718,6 +1721,7 @@ public class StompTest extends StompTestBase {
       Assert.assertEquals(Stomp.Responses.MESSAGE, frame.getCommand());
       Assert.assertEquals("Hello World 1", frame.getBody());
       Assert.assertEquals(RoutingType.ANYCAST.toString(), frame.getHeader(Stomp.Headers.Send.DESTINATION_TYPE));
+      Assert.assertEquals("/queue/" + ADDRESS, frame.getHeader(Stomp.Headers.Send.DESTINATION));
       frame = conn.receiveFrame(2000);
       Assert.assertNull(frame);
 


Mime
View raw message