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 <[email protected]> Authored: Wed May 4 10:28:18 2016 -0400 Committer: Kim van der Riet <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
