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/26 18:15:46 UTC
[1/4] git commit: add a note for later
Repository: qpid-jms
Updated Branches:
refs/heads/master d94144cc9 -> bc8124b84
add a note for later
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/bc8124b8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/bc8124b8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/bc8124b8
Branch: refs/heads/master
Commit: bc8124b8438b5e47be8f252a26a6f23c8afa560b
Parents: 72c2d66
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 17:06:10 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100
----------------------------------------------------------------------
.../org/apache/qpid/jms/integration/MessageIntegrationTest.java | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/bc8124b8/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
index 999df5a..6cd11fb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
@@ -851,6 +851,8 @@ public class MessageIntegrationTest extends QpidJmsTestCase
private Object classifyUnderlyingIdType(Object idForAmqpMessageClass) {
Object underlyingAmqpMessageId = idForAmqpMessageClass;
+ // TODO: get rid of this method, use the proton types directly in the tests
+
if (underlyingAmqpMessageId instanceof BigInteger) {
// Proton uses UnsignedLong
underlyingAmqpMessageId = UnsignedLong.valueOf((BigInteger) underlyingAmqpMessageId);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/4] git commit: fix population of creation-time field of propertie
section, via sender using setJMSTimestamp
Posted by ro...@apache.org.
fix population of creation-time field of propertie section, via sender using setJMSTimestamp
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/ee8a4cbd
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/ee8a4cbd
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/ee8a4cbd
Branch: refs/heads/master
Commit: ee8a4cbdca8a66f0ce58b83f9d52458217efedd0
Parents: 9919d2f
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 16:55:09 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100
----------------------------------------------------------------------
.../amqp/message/AmqpJmsMessageFacade.java | 8 ++++----
.../amqp/message/AmqpJmsMessageFacadeTest.java | 20 ++++++++++++++++++++
2 files changed, 24 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ee8a4cbd/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
index 5eb5ede..6855b60 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
@@ -348,10 +348,10 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
@Override
public void setTimestamp(long timestamp) {
- if (message.getProperties() != null) {
- if (timestamp != 0) {
- message.setCreationTime(timestamp);
- } else {
+ if (timestamp != 0) {
+ message.setCreationTime(timestamp);
+ } else {
+ if (message.getProperties() != null) {
message.getProperties().setCreationTime(null);
}
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ee8a4cbd/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
index c536d90..d5a73e3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
@@ -28,6 +28,7 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.nio.ByteBuffer;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -75,8 +76,11 @@ public class AmqpJmsMessageFacadeTest {
return Mockito.mock(AmqpConnection.class);
}
+
// ====== AMQP Properties Section =======
+ // --- message-id and correlation-id ---
+
@Test
public void testGetCorrelationIdIsNullOnNewMessage() {
AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
@@ -405,6 +409,22 @@ public class AmqpJmsMessageFacadeTest {
return new Binary(idBytes);
}
+ // --- creation-time field ---
+
+ @Test
+ public void testSetCreationTimeOnNewNewMessage() {
+ AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
+
+ assertNull("Expected null Properties section", amqpMessageFacade.getAmqpMessage().getProperties());
+
+ long expected = 1;
+ amqpMessageFacade.setTimestamp(expected);
+
+ assertEquals("Unexpected timestamp value", expected, amqpMessageFacade.getTimestamp());
+ assertEquals("Expected creation-time field to be set on new Properties section", new Date(expected), amqpMessageFacade.getAmqpMessage().getProperties().getCreationTime());
+ }
+
+
// ====== AMQP Message Facade copy() tests =======
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[4/4] git commit: add some support for messages arriving without the
annotation to signal JMS message type
Posted by ro...@apache.org.
add some support for messages arriving without the annotation to signal JMS message type
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/9919d2f8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/9919d2f8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/9919d2f8
Branch: refs/heads/master
Commit: 9919d2f848d76ac27bd60734cfaa1d04d814779d
Parents: d94144c
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 16:11:11 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100
----------------------------------------------------------------------
.../amqp/message/AmqpJmsMessageBuilder.java | 92 ++++++++++++++++++--
.../amqp/message/AmqpMessageSupport.java | 35 ++++++++
2 files changed, 121 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/9919d2f8/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
index a09cee2..9eeef20 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageBuilder.java
@@ -23,6 +23,10 @@ import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_M
import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_OBJECT_MESSAGE;
import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_STREAM_MESSAGE;
import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_TEXT_MESSAGE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.TEXT_PLAIN_CONTENT_TYPE;
+import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.isContentType;
import java.io.IOException;
@@ -33,6 +37,10 @@ import org.apache.qpid.jms.message.JmsObjectMessage;
import org.apache.qpid.jms.message.JmsStreamMessage;
import org.apache.qpid.jms.message.JmsTextMessage;
import org.apache.qpid.jms.provider.amqp.AmqpConsumer;
+import org.apache.qpid.proton.amqp.Binary;
+import org.apache.qpid.proton.amqp.messaging.AmqpValue;
+import org.apache.qpid.proton.amqp.messaging.Data;
+import org.apache.qpid.proton.amqp.messaging.Section;
import org.apache.qpid.proton.message.Message;
/**
@@ -65,6 +73,12 @@ public class AmqpJmsMessageBuilder {
return result;
}
+ // Next, match specific section structures and content types
+ result = createWithoutAnnotation(consumer, message);
+ if (result != null) {
+ return result;
+ }
+
// TODO
throw new IOException("Could not create a JMS message from incoming message");
}
@@ -75,17 +89,17 @@ public class AmqpJmsMessageBuilder {
switch ((byte) annotation) {
case JMS_MESSAGE:
- return new JmsMessage(new AmqpJmsMessageFacade(consumer, message));
+ return createMessage(consumer, message);
case JMS_BYTES_MESSAGE:
- return new JmsBytesMessage(new AmqpJmsBytesMessageFacade(consumer, message));
+ return createBytesMessage(consumer, message);
case JMS_TEXT_MESSAGE:
- return new JmsTextMessage(new AmqpJmsTextMessageFacade(consumer, message));
+ return createTextMessage(consumer, message);
case JMS_MAP_MESSAGE:
- return new JmsMapMessage(new AmqpJmsMapMessageFacade(consumer, message));
+ return createMapMessage(consumer, message);
case JMS_STREAM_MESSAGE:
- return new JmsStreamMessage(new AmqpJmsStreamMessageFacade(consumer, message));
+ return createStreamMessage(consumer, message);
case JMS_OBJECT_MESSAGE:
- return new JmsObjectMessage(new AmqpJmsObjectMessageFacade(consumer, message));
+ return createObjectMessage(consumer, message);
default:
throw new IOException("Invalid JMS Message Type annotation found in message");
}
@@ -93,4 +107,70 @@ public class AmqpJmsMessageBuilder {
return null;
}
+
+ private static JmsMessage createWithoutAnnotation(AmqpConsumer consumer, Message message) {
+ Section body = message.getBody();
+
+ if (body == null) {
+ // TODO: accept textual content types other than strictly "text/plain"
+ if (isContentType(TEXT_PLAIN_CONTENT_TYPE, message)) {
+ return createTextMessage(consumer, message);
+ } else if (isContentType(SERIALIZED_JAVA_OBJECT_CONTENT_TYPE, message)) {
+ return createObjectMessage(consumer, message);
+ } else if (isContentType(OCTET_STREAM_CONTENT_TYPE, message) || isContentType(null, message)) {
+ return createBytesMessage(consumer, message);
+ }
+ } else if (body instanceof Data) {
+ // TODO: accept textual content types other than strictly "text/plain"
+ if (isContentType(TEXT_PLAIN_CONTENT_TYPE, message)) {
+ return createTextMessage(consumer, message);
+ } else if (isContentType(OCTET_STREAM_CONTENT_TYPE, message) || isContentType(null, message)) {
+ return createBytesMessage(consumer, message);
+ } else if (isContentType(SERIALIZED_JAVA_OBJECT_CONTENT_TYPE, message)) {
+ return createObjectMessage(consumer, message);
+ }
+
+ // TODO: should this situation throw an exception, or just become a bytes message?
+ // Content type is set, but not to something we understand above.
+ // Falling through to return null.
+ } else if (body instanceof AmqpValue) {
+ Object value = ((AmqpValue) body).getValue();
+
+ if (value == null || value instanceof String) {
+ return createTextMessage(consumer, message);
+ } else if (value instanceof Binary) {
+ return createBytesMessage(consumer, message);
+ } else {
+ return createObjectMessage(consumer, message);
+ }
+ } else {
+ // TODO: AmqpSequence support
+ }
+
+ return null;
+ }
+
+ private static JmsObjectMessage createObjectMessage(AmqpConsumer consumer, Message message) {
+ return new JmsObjectMessage(new AmqpJmsObjectMessageFacade(consumer, message));
+ }
+
+ private static JmsStreamMessage createStreamMessage(AmqpConsumer consumer, Message message) {
+ return new JmsStreamMessage(new AmqpJmsStreamMessageFacade(consumer, message));
+ }
+
+ private static JmsMapMessage createMapMessage(AmqpConsumer consumer, Message message) {
+ return new JmsMapMessage(new AmqpJmsMapMessageFacade(consumer, message));
+ }
+
+ private static JmsTextMessage createTextMessage(AmqpConsumer consumer, Message message) {
+ return new JmsTextMessage(new AmqpJmsTextMessageFacade(consumer, message));
+ }
+
+ private static JmsBytesMessage createBytesMessage(AmqpConsumer consumer, Message message) {
+ return new JmsBytesMessage(new AmqpJmsBytesMessageFacade(consumer, message));
+ }
+
+ private static JmsMessage createMessage(AmqpConsumer consumer, Message message) {
+ return new JmsMessage(new AmqpJmsMessageFacade(consumer, message));
+ }
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/9919d2f8/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
index 563352b..744eeef 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupport.java
@@ -131,6 +131,21 @@ public final class AmqpMessageSupport {
public static final String JMS_AMQP_TYPED_ENCODING = "JMS_AMQP_TYPED_ENCODING";
/**
+ * Content type used to mark Data sections as containing text.
+ */
+ public static final String TEXT_PLAIN_CONTENT_TYPE = "text/plain";
+
+ /**
+ * Content type used to mark Data sections as containing a serialized java object.
+ */
+ public static final String SERIALIZED_JAVA_OBJECT_CONTENT_TYPE = "application/x-java-serialized-object";
+
+ /**
+ * Content type used to mark Data sections as containing arbitrary bytes.
+ */
+ public static final String OCTET_STREAM_CONTENT_TYPE = "application/octet-stream";
+
+ /**
* Lookup and return the correct Proton Symbol instance based on the given key.
*
* @param key
@@ -190,4 +205,24 @@ public final class AmqpMessageSupport {
return null;
}
+
+ /**
+ * Check whether the content-type field of the properties section (if present) in
+ * the given message matches the provided string (where null matches if there is
+ * no content type rpeesnt.
+ *
+ * @param contentType
+ * content type string to compare against, or null if none
+ * @param message
+ * the AMQP message object that is being examined.
+ *
+ * @return true if content type matches
+ */
+ public static boolean isContentType(String contentType, Message message) {
+ if (contentType == null) {
+ return message.getContentType() == null;
+ } else {
+ return contentType.equals(message.getContentType());
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[3/4] git commit: update facade and property interceptor to fix
propertyExists(), handle properties that do exist with a null value
Posted by ro...@apache.org.
update facade and property interceptor to fix propertyExists(), handle properties that do exist with a null value
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/72c2d666
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/72c2d666
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/72c2d666
Branch: refs/heads/master
Commit: 72c2d666a625550ce3bf7315932bcb7f8f97cb66
Parents: ee8a4cb
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Sep 26 17:05:40 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Sep 26 17:15:15 2014 +0100
----------------------------------------------------------------------
.../qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java | 2 +-
.../amqp/message/AmqpJmsMessagePropertyIntercepter.java | 8 +++++---
2 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/72c2d666/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
index 6855b60..6a637c6 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
@@ -158,7 +158,7 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
@Override
public boolean propertyExists(String key) throws JMSException {
- return AmqpJmsMessagePropertyIntercepter.getProperty(this, key) != null;
+ return AmqpJmsMessagePropertyIntercepter.propertyExists(this, key);
}
public boolean applicationPropertyExists(String key) throws JMSException {
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/72c2d666/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
index e5c60e5..c9607aa 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepter.java
@@ -222,14 +222,16 @@ public class AmqpJmsMessagePropertyIntercepter {
* @param name
* the property name that is being checked.
*
+ * @return true if the message contains the given property.
+ *
* @throws JMSException if an error occurs while inspecting the defined property.
*/
- public static void propertyExists(AmqpJmsMessageFacade message, String name) throws JMSException {
+ public static boolean propertyExists(AmqpJmsMessageFacade message, String name) throws JMSException {
PropertyIntercepter propertyExpression = PROPERTY_INTERCEPTERS.get(name);
if (propertyExpression != null) {
- propertyExpression.propertyExists(message);
+ return propertyExpression.propertyExists(message);
} else {
- message.applicationPropertyExists(name);
+ return message.applicationPropertyExists(name);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org