summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2012-06-15 17:24:09 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2012-06-15 17:24:09 +0000
commitc6e1cac6277f818f096eff2b152055b82a6182ca (patch)
tree6c14504181b9a000f1ad30356306fb47e4e14170
parent2b60feb22a0b53fa92282328f0d19430aa9cb3f5 (diff)
downloadqpid-python-c6e1cac6277f818f096eff2b152055b82a6182ca.tar.gz
QPID-4027 Added one-to-one exception mapping between c++ and java to
provide the application/users more detailed error information. git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/address-refactor2@1350712 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/bindings/qpid/java/java.i71
-rw-r--r--qpid/cpp/bindings/swig_java_cpp_helper.i64
2 files changed, 135 insertions, 0 deletions
diff --git a/qpid/cpp/bindings/qpid/java/java.i b/qpid/cpp/bindings/qpid/java/java.i
index 56ae6227ba..390b7b87a0 100644
--- a/qpid/cpp/bindings/qpid/java/java.i
+++ b/qpid/cpp/bindings/qpid/java/java.i
@@ -64,6 +64,77 @@ std::string toString()
}
}
+
+%exception {
+
+ try {
+ $action
+ // --> Receive exceptions
+ } catch (qpid::messaging::NoMessageAvailable& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::FetchError& ex) {
+ jenv->ThrowNew(JAVA_FETCH_EXP, ex.what());
+ return $null;
+ // --> Send exceptions
+ } catch (qpid::messaging::TargetCapacityExceeded& ex) {
+ jenv->ThrowNew(JAVA_TARGET_CAP_EXCEEDED_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::SendError& ex) {
+ jenv->ThrowNew(JAVA_SEND_EXP, ex.what());
+ return $null;
+ // --> Address exceptions
+ } catch (qpid::messaging::NotFound& ex) {
+ jenv->ThrowNew(JAVA_ADDR_NOT_FOUND_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::AssertionFailed& ex) {
+ jenv->ThrowNew(JAVA_ADDR_ASSERTION_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::MalformedAddress& ex) {
+ jenv->ThrowNew(JAVA_MALFORMED_ADDR_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::ResolutionError & ex) {
+ jenv->ThrowNew(JAVA_ADDR_RESOLUTION_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::TransactionAborted & ex) {
+ jenv->ThrowNew(JAVA_TX_ABORTED_EXP, ex.what());
+ return $null;
+ // --> Session exceptions
+ } catch (qpid::messaging::TransactionError & ex) {
+ jenv->ThrowNew(JAVA_TRANSACTION_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::UnauthorizedAccess & ex) {
+ jenv->ThrowNew(JAVA_UNAUTHORIZED_EXP, ex.what());
+ return $null;
+ // transport
+ } catch (qpid::messaging::TransportFailure & ex) {
+ jenv->ThrowNew(JAVA_TRANSPORT_FAILURE_EXP, ex.what());
+ return $null;
+ // general catch all exceptions
+ } catch (qpid::messaging::ConnectionError& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::SessionError& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::SenderError& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::ReceiverError& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::AddressError& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::messaging::MessagingException& ex) {
+ jenv->ThrowNew(JAVA_NO_MSG_AVAILABLE_EXP, ex.what());
+ return $null;
+ } catch (qpid::types::Exception& ex) {
+ jenv->ThrowNew(JAVA_RUNTIME_EXP, ex.what());
+ return $null;
+ }
+}
+
%rename(NativeConnection) qpid::messaging::Connection;
%rename(NativeSession) qpid::messaging::Session;
%rename(NativeSender) qpid::messaging::Sender;
diff --git a/qpid/cpp/bindings/swig_java_cpp_helper.i b/qpid/cpp/bindings/swig_java_cpp_helper.i
index 7a31ff6221..54a38870b7 100644
--- a/qpid/cpp/bindings/swig_java_cpp_helper.i
+++ b/qpid/cpp/bindings/swig_java_cpp_helper.i
@@ -79,10 +79,41 @@ static jmethodID JAVA_DOUBLE_CTOR;
static jmethodID JAVA_DOUBLE_VALUE_METHOD;
static jclass JAVA_ILLEGAL_ARGUMENT_EXP;
+static jclass JAVA_RUNTIME_EXP;
static jclass JAVA_JNI_LAYER_EXP;
static jmethodID JAVA_JNI_LAYER_EXP_CTOR1; // takes a msg.
static jmethodID JAVA_JNI_LAYER_EXP_CTOR2; // takes a msg and a throwable.
+// receiver
+static jclass JAVA_NO_MSG_AVAILABLE_EXP;
+static jclass JAVA_FETCH_EXP;
+
+// sender
+static jclass JAVA_TARGET_CAP_EXCEEDED_EXP;
+static jclass JAVA_SEND_EXP;
+
+// address
+static jclass JAVA_ADDR_NOT_FOUND_EXP;
+static jclass JAVA_MALFORMED_ADDR_EXP;
+static jclass JAVA_ADDR_RESOLUTION_EXP;
+static jclass JAVA_ADDR_ASSERTION_EXP;
+
+// session
+static jclass JAVA_TRANSACTION_EXP;
+static jclass JAVA_TX_ABORTED_EXP;
+static jclass JAVA_UNAUTHORIZED_EXP;
+
+// transport
+static jclass JAVA_TRANSPORT_FAILURE_EXP;
+
+// general catch all
+static jclass JAVA_MESSAGING_EXP;
+static jclass JAVA_CONNECTION_EXP;
+static jclass JAVA_SESSION_EXP;
+static jclass JAVA_SENDER_EXP;
+static jclass JAVA_RECEIVER_EXP;
+static jclass JAVA_ADDR_EXP;
+
static jobject createGlobalRef(JNIEnv* env,jobject obj)
{
return env->NewGlobalRef(obj);
@@ -160,10 +191,43 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
JAVA_FLOAT_VALUE_METHOD = getMethodID(env,JAVA_FLOAT_CLASS,"floatValue", "()F");
JAVA_ILLEGAL_ARGUMENT_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"java/lang/IllegalArgumentException")));
+ JAVA_RUNTIME_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"java/lang/RuntimeException")));
JAVA_JNI_LAYER_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/cpp/JNILayerException")));
JAVA_JNI_LAYER_EXP_CTOR1 = getMethodID(env,JAVA_JNI_LAYER_EXP, "<init>", "(Ljava/lang/String;)V");
JAVA_JNI_LAYER_EXP_CTOR2 = getMethodID(env,JAVA_JNI_LAYER_EXP, "<init>", "(Ljava/lang/String;Ljava/lang/Throwable;)V");
+ // Messaging exceptions ---------------
+
+ // receiver
+ JAVA_NO_MSG_AVAILABLE_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/NoMessageAvailableException")));
+ JAVA_FETCH_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/FetchException")));
+
+ // sender
+ JAVA_TARGET_CAP_EXCEEDED_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/TargetCapacityExceededException")));
+ JAVA_SEND_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/SendException")));
+
+ // address
+ JAVA_ADDR_NOT_FOUND_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/AddressNotFoundException")));
+ JAVA_MALFORMED_ADDR_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/MalformedAddressException")));
+ JAVA_ADDR_RESOLUTION_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/AddressResolutionException")));
+ JAVA_ADDR_ASSERTION_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/AddressAssertionFailedException")));
+
+ // session
+ JAVA_TRANSACTION_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/TransactionException")));
+ JAVA_TX_ABORTED_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/TransactionAbortedException")));
+ JAVA_UNAUTHORIZED_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/UnauthorizedAccessException")));
+
+ // transport
+ JAVA_TRANSPORT_FAILURE_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/TransportFailureException")));
+
+ // general catch all
+ JAVA_MESSAGING_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/MessagingException")));
+ JAVA_CONNECTION_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/ConnectionException")));
+ JAVA_SESSION_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/SessionException")));
+ JAVA_SENDER_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/SenderException")));
+ JAVA_RECEIVER_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/ReceiverException")));
+ JAVA_ADDR_EXP = static_cast<jclass>(createGlobalRef(env,findClass(env,"org/apache/qpid/messaging/AddressException")));
+
if (env->ExceptionCheck())
{
// The JVM will throw an exception on the Java side.