diff options
author | Rajith Muditha Attapattu <rajith@apache.org> | 2012-06-15 17:24:09 +0000 |
---|---|---|
committer | Rajith Muditha Attapattu <rajith@apache.org> | 2012-06-15 17:24:09 +0000 |
commit | c6e1cac6277f818f096eff2b152055b82a6182ca (patch) | |
tree | 6c14504181b9a000f1ad30356306fb47e4e14170 | |
parent | 2b60feb22a0b53fa92282328f0d19430aa9cb3f5 (diff) | |
download | qpid-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.i | 71 | ||||
-rw-r--r-- | qpid/cpp/bindings/swig_java_cpp_helper.i | 64 |
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. |