You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2016/05/04 19:35:20 UTC
[4/7] qpid-interop-test git commit: QPIDIT-32: Added Maven pom files,
removed jars directory containing copies of dependent jars. Also
updated to latest Proton C++ API
QPIDIT-32: Added Maven pom files, removed jars directory containing copies of dependent jars. Also updated to latest Proton C++ API
Project: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/commit/f4b87a1e
Tree: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/tree/f4b87a1e
Diff: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/diff/f4b87a1e
Branch: refs/heads/master
Commit: f4b87a1edcac4d17d25cb36a8d0c80a437657596
Parents: 87e8eae
Author: Kim van der Riet <kp...@apache.org>
Authored: Wed May 4 10:28:18 2016 -0400
Committer: Kim van der Riet <kp...@apache.org>
Committed: Wed May 4 10:28:18 2016 -0400
----------------------------------------------------------------------
.gitignore | 2 +-
QUICKSTART | 15 +-
etc/proton-python-amqp-types.patch | 201 --------
jars/README | 3 -
jars/javax.json-1.0.4.jar | Bin 85147 -> 0 bytes
jars/javax.json-api-1.0.jar | Bin 19754 -> 0 bytes
jars/slf4j-nop-1.5.6.jar | Bin 5283 -> 0 bytes
java-build.sh | 15 -
java-clean.sh | 5 -
pom.xml | 37 ++
shims/qpid-jms/.gitignore | 1 +
shims/qpid-jms/java-build.sh | 28 --
shims/qpid-jms/java-clean.sh | 5 -
shims/qpid-jms/pom.xml | 97 ++++
.../qpid/interop_test/shim/AmqpReceiver.java | 271 -----------
.../qpid/interop_test/shim/AmqpSender.java | 260 ----------
.../qpid/interop_test/shim/JmsReceiverShim.java | 349 --------------
.../qpid/interop_test/shim/JmsSenderShim.java | 368 --------------
.../qpid_interop_test/shim/AmqpReceiver.java | 271 +++++++++++
.../qpid/qpid_interop_test/shim/AmqpSender.java | 260 ++++++++++
.../qpid_interop_test/shim/JmsReceiverShim.java | 349 ++++++++++++++
.../qpid_interop_test/shim/JmsSenderShim.java | 368 ++++++++++++++
shims/qpid-proton-cpp/.gitignore | 1 +
.../src/qpidit/shim/AmqpReceiver.cpp | 11 +-
.../src/qpidit/shim/AmqpReceiver.hpp | 5 +-
.../src/qpidit/shim/AmqpSender.cpp | 11 +-
.../src/qpidit/shim/AmqpSender.hpp | 6 +-
.../src/qpidit/shim/JmsReceiver.cpp | 8 +-
.../src/qpidit/shim/JmsReceiver.hpp | 2 -
.../src/qpidit/shim/JmsSender.cpp | 9 +-
.../src/qpidit/shim/JmsSender.hpp | 2 +-
.../interop_test/obj_util/BytesToJavaObj.java | 83 ----
.../interop_test/obj_util/JavaObjToBytes.java | 129 -----
src/py/qpid-interop-test/.gitignore | 2 -
src/py/qpid-interop-test/__init__.py | 25 -
src/py/qpid-interop-test/broker_properties.py | 54 ---
src/py/qpid-interop-test/interop_test_errors.py | 29 --
.../qpid-interop-test/jms/jms_message_tests.py | 481 -------------------
src/py/qpid-interop-test/test_type_map.py | 78 ---
.../types/simple_type_tests.py | 478 ------------------
src/python/qpid-interop-test/.gitignore | 2 +
src/python/qpid-interop-test/__init__.py | 25 +
.../qpid-interop-test/broker_properties.py | 54 +++
.../qpid-interop-test/interop_test_errors.py | 29 ++
.../qpid-interop-test/jms/jms_message_tests.py | 454 +++++++++++++++++
src/python/qpid-interop-test/test_type_map.py | 78 +++
.../types/simple_type_tests.py | 478 ++++++++++++++++++
utils/.gitignore | 1 +
utils/pom.xml | 55 +++
.../obj_util/BytesToJavaObj.java | 83 ++++
.../obj_util/JavaObjToBytes.java | 129 +++++
51 files changed, 2804 insertions(+), 2903 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index b83d222..8b13789 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/target/
+
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/QUICKSTART
----------------------------------------------------------------------
diff --git a/QUICKSTART b/QUICKSTART
index 7ea266e..bfd2402 100644
--- a/QUICKSTART
+++ b/QUICKSTART
@@ -32,7 +32,7 @@ mvn -DskipTests install
3 Prepare the tests
-------------------
-(ONLY IF NEEDED): Edit src/py/qpid_interop/types/simple_type_tests.py as
+(ONLY IF NEEDED): Edit src/python/qpid_interop/types/simple_type_tests.py as
needed, particularly AmqpPrimitiveTypes.TYPE_MAP which controls the AMQP types
and test values for each type.
@@ -57,7 +57,7 @@ cd ../../..
Note that installation is still to be completed, this section will change to
reflect installation details when complete.
-Select one of the two following options:
+Select one of the following two options:
a. qpid-proton installed:
Assuming proton's "make install" has been run, from top level qpid-interop-test directory:
@@ -67,7 +67,7 @@ export QPID_INTEROP_TEST_HOME=<abs path to top level qpid-interop-test directory
b. qpid-proton built but not installed:
Assuming proton's "make" has been run from a "build" directory as described in the proton README (but not make install), from top level qpid-interop-test directory:
-export PYTHONPATH=<abs path to top level qpid-proton directory>/proton-c/bindings/python:<abs path to top level qpid-proton directory>/build/proton-c/bindings/python:src/py/qpid-interop-test
+export PYTHONPATH=<abs path to top level qpid-proton directory>/proton-c/bindings/python:<abs path to top level qpid-proton directory>/build/proton-c/bindings/python:src/python/qpid-interop-test
export LD_LIBRARY_PATH=<abs path to top level qpid-proton directory>/build/proton-c
export QPID_INTEROP_TEST_HOME=<abs path to top level qpid-interop-test directory>
@@ -79,11 +79,8 @@ NOTE: For qpidd, YOU MUST USE THE FOLLOWING PARAMETERS:
From top level directory:
AMQP type tests:
-./src/py/qpid-interop-test/types/simple_type_tests.py
-
-JMS message tests: In order to correctly set the Java CLASSPATH, the versions of Qpid-jms and Qpid-proton must be known. These are set as follows:
-./src/py/qpid-interop-test/jms/jms_message_tests.py --qpid-jms-ver <jms-version> --qpid-proton-ver <proton-version>
-For example:
-./src/py/qpid-interop-test/jms/jms_message_tests.py --qpid-jms-ver 0.9.0-SNAPSHOT --qpid-proton-ver 0.13.0-SNAPSHOT
+./src/python/qpid-interop-test/types/simple_type_tests.py
+JMS message tests:
+./src/python/qpid-interop-test/jms/jms_message_tests.py
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/etc/proton-python-amqp-types.patch
----------------------------------------------------------------------
diff --git a/etc/proton-python-amqp-types.patch b/etc/proton-python-amqp-types.patch
deleted file mode 100644
index a337f2d..0000000
--- a/etc/proton-python-amqp-types.patch
+++ /dev/null
@@ -1,201 +0,0 @@
-diff --git a/proton-c/bindings/python/proton/__init__.py b/proton-c/bindings/python/proton/__init__.py
-index 0567095..9bf2ce0 100644
---- a/proton-c/bindings/python/proton/__init__.py
-+++ b/proton-c/bindings/python/proton/__init__.py
-@@ -1290,6 +1290,56 @@ class char(unicode):
- def __repr__(self):
- return "char(%s)" % unicode.__repr__(self)
-
-+class byte(int):
-+
-+ def __repr__(self):
-+ return "byte(%s)" % int.__repr__(self)
-+
-+class short(int):
-+
-+ def __repr__(self):
-+ return "short(%s)" % int.__repr__(self)
-+
-+class int32(int):
-+
-+ def __repr__(self):
-+ return "int32(%s)" % int.__repr__(self)
-+
-+class ubyte(int):
-+
-+ def __repr__(self):
-+ return "ubyte(%s)" % int.__repr__(self)
-+
-+class ushort(int):
-+
-+ def __repr__(self):
-+ return "ushort(%s)" % int.__repr__(self)
-+
-+class uint(int):
-+
-+ def __repr__(self):
-+ return "uint(%s)" % int.__repr__(self)
-+
-+class float32(float):
-+
-+ def __repr__(self):
-+ return "float32(%s)" % float.__repr__(self)
-+
-+class decimal32(int):
-+
-+ def __repr__(self):
-+ return "decimal32(%s)" % int.__repr__(self)
-+
-+class decimal64(long):
-+
-+ def __repr__(self):
-+ return "decimal64(%s)" % long.__repr__(self)
-+
-+class decimal128(bytes):
-+
-+ def __repr__(self):
-+ return "decimal128(%s)" % bytes.__repr__(self)
-+
- class Described(object):
-
- def __init__(self, descriptor, value):
-@@ -1902,42 +1952,42 @@ class Data:
- If the current node is an unsigned byte, returns its value,
- returns 0 otherwise.
- """
-- return pn_data_get_ubyte(self._data)
-+ return ubyte(pn_data_get_ubyte(self._data))
-
- def get_byte(self):
- """
- If the current node is a signed byte, returns its value, returns 0
- otherwise.
- """
-- return pn_data_get_byte(self._data)
-+ return byte(pn_data_get_byte(self._data))
-
- def get_ushort(self):
- """
- If the current node is an unsigned short, returns its value,
- returns 0 otherwise.
- """
-- return pn_data_get_ushort(self._data)
-+ return ushort(pn_data_get_ushort(self._data))
-
- def get_short(self):
- """
- If the current node is a signed short, returns its value, returns
- 0 otherwise.
- """
-- return pn_data_get_short(self._data)
-+ return short(pn_data_get_short(self._data))
-
- def get_uint(self):
- """
- If the current node is an unsigned int, returns its value, returns
- 0 otherwise.
- """
-- return pn_data_get_uint(self._data)
-+ return uint(pn_data_get_uint(self._data))
-
- def get_int(self):
- """
- If the current node is a signed int, returns its value, returns 0
- otherwise.
- """
-- return int(pn_data_get_int(self._data))
-+ return int32(pn_data_get_int(self._data))
-
- def get_char(self):
- """
-@@ -1972,7 +2022,7 @@ class Data:
- If the current node is a float, returns its value, raises 0
- otherwise.
- """
-- return pn_data_get_float(self._data)
-+ return float32(pn_data_get_float(self._data))
-
- def get_double(self):
- """
-@@ -1987,7 +2037,7 @@ class Data:
- If the current node is a decimal32, returns its value, returns 0
- otherwise.
- """
-- return pn_data_get_decimal32(self._data)
-+ return decimal32(pn_data_get_decimal32(self._data))
-
- # XXX: need to convert
- def get_decimal64(self):
-@@ -1995,7 +2045,7 @@ class Data:
- If the current node is a decimal64, returns its value, returns 0
- otherwise.
- """
-- return pn_data_get_decimal64(self._data)
-+ return decimal64(pn_data_get_decimal64(self._data))
-
- # XXX: need to convert
- def get_decimal128(self):
-@@ -2003,7 +2053,7 @@ class Data:
- If the current node is a decimal128, returns its value, returns 0
- otherwise.
- """
-- return pn_data_get_decimal128(self._data)
-+ return decimal128(pn_data_get_decimal128(self._data))
-
- def get_uuid(self):
- """
-@@ -2155,18 +2205,29 @@ class Data:
- put_mappings = {
- None.__class__: lambda s, _: s.put_null(),
- bool: put_bool,
-- dict: put_dict,
-- list: put_sequence,
-- tuple: put_sequence,
-- unicode: put_string,
-- bytes: put_binary,
-- symbol: put_symbol,
-+ ubyte: put_ubyte,
-+ ushort: put_ushort,
-+ uint: put_uint,
-+ ulong: put_ulong,
-+ byte: put_byte,
-+ short: put_short,
-+ int32: put_int,
-+ int: put_long,
- long: put_long,
-+ float32: put_float,
-+ float: put_double,
-+ decimal32: put_decimal32,
-+ decimal64: put_decimal64,
-+ decimal128: put_decimal128,
- char: put_char,
-- ulong: put_ulong,
- timestamp: put_timestamp,
-- float: put_double,
- uuid.UUID: put_uuid,
-+ bytes: put_binary,
-+ unicode: put_string,
-+ symbol: put_symbol,
-+ list: put_sequence,
-+ tuple: put_sequence,
-+ dict: put_dict,
- Described: put_py_described,
- Array: put_py_array
- }
-@@ -4123,5 +4184,15 @@ __all__ = [
- "dispatch",
- "symbol",
- "timestamp",
-- "ulong"
-+ "ulong",
-+ "byte",
-+ "short",
-+ "int32",
-+ "ubyte",
-+ "ushort",
-+ "uint",
-+ "float32",
-+ "decimal32",
-+ "decimal64",
-+ "decimal128"
- ]
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/jars/README
----------------------------------------------------------------------
diff --git a/jars/README b/jars/README
deleted file mode 100644
index 4aea73f..0000000
--- a/jars/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory is a temporary landing place for jars that need to be included
-in the java CLASSPATH. Once this project has been Maven-ized, it is expected
-that this will be handled automatically by Maven and this dir will go away.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/jars/javax.json-1.0.4.jar
----------------------------------------------------------------------
diff --git a/jars/javax.json-1.0.4.jar b/jars/javax.json-1.0.4.jar
deleted file mode 100644
index 09967d8..0000000
Binary files a/jars/javax.json-1.0.4.jar and /dev/null differ
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/jars/javax.json-api-1.0.jar
----------------------------------------------------------------------
diff --git a/jars/javax.json-api-1.0.jar b/jars/javax.json-api-1.0.jar
deleted file mode 100644
index d276c79..0000000
Binary files a/jars/javax.json-api-1.0.jar and /dev/null differ
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/jars/slf4j-nop-1.5.6.jar
----------------------------------------------------------------------
diff --git a/jars/slf4j-nop-1.5.6.jar b/jars/slf4j-nop-1.5.6.jar
deleted file mode 100644
index 71fda42..0000000
Binary files a/jars/slf4j-nop-1.5.6.jar and /dev/null differ
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/java-build.sh
----------------------------------------------------------------------
diff --git a/java-build.sh b/java-build.sh
deleted file mode 100755
index 27de828..0000000
--- a/java-build.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-# JARS
-#JMS_API=${HOME}/.m2/repository/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar:${HOME}/.m2/repository/org/apache/qpid/qpid-jms-client/0.4.0-SNAPSHOT/qpid-jms-client-0.4.0-SNAPSHOT.jar
-#JSON_API=../../jars/javax.json-api-1.0.jar
-#CLASSPATH=${JMS_API}:${JSON_API}
-CLASSPATH=
-
-BASEPATH=org/apache/qpid/interop_test/obj_util
-SRCPATH=src/main/java/${BASEPATH}
-TARGETPATH=target
-
-mkdir -p ${TARGETPATH}/classes
-javac -cp ${CLASSPATH} -Xlint:unchecked -d ${TARGETPATH}/classes ${SRCPATH}/JavaObjToBytes.java ${SRCPATH}/BytesToJavaObj.java
-jar -cf ${TARGETPATH}/JavaObjUtils.jar -C ${TARGETPATH}/classes ${BASEPATH}/JavaObjToBytes.class -C ${TARGETPATH}/classes ${BASEPATH}/BytesToJavaObj.class
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/java-clean.sh
----------------------------------------------------------------------
diff --git a/java-clean.sh b/java-clean.sh
deleted file mode 100755
index 7fc8be1..0000000
--- a/java-clean.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-TARGETPATH=target
-
-rm -rf ${TARGETPATH}/*.jar ${TARGETPATH}/classes/*
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..a00b546
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <name>qpid-interop-test-parent</name>
+ <url>https://qpid.apache.org</url>
+
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>qpid-interop-test-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+
+ <modules>
+ <module>shims/qpid-jms</module>
+ <module>utils</module>
+ </modules>
+
+ <dependencies>
+ </dependencies>
+</project>
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/.gitignore
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/.gitignore b/shims/qpid-jms/.gitignore
index b83d222..c0fa915 100644
--- a/shims/qpid-jms/.gitignore
+++ b/shims/qpid-jms/.gitignore
@@ -1 +1,2 @@
+/cp.txt
/target/
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/java-build.sh
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/java-build.sh b/shims/qpid-jms/java-build.sh
deleted file mode 100755
index 587c5ca..0000000
--- a/shims/qpid-jms/java-build.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-# JARS
-MVN_LOCAL_REPOSITORY=${HOME}/.m2/repository
-QPID_JMS_CLIENT_LOCATION=${MVN_LOCAL_REPOSITORY}/org/apache/qpid/qpid-jms-client
-
-echo "Available qpid-jms client versions:"
-for d in ${QPID_JMS_CLIENT_LOCATION}/*; do
- if [ -d ${d} ]; then
- echo " ${d##*/}"
- fi
-done
-
-# TODO: get this from the above list, which needs sorting to find latest version by default
-JMS_VERSION=0.9.0-SNAPSHOT
-echo "Current qpid-jms client version: ${JMS_VERSION}"
-
-JMS_API=${MVN_LOCAL_REPOSITORY}/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar:${QPID_JMS_CLIENT_LOCATION}/${JMS_VERSION}/qpid-jms-client-${JMS_VERSION}.jar
-JSON_API=../../jars/javax.json-api-1.0.jar
-CLASSPATH=${JMS_API}:${JSON_API}
-
-BASEPATH=org/apache/qpid/interop_test/shim
-SRCPATH=src/main/java/${BASEPATH}
-TARGETPATH=target
-
-mkdir -p ${TARGETPATH}/classes
-javac -cp ${CLASSPATH} -Xlint:unchecked -d ${TARGETPATH}/classes ${SRCPATH}/AmqpSender.java ${SRCPATH}/AmqpReceiver.java ${SRCPATH}/JmsSenderShim.java ${SRCPATH}/JmsReceiverShim.java
-jar -cf ${TARGETPATH}/qpid-jms-shim.jar -C ${TARGETPATH}/classes ${BASEPATH}/AmqpSender.class -C ${TARGETPATH}/classes ${BASEPATH}/AmqpSender\$1.class -C ${TARGETPATH}/classes ${BASEPATH}/AmqpSender\$MyExceptionListener.class -C ${TARGETPATH}/classes ${BASEPATH}/AmqpReceiver.class -C ${TARGETPATH}/classes ${BASEPATH}/AmqpReceiver\$1.class -C ${TARGETPATH}/classes ${BASEPATH}/AmqpReceiver\$MyExceptionListener.class -C ${TARGETPATH}/classes ${BASEPATH}/JmsSenderShim.class -C ${TARGETPATH}/classes ${BASEPATH}/JmsSenderShim\$1.class -C ${TARGETPATH}/classes ${BASEPATH}/JmsSenderShim\$MyExceptionListener.class -C ${TARGETPATH}/classes ${BASEPATH}/JmsReceiverShim.class -C ${TARGETPATH}/classes ${BASEPATH}/JmsReceiverShim\$1.class -C ${TARGETPATH}/classes ${BASEPATH}/JmsReceiverShim\$MyExceptionListener.class
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/java-clean.sh
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/java-clean.sh b/shims/qpid-jms/java-clean.sh
deleted file mode 100755
index 7fc8be1..0000000
--- a/shims/qpid-jms/java-clean.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-TARGETPATH=target
-
-rm -rf ${TARGETPATH}/*.jar ${TARGETPATH}/classes/*
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/pom.xml
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/pom.xml b/shims/qpid-jms/pom.xml
new file mode 100644
index 0000000..23aef33
--- /dev/null
+++ b/shims/qpid-jms/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <name>qpid-interop-test-jms-shim</name>
+ <url>https://qpid.apache.org</url>
+
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>qpid-interop-test-jms-shim</artifactId>
+ <packaging>jar</packaging>
+ <version>0.1.0-SNAPSHOT</version>
+
+ <parent>
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>qpid-interop-test-parent</artifactId>
+ <relativePath>../../pom.xml</relativePath>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ <optimize>true</optimize>
+ <debug>true</debug>
+ <showDeprecation>true</showDeprecation>
+ <showWarnings>true</showWarnings>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build-classpath</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>build-classpath</goal>
+ </goals>
+ <configuration>
+ <outputFile>cp.txt</outputFile>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.json</groupId>
+ <artifactId>javax.json-api</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish</groupId>
+ <artifactId>javax.json</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>qpid-jms-client</artifactId>
+ <version>0.10.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-nop</artifactId>
+ <version>1.7.21</version>
+ </dependency>
+ </dependencies>
+</project>
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpReceiver.java
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpReceiver.java b/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpReceiver.java
deleted file mode 100644
index cf3ad81..0000000
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpReceiver.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.interop_test.shim;
-
-import java.math.BigDecimal;
-import java.util.UUID;
-import java.util.Vector;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class AmqpReceiver {
- private static final String USER = "guest";
- private static final String PASSWORD = "guest";
- private static final int TIMEOUT = 1000;
- private static final String[] SUPPORTED_AMQP_TYPES = {"null",
- "boolean",
- "ubyte",
- "ushort",
- "uint",
- "ulong",
- "byte",
- "short",
- "int",
- "long",
- "float",
- "double",
- "decimal32",
- "decimal64",
- "decimal128",
- "char",
- "timestamp",
- "uuid",
- "binary",
- "string",
- "symbol",
- "list",
- "map",
- "array"};
-
- public static void main(String[] args) throws Exception {
- if (args.length < 4) {
- System.out.println("AmqpReceiver: Insufficient number of arguments");
- System.out.println("AmqpReceiver: Expected arguments: broker_address, queue_name, amqp_type, num_test_values");
- System.exit(1);
- }
- String brokerAddress = "amqp://" + args[0];
- String queueName = args[1];
- String amqpType = args[2];
- int numTestValues = Integer.parseInt(args[3]);
- Connection connection = null;
-
- try {
- ConnectionFactory factory = (ConnectionFactory)new JmsConnectionFactory(brokerAddress);
-
- connection = factory.createConnection(USER, PASSWORD);
- connection.setExceptionListener(new MyExceptionListener());
- connection.start();
-
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Queue queue = session.createQueue(queueName);
-
- MessageConsumer messageConsumer = session.createConsumer(queue);
-
- Vector<String> outList = new Vector<String>();
- outList.add(amqpType);
- if (isSupportedAmqpType(amqpType)) {
- int actualCount = 0;
- Message message = null;
- for (int i = 1; i <= numTestValues; i++, actualCount++) {
- message = messageConsumer.receive(TIMEOUT);
- if (message == null)
- break;
- switch (amqpType) {
- case "null":
- long bodyLength = ((BytesMessage)message).getBodyLength();
- if (bodyLength == 0L) {
- outList.add("None");
- } else {
- throw new Exception("AmqpReceiver: JMS BytesMessage size error: Expected 0 bytes, read " + bodyLength);
- }
- break;
- case "boolean":
- String bs = String.valueOf(((BytesMessage)message).readBoolean());
- outList.add(Character.toUpperCase(bs.charAt(0)) + bs.substring(1));
- break;
- case "ubyte":
- byte byteValue = ((BytesMessage)message).readByte();
- short ubyteValue = (short)(byteValue & 0xff);
- outList.add(String.valueOf(ubyteValue));
- break;
- case "ushort":
- {
- byte[] byteArray = new byte[2];
- int numBytes = ((BytesMessage)message).readBytes(byteArray);
- if (numBytes != 2) {
- // TODO: numBytes == -1 means no more bytes in stream - add error message for this case?
- throw new Exception("AmqpReceiver: JMS BytesMessage size error: Exptected 2 bytes, read " + numBytes);
- }
- int ushortValue = 0;
- for (int j=0; j<byteArray.length; j++) {
- ushortValue = (ushortValue << 8) + (byteArray[j] & 0xff);
- }
- outList.add(String.valueOf(ushortValue));
- break;
- }
- case "uint":
- {
- byte[] byteArray = new byte[4];
- int numBytes = ((BytesMessage)message).readBytes(byteArray);
- if (numBytes != 4) {
- // TODO: numBytes == -1 means no more bytes in stream - add error message for this case?
- throw new Exception("AmqpReceiver: JMS BytesMessage size error: Exptected 4 bytes, read " + numBytes);
- }
- long uintValue = 0;
- for (int j=0; j<byteArray.length; j++) {
- uintValue = (uintValue << 8) + (byteArray[j] & 0xff);
- }
- outList.add(String.valueOf(uintValue));
- break;
- }
- case "ulong":
- case "timestamp":
- {
- // TODO: Tidy this ugliness up - perhaps use of vector<byte>?
- byte[] byteArray = new byte[8];
- int numBytes = ((BytesMessage)message).readBytes(byteArray);
- if (numBytes != 8) {
- // TODO: numBytes == -1 means no more bytes in stream - add error message for this case?
- throw new Exception("AmqpReceiver: JMS BytesMessage size error: Exptected 8 bytes, read " + numBytes);
- }
- // TODO: shortcut in use here - this byte array should go through a Java type that can represent this as a number - such as BigInteger.
- outList.add(String.format("0x%02x%02x%02x%02x%02x%02x%02x%02x", byteArray[0], byteArray[1],
- byteArray[2], byteArray[3], byteArray[4], byteArray[5], byteArray[6], byteArray[7]));
- break;
- }
- case "byte":
- outList.add(String.valueOf(((BytesMessage)message).readByte()));
- break;
- case "short":
- outList.add(String.valueOf(((BytesMessage)message).readShort()));
- break;
- case "int":
- outList.add(String.valueOf(((BytesMessage)message).readInt()));
- break;
- case "long":
- outList.add(String.valueOf(((BytesMessage)message).readLong()));
- break;
- case "float":
- float f = ((BytesMessage)message).readFloat();
- int i0 = Float.floatToRawIntBits(f);
- outList.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
- break;
- case "double":
- double d = ((BytesMessage)message).readDouble();
- long l = Double.doubleToRawLongBits(d);
- outList.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
- break;
- case "decimal32":
- BigDecimal bd32 = (BigDecimal)((ObjectMessage)message).getObject();
- outList.add(bd32.toString());
- break;
- case "decimal64":
- BigDecimal bd64 = (BigDecimal)((ObjectMessage)message).getObject();
- outList.add(bd64.toString());
- break;
- case "decimal128":
- BigDecimal bd128 = (BigDecimal)((ObjectMessage)message).getObject();
- outList.add(bd128.toString());
- break;
- case "char":
- outList.add(String.format("%c", ((BytesMessage)message).readChar()));
- break;
- case "uuid":
- UUID uuid = (UUID)((ObjectMessage)message).getObject();
- outList.add(uuid.toString());
- break;
- case "binary":
- BytesMessage bm = (BytesMessage)message;
- int msgLen = (int)bm.getBodyLength();
- byte[] ba = new byte[msgLen];
- if (bm.readBytes(ba) == msgLen) {
- outList.add(new String(ba));
- } else {
- // TODO: Raise exception or error here: size mismatch
- }
- break;
- case "string":
- outList.add(((TextMessage)message).getText());
- break;
- case "symbol":
- outList.add(((BytesMessage)message).readUTF());
- break;
- case "list":
- break;
- case "map":
- break;
- case "array":
- break;
- default:
- // Internal error, should never happen if SUPPORTED_AMQP_TYPES matches this case stmt
- connection.close();
- throw new Exception("AmqpReceiver: Internal error: unsupported AMQP type \"" + amqpType + "\"");
- }
- }
- } else {
- System.out.println("ERROR: AmqpReceiver: AMQP type \"" + amqpType + "\" is not supported");
- connection.close();
- System.exit(1);
- }
-
- connection.close();
-
- // No exception, print results
- for (int i=0; i<outList.size(); i++) {
- System.out.println(outList.get(i));
- }
- } catch (Exception exp) {
- if (connection != null)
- connection.close();
- System.out.println("Caught exception, exiting.");
- exp.printStackTrace(System.out);
- System.exit(1);
- }
- }
-
- protected static boolean isSupportedAmqpType(String amqpType) {
- for (String supportedAmqpType: SUPPORTED_AMQP_TYPES) {
- if (amqpType.equals(supportedAmqpType))
- return true;
- }
- return false;
- }
-
- private static class MyExceptionListener implements ExceptionListener {
- @Override
- public void onException(JMSException exception) {
- System.out.println("Connection ExceptionListener fired, exiting.");
- exception.printStackTrace(System.out);
- System.exit(1);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpSender.java
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpSender.java b/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpSender.java
deleted file mode 100644
index 3fc5a90..0000000
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/AmqpSender.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.interop_test.shim;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.math.MathContext;
-import java.util.Arrays;
-import java.util.UUID;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class AmqpSender {
- private static final String USER = "guest";
- private static final String PASSWORD = "guest";
- private static final String[] SUPPORTED_AMQP_TYPES = {"null",
- "boolean",
- "ubyte",
- "ushort",
- "uint",
- "ulong",
- "byte",
- "short",
- "int",
- "long",
- "float",
- "double",
- "decimal32",
- "decimal64",
- "decimal128",
- "char",
- "timestamp",
- "uuid",
- "binary",
- "string",
- "symbol",
- "list",
- "map",
- "array"};
-
- public static void main(String[] args) throws Exception {
- if (args.length < 4) {
- System.out.println("AmqpSender: Insufficient number of arguments");
- System.out.println("AmqpSender: Expected arguments: broker_address, queue_name, amqp_type, test_val, test_val, ...");
- System.exit(1);
- }
- String brokerAddress = "amqp://" + args[0];
- String queueName = args[1];
- String amqpType = args[2];
- String[] testValueList = Arrays.copyOfRange(args, 3, args.length); // Use remaining args as test values
-
- try {
- ConnectionFactory factory = (ConnectionFactory)new JmsConnectionFactory(brokerAddress);
-
- Connection connection = factory.createConnection();
- connection.setExceptionListener(new MyExceptionListener());
- connection.start();
-
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Queue queue = session.createQueue(queueName);
-
- MessageProducer messageProducer = session.createProducer(queue);
-
- if (isSupportedAmqpType(amqpType)) {
- Message message = null;
- for (String testValueStr : testValueList) {
- switch (amqpType) {
- case "null":
- message = session.createBytesMessage();
- break;
- case "boolean":
- message = session.createBytesMessage();
- ((BytesMessage)message).writeBoolean(Boolean.parseBoolean(testValueStr));
- break;
- case "ubyte":
- {
- byte testValue = (byte)Short.parseShort(testValueStr);
- message = session.createBytesMessage();
- ((BytesMessage)message).writeByte(testValue);
- break;
- }
- case "ushort":
- {
- int testValue = Integer.parseInt(testValueStr);
- byte[] byteArray = new byte[2];
- byteArray[0] = (byte)(testValue >> 8);
- byteArray[1] = (byte)(testValue);
- message = session.createBytesMessage();
- ((BytesMessage)message).writeBytes(byteArray);
- break;
- }
- case "uint":
- {
- long testValue = Long.parseLong(testValueStr);
- byte[] byteArray = new byte[4];
- byteArray[0] = (byte)(testValue >> 24);
- byteArray[1] = (byte)(testValue >> 16);
- byteArray[2] = (byte)(testValue >> 8);
- byteArray[3] = (byte)(testValue);
- message = session.createBytesMessage();
- ((BytesMessage)message).writeBytes(byteArray);
- break;
- }
- case "ulong":
- {
- // TODO: Tidy this ugliness up - perhaps use of vector<byte>?
- BigInteger testValue = new BigInteger(testValueStr);
- byte[] bigIntArray = testValue.toByteArray(); // may be 1 to 9 bytes depending on number
- byte[] byteArray = {0, 0, 0, 0, 0, 0, 0, 0};
- int effectiveBigIntArrayLen = bigIntArray.length > 8 ? 8 : bigIntArray.length; // Cap length at 8
- int bigIntArrayOffs = bigIntArray.length > 8 ? bigIntArray.length - 8 : 0; // Offset when length > 8
- for (int i=0; i<bigIntArray.length && i < 8; i++)
- byteArray[8 - effectiveBigIntArrayLen + i] = bigIntArray[bigIntArrayOffs + i];
- message = session.createBytesMessage();
- ((BytesMessage)message).writeBytes(byteArray);
- break;
- }
- case "byte":
- message = session.createBytesMessage();
- ((BytesMessage)message).writeByte(Byte.parseByte(testValueStr));
- break;
- case "short":
- message = session.createBytesMessage();
- ((BytesMessage)message).writeShort(Short.parseShort(testValueStr));
- break;
- case "int":
- message = session.createBytesMessage();
- ((BytesMessage)message).writeInt(Integer.parseInt(testValueStr));
- break;
- case "long":
- case "timestamp":
- message = session.createBytesMessage();
- ((BytesMessage)message).writeLong(Long.parseLong(testValueStr));
- break;
- case "float":
- Long i = Long.parseLong(testValueStr.substring(2), 16);
- message = session.createBytesMessage();
- ((BytesMessage)message).writeFloat(Float.intBitsToFloat(i.intValue()));
- break;
- case "double":
- Long l1 = Long.parseLong(testValueStr.substring(2, 3), 16) << 60;
- Long l2 = Long.parseLong(testValueStr.substring(3), 16);
- message = session.createBytesMessage();
- ((BytesMessage)message).writeDouble(Double.longBitsToDouble(l1 | l2));
- break;
- case "decimal32":
- BigDecimal bd32 = new BigDecimal(testValueStr, MathContext.DECIMAL32);
- message = session.createObjectMessage();
- ((ObjectMessage)message).setObject(bd32);
- break;
- case "decimal64":
- BigDecimal bd64 = new BigDecimal(testValueStr, MathContext.DECIMAL64);
- message = session.createObjectMessage();
- ((ObjectMessage)message).setObject(bd64);
- break;
- case "decimal128":
- BigDecimal bd128 = new BigDecimal(testValueStr, MathContext.DECIMAL128);
- message = session.createObjectMessage();
- ((ObjectMessage)message).setObject(bd128);
- break;
- case "char":
- char c = 0;
- if (testValueStr.length() == 1) // Single char
- c = testValueStr.charAt(0);
- else if (testValueStr.length() == 6) // unicode format
- c = (char)Integer.parseInt(testValueStr, 16);
- message = session.createBytesMessage();
- ((BytesMessage)message).writeChar(c);
- break;
- case "uuid":
- UUID uuid = UUID.fromString(testValueStr);
- message = session.createObjectMessage();
- ((ObjectMessage)message).setObject(uuid);
- break;
- case "binary":
- message = session.createBytesMessage();
- byte[] byteArray = testValueStr.getBytes();
- ((BytesMessage)message).writeBytes(byteArray, 0, byteArray.length);
- break;
- case "string":
- message = session.createTextMessage(testValueStr);
- break;
- case "symbol":
- message = session.createBytesMessage();
- ((BytesMessage)message).writeUTF(testValueStr);
- break;
- case "list":
- break;
- case "map":
- break;
- case "array":
- break;
- default:
- // Internal error, should never happen if SUPPORTED_AMQP_TYPES matches this case stmt
- connection.close();
- throw new Exception("AmqpSender: Internal error: unsupported AMQP type \"" + amqpType + "\"");
- }
- messageProducer.send(message, DeliveryMode.NON_PERSISTENT, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
- }
- } else {
- System.out.println("ERROR: AmqpSender: AMQP type \"" + amqpType + "\" is not supported");
- connection.close();
- System.exit(1);
- }
-
- connection.close();
- } catch (Exception exp) {
- System.out.println("Caught exception, exiting.");
- exp.printStackTrace(System.out);
- System.exit(1);
- }
- }
-
- protected static boolean isSupportedAmqpType(String amqpType) {
- for (String supportedAmqpType: SUPPORTED_AMQP_TYPES) {
- if (amqpType.equals(supportedAmqpType))
- return true;
- }
- return false;
- }
-
- private static class MyExceptionListener implements ExceptionListener {
- @Override
- public void onException(JMSException exception) {
- System.out.println("Connection ExceptionListener fired, exiting.");
- exception.printStackTrace(System.out);
- System.exit(1);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsReceiverShim.java
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsReceiverShim.java b/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsReceiverShim.java
deleted file mode 100644
index f567638..0000000
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsReceiverShim.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.interop_test.shim;
-
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonReader;
-import javax.json.JsonWriter;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class JmsReceiverShim {
- private static final String USER = "guest";
- private static final String PASSWORD = "guest";
- private static final int TIMEOUT = 1000;
- private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = {"JMS_BYTESMESSAGE_TYPE",
- "JMS_MAPMESSAGE_TYPE",
- "JMS_OBJECTMESSAGE_TYPE",
- "JMS_STREAMMESSAGE_TYPE",
- "JMS_TEXTMESSAGE_TYPE"};
-
- // args[0]: Broker URL
- // args[1]: Queue name
- // args[2]: JMS message type
- // args[3]: JSON Test number map
- public static void main(String[] args) throws Exception {
- if (args.length < 4) {
- System.out.println("JmsReceiverShim: Insufficient number of arguments");
- System.out.println("JmsReceiverShim: Expected arguments: broker_address, queue_name, amqp_type, num_test_values");
- System.exit(1);
- }
- String brokerAddress = "amqp://" + args[0];
- String queueName = args[1];
- String jmsMessageType = args[2];
- if (!isSupportedJmsMessageType(jmsMessageType)) {
- System.out.println("ERROR: JmsReceiverShim: unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
- System.exit(1);
- }
-
- JsonReader jsonReader = Json.createReader(new StringReader(args[3]));
- JsonObject numTestValuesMap = jsonReader.readObject();
- jsonReader.close();
-
- Connection connection = null;
-
- try {
- ConnectionFactory factory = (ConnectionFactory)new JmsConnectionFactory(brokerAddress);
-
- connection = factory.createConnection(USER, PASSWORD);
- connection.setExceptionListener(new MyExceptionListener());
- connection.start();
-
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Queue queue = session.createQueue(queueName);
-
- MessageConsumer messageConsumer = session.createConsumer(queue);
-
- List<String> keyList = new ArrayList<String>(numTestValuesMap.keySet());
- Collections.sort(keyList);
-
- Message message = null;
- JsonObjectBuilder job = Json.createObjectBuilder();
- for (String key: keyList) {
- JsonArrayBuilder jab = Json.createArrayBuilder();
- for (int i=0; i<numTestValuesMap.getJsonNumber(key).intValue(); ++i) {
- message = messageConsumer.receive(TIMEOUT);
- if (message == null) break;
- switch (jmsMessageType) {
- case "JMS_BYTESMESSAGE_TYPE":
- switch (key) {
- case "boolean":
- jab.add(((BytesMessage)message).readBoolean()?"True":"False");
- break;
- case "byte":
- jab.add(formatByte(((BytesMessage)message).readByte()));
- break;
- case "bytes":
- {
- byte[] bytesBuff = new byte[65536];
- int numBytesRead = ((BytesMessage)message).readBytes(bytesBuff);
- if (numBytesRead >= 0) {
- jab.add(new String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
- } else {
- // NOTE: For this case, an empty byte array has nothing to return
- jab.add(new String());
- }
- }
- break;
- case "char":
- jab.add(formatChar(((BytesMessage)message).readChar()));
- break;
- case "double":
- long l = Double.doubleToRawLongBits(((BytesMessage)message).readDouble());
- jab.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
- break;
- case "float":
- int i0 = Float.floatToRawIntBits(((BytesMessage)message).readFloat());
- jab.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
- break;
- case "int":
- jab.add(formatInt(((BytesMessage)message).readInt()));
- break;
- case "long":
- jab.add(formatLong(((BytesMessage)message).readLong()));
- break;
- case "object":
- {
- byte[] bytesBuff = new byte[65536];
- int numBytesRead = ((BytesMessage)message).readBytes(bytesBuff);
- if (numBytesRead >= 0) {
- ByteArrayInputStream bais = new ByteArrayInputStream(Arrays.copyOfRange(bytesBuff, 0, numBytesRead));
- ObjectInputStream ois = new ObjectInputStream(bais);
- Object obj = ois.readObject();
- jab.add(obj.getClass().getName() + ":" + obj.toString());
- } else {
- jab.add("<object error>");
- }
- }
- break;
- case "short":
- jab.add(formatShort(((BytesMessage)message).readShort()));
- break;
- case "string":
- jab.add(((BytesMessage)message).readUTF());
- break;
- default:
- throw new Exception("JmsReceiverShim: Unknown subtype for " + jmsMessageType + ": \"" + key + "\"");
- }
- break;
- case "JMS_STREAMMESSAGE_TYPE":
- switch (key) {
- case "boolean":
- jab.add(((StreamMessage)message).readBoolean()?"True":"False");
- break;
- case "byte":
- jab.add(formatByte(((StreamMessage)message).readByte()));
- break;
- case "bytes":
- byte[] bytesBuff = new byte[65536];
- int numBytesRead = ((StreamMessage)message).readBytes(bytesBuff);
- if (numBytesRead >= 0) {
- jab.add(new String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
- } else {
- System.out.println("StreamMessage.readBytes() returned " + numBytesRead);
- jab.add("<bytes error>");
- }
- break;
- case "char":
- jab.add(formatChar(((StreamMessage)message).readChar()));
- break;
- case "double":
- long l = Double.doubleToRawLongBits(((StreamMessage)message).readDouble());
- jab.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
- break;
- case "float":
- int i0 = Float.floatToRawIntBits(((StreamMessage)message).readFloat());
- jab.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
- break;
- case "int":
- jab.add(formatInt(((StreamMessage)message).readInt()));
- break;
- case "long":
- jab.add(formatLong(((StreamMessage)message).readLong()));
- break;
- case "object":
- Object obj = ((StreamMessage)message).readObject();
- jab.add(obj.getClass().getName() + ":" + obj.toString());
- break;
- case "short":
- jab.add(formatShort(((StreamMessage)message).readShort()));
- break;
- case "string":
- jab.add(((StreamMessage)message).readString());
- break;
- default:
- throw new Exception("JmsReceiverShim: Unknown subtype for " + jmsMessageType + ": \"" + key + "\"");
- }
- break;
- case "JMS_MAPMESSAGE_TYPE":
- String name = String.format("%s%03d", key, i);
- switch (key) {
- case "boolean":
- jab.add(((MapMessage)message).getBoolean(name)?"True":"False");
- break;
- case "byte":
- jab.add(formatByte(((MapMessage)message).getByte(name)));
- break;
- case "bytes":
- jab.add(new String(((MapMessage)message).getBytes(name)));
- break;
- case "char":
- jab.add(formatChar(((MapMessage)message).getChar(name)));
- break;
- case "double":
- long l = Double.doubleToRawLongBits(((MapMessage)message).getDouble(name));
- jab.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
- break;
- case "float":
- int i0 = Float.floatToRawIntBits(((MapMessage)message).getFloat(name));
- jab.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
- break;
- case "int":
- jab.add(formatInt(((MapMessage)message).getInt(name)));
- break;
- case "long":
- jab.add(formatLong(((MapMessage)message).getLong(name)));
- break;
- case "object":
- Object obj = ((MapMessage)message).getObject(name);
- jab.add(obj.getClass().getName() + ":" + obj.toString());
- break;
- case "short":
- jab.add(formatShort(((MapMessage)message).getShort(name)));
- break;
- case "string":
- jab.add(((MapMessage)message).getString(name));
- break;
- default:
- throw new Exception("JmsReceiverShim: Unknown subtype for " + jmsMessageType + ": \"" + key + "\"");
- }
- break;
- case "JMS_OBJECTMESSAGE_TYPE":
- jab.add(((ObjectMessage)message).getObject().toString());
- break;
- case "JMS_TEXTMESSAGE_TYPE":
- jab.add(((TextMessage)message).getText());
- break;
- default:
- connection.close();
- throw new Exception("JmsReceiverShim: Internal error: unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
- }
- }
- job.add(key, jab);
- }
- connection.close();
-
- System.out.println(jmsMessageType);
- StringWriter out = new StringWriter();
- JsonWriter jsonWriter = Json.createWriter(out);
- jsonWriter.writeObject(job.build());
- jsonWriter.close();
- System.out.println(out.toString());
- } catch (Exception exp) {
- if (connection != null)
- connection.close();
- System.out.println("Caught exception, exiting.");
- exp.printStackTrace(System.out);
- System.exit(1);
- }
- }
-
- protected static String formatByte(byte b) {
- boolean neg = false;
- if (b < 0) {
- neg = true;
- b = (byte)-b;
- }
- return String.format("%s0x%x", neg?"-":"", b);
- }
-
- protected static String formatChar(char c) {
- if (Character.isLetterOrDigit(c)) {
- return String.format("%c", c);
- }
- char[] ca = {c};
- return new String(ca);
- }
-
- protected static String formatInt(int i) {
- boolean neg = false;
- if (i < 0) {
- neg = true;
- i = -i;
- }
- return String.format("%s0x%x", neg?"-":"", i);
- }
-
- protected static String formatLong(long l) {
- boolean neg = false;
- if (l < 0) {
- neg = true;
- l = -l;
- }
- return String.format("%s0x%x", neg?"-":"", l);
- }
-
- protected static String formatShort(int s) {
- boolean neg = false;
- if (s < 0) {
- neg = true;
- s = -s;
- }
- return String.format("%s0x%x", neg?"-":"", s);
- }
-
- protected static boolean isSupportedJmsMessageType(String jmsMessageType) {
- for (String supportedJmsMessageType: SUPPORTED_JMS_MESSAGE_TYPES) {
- if (jmsMessageType.equals(supportedJmsMessageType))
- return true;
- }
- return false;
- }
-
- private static class MyExceptionListener implements ExceptionListener {
- @Override
- public void onException(JMSException exception) {
- System.out.println("Connection ExceptionListener fired, exiting.");
- exception.printStackTrace(System.out);
- System.exit(1);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/f4b87a1e/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsSenderShim.java
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsSenderShim.java b/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsSenderShim.java
deleted file mode 100644
index e22be0a..0000000
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/interop_test/shim/JmsSenderShim.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.interop_test.shim;
-
-import java.io.Serializable;
-import java.io.StringReader;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonReader;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class JmsSenderShim {
- private static final String USER = "guest";
- private static final String PASSWORD = "guest";
- private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = {"JMS_BYTESMESSAGE_TYPE",
- "JMS_MAPMESSAGE_TYPE",
- "JMS_OBJECTMESSAGE_TYPE",
- "JMS_STREAMMESSAGE_TYPE",
- "JMS_TEXTMESSAGE_TYPE"};
-
- // args[0]: Broker URL
- // args[1]: Queue name
- // args[2]: JMS message type
- // args[3]: JSON Test value map
- public static void main(String[] args) throws Exception {
- if (args.length < 4) {
- System.out.println("JmsSenderShim: Insufficient number of arguments");
- System.out.println("JmsSenderShim: Expected arguments: broker_address, queue_name, amqp_type, test_val, test_val, ...");
- System.exit(1);
- }
- String brokerAddress = "amqp://" + args[0];
- String queueName = args[1];
- String jmsMessageType = args[2];
- if (!isSupportedJmsMessageType(jmsMessageType)) {
- System.out.println("ERROR: JmsReceiver: unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
- System.exit(1);
- }
-
- JsonReader jsonReader = Json.createReader(new StringReader(args[3]));
- JsonObject testValuesMap = jsonReader.readObject();
- jsonReader.close();
-
- try {
- ConnectionFactory factory = (ConnectionFactory)new JmsConnectionFactory(brokerAddress);
-
- Connection connection = factory.createConnection();
- connection.setExceptionListener(new MyExceptionListener());
- connection.start();
-
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Queue queue = session.createQueue(queueName);
-
- MessageProducer messageProducer = session.createProducer(queue);
-
- Message message = null;
- List<String> keyList = new ArrayList<String>(testValuesMap.keySet());
- Collections.sort(keyList);
- for (String key: keyList) {
- JsonArray testValues = testValuesMap.getJsonArray(key);
- for (int i=0; i<testValues.size(); ++i) {
- String testValue = testValues.getJsonString(i).getString();
- switch (jmsMessageType) {
- case "JMS_BYTESMESSAGE_TYPE":
- message = createBytesMessage(session, key, testValue);
- break;
- case "JMS_MAPMESSAGE_TYPE":
- message = createMapMessage(session, key, testValue, i);
- break;
- case "JMS_OBJECTMESSAGE_TYPE":
- message = createObjectMessage(session, key, testValue);
- break;
- case "JMS_STREAMMESSAGE_TYPE":
- message = createStreamMessage(session, key, testValue);
- break;
- case "JMS_TEXTMESSAGE_TYPE":
- message = createTextMessage(session, testValue);
- break;
- default:
- throw new Exception("Internal exception: Unexpected JMS message type \"" + jmsMessageType + "\"");
- }
- messageProducer.send(message, DeliveryMode.NON_PERSISTENT, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
- }
- }
-
- connection.close();
- } catch (Exception exp) {
- System.out.println("Caught exception, exiting.");
- exp.printStackTrace(System.out);
- System.exit(1);
- }
- }
-
- protected static BytesMessage createBytesMessage(Session session, String testValueType, String testValue) throws Exception, JMSException {
- BytesMessage message = session.createBytesMessage();
- switch (testValueType) {
- case "boolean":
- message.writeBoolean(Boolean.parseBoolean(testValue));
- break;
- case "byte":
- message.writeByte(Byte.decode(testValue));
- break;
- case "bytes":
- message.writeBytes(testValue.getBytes());
- break;
- case "char":
- if (testValue.length() == 1) { // Char format: "X" or "\xNN"
- message.writeChar(testValue.charAt(0));
- } else {
- throw new Exception("JmsSenderShim.createBytesMessage() Malformed char string: \"" + testValue + "\" of length " + testValue.length());
- }
- break;
- case "double":
- Long l1 = Long.parseLong(testValue.substring(2, 3), 16) << 60;
- Long l2 = Long.parseLong(testValue.substring(3), 16);
- message.writeDouble(Double.longBitsToDouble(l1 | l2));
- break;
- case "float":
- Long i = Long.parseLong(testValue.substring(2), 16);
- message.writeFloat(Float.intBitsToFloat(i.intValue()));
- break;
- case "int":
- message.writeInt(Integer.decode(testValue));
- break;
- case "long":
- message.writeLong(Long.decode(testValue));
- break;
- case "object":
- Object obj = (Object)createObject(testValue);
- message.writeObject(obj);
- break;
- case "short":
- message.writeShort(Short.decode(testValue));
- break;
- case "string":
- message.writeUTF(testValue);
- break;
- default:
- throw new Exception("Internal exception: Unexpected JMS message sub-type \"" + testValueType + "\"");
- }
- return message;
- }
-
- protected static MapMessage createMapMessage(Session session, String testValueType, String testValue, int testValueNum) throws Exception, JMSException {
- MapMessage message = session.createMapMessage();
- String name = String.format("%s%03d", testValueType, testValueNum);
- switch (testValueType) {
- case "boolean":
- message.setBoolean(name, Boolean.parseBoolean(testValue));
- break;
- case "byte":
- message.setByte(name, Byte.decode(testValue));
- break;
- case "bytes":
- message.setBytes(name, testValue.getBytes());
- break;
- case "char":
- if (testValue.length() == 1) { // Char format: "X"
- message.setChar(name, testValue.charAt(0));
- } else if (testValue.length() == 6) { // Char format: "\xNNNN"
- message.setChar(name, (char)Integer.parseInt(testValue.substring(2), 16));
- } else {
- throw new Exception("JmsSenderShim.createMapMessage() Malformed char string: \"" + testValue + "\"");
- }
- break;
- case "double":
- Long l1 = Long.parseLong(testValue.substring(2, 3), 16) << 60;
- Long l2 = Long.parseLong(testValue.substring(3), 16);
- message.setDouble(name, Double.longBitsToDouble(l1 | l2));
- break;
- case "float":
- Long i = Long.parseLong(testValue.substring(2), 16);
- message.setFloat(name, Float.intBitsToFloat(i.intValue()));
- break;
- case "int":
- message.setInt(name, Integer.decode(testValue));
- break;
- case "long":
- message.setLong(name, Long.decode(testValue));
- break;
- case "object":
- Object obj = (Object)createObject(testValue);
- message.setObject(name, obj);
- break;
- case "short":
- message.setShort(name, Short.decode(testValue));
- break;
- case "string":
- message.setString(name, testValue);
- break;
- default:
- throw new Exception("Internal exception: Unexpected JMS message sub-type \"" + testValueType + "\"");
- }
- return message;
- }
-
- protected static ObjectMessage createObjectMessage(Session session, String className, String testValue) throws Exception, JMSException {
- Serializable obj = createJavaObject(className, testValue);
- if (obj == null) {
- // TODO: Handle error here
- System.out.println("createObjectMessage: obj == null");
- return null;
- }
- ObjectMessage message = session.createObjectMessage();
- message.setObject(obj);
- return message;
- }
-
- protected static StreamMessage createStreamMessage(Session session, String testValueType, String testValue) throws Exception, JMSException {
- StreamMessage message = session.createStreamMessage();
- switch (testValueType) {
- case "boolean":
- message.writeBoolean(Boolean.parseBoolean(testValue));
- break;
- case "byte":
- message.writeByte(Byte.decode(testValue));
- break;
- case "bytes":
- message.writeBytes(testValue.getBytes());
- break;
- case "char":
- if (testValue.length() == 1) { // Char format: "X"
- message.writeChar(testValue.charAt(0));
- } else if (testValue.length() == 6) { // Char format: "\xNNNN"
- message.writeChar((char)Integer.parseInt(testValue.substring(2), 16));
- } else {
- throw new Exception("JmsSenderShim.createStreamMessage() Malformed char string: \"" + testValue + "\"");
- }
- break;
- case "double":
- Long l1 = Long.parseLong(testValue.substring(2, 3), 16) << 60;
- Long l2 = Long.parseLong(testValue.substring(3), 16);
- message.writeDouble(Double.longBitsToDouble(l1 | l2));
- break;
- case "float":
- Long i = Long.parseLong(testValue.substring(2), 16);
- message.writeFloat(Float.intBitsToFloat(i.intValue()));
- break;
- case "int":
- message.writeInt(Integer.decode(testValue));
- break;
- case "long":
- message.writeLong(Long.decode(testValue));
- break;
- case "object":
- Object obj = (Object)createObject(testValue);
- message.writeObject(obj);
- break;
- case "short":
- message.writeShort(Short.decode(testValue));
- break;
- case "string":
- message.writeString(testValue);
- break;
- default:
- throw new Exception("Internal exception: Unexpected JMS message sub-type \"" + testValueType + "\"");
- }
- return message;
- }
-
- protected static Serializable createJavaObject(String className, String testValue) throws Exception {
- Serializable obj = null;
- try {
- Class<?> c = Class.forName(className);
- if (className.compareTo("java.lang.Character") == 0) {
- Constructor ctor = c.getConstructor(char.class);
- if (testValue.length() == 1) {
- // Use first character of string
- obj = (Serializable)ctor.newInstance(testValue.charAt(0));
- } else if (testValue.length() == 4 || testValue.length() == 6) {
- // Format '\xNN' or '\xNNNN'
- obj = (Serializable)ctor.newInstance((char)Integer.parseInt(testValue.substring(2), 16));
- } else {
- throw new Exception("JmsSenderShim.createStreamMessage() Malformed char string: \"" + testValue + "\"");
- }
- } else {
- // Use string constructor
- Constructor ctor = c.getConstructor(String.class);
- obj = (Serializable)ctor.newInstance(testValue);
- }
- }
- catch (ClassNotFoundException e) {
- e.printStackTrace(System.out);
- }
- catch (NoSuchMethodException e) {
- e.printStackTrace(System.out);
- }
- catch (InstantiationException e) {
- e.printStackTrace(System.out);
- }
- catch (IllegalAccessException e) {
- e.printStackTrace(System.out);
- }
- catch (InvocationTargetException e) {
- e.printStackTrace(System.out);
- }
- return obj;
- }
-
- // value has format "classname:ctorstrvalue"
- protected static Serializable createObject(String value) throws Exception {
- Serializable obj = null;
- int colonIndex = value.indexOf(":");
- if (colonIndex >= 0) {
- String className = value.substring(0, colonIndex);
- String testValue = value.substring(colonIndex+1);
- obj = createJavaObject(className, testValue);
- } else {
- throw new Exception("createObject(): Malformed value string");
- }
- return obj;
- }
-
- protected static TextMessage createTextMessage(Session session, String valueStr) throws JMSException {
- return session.createTextMessage(valueStr);
- }
-
- protected static boolean isSupportedJmsMessageType(String jmsMessageType) {
- for (String supportedJmsMessageType: SUPPORTED_JMS_MESSAGE_TYPES) {
- if (jmsMessageType.equals(supportedJmsMessageType))
- return true;
- }
- return false;
- }
-
- private static class MyExceptionListener implements ExceptionListener {
- @Override
- public void onException(JMSException exception) {
- System.out.println("Connection ExceptionListener fired, exiting.");
- exception.printStackTrace(System.out);
- System.exit(1);
- }
- }
-}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org