summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2012-06-07 17:35:01 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2012-06-07 17:35:01 +0000
commitabcc7316bedddc6f5f5930e3661a3e6d06ce30cf (patch)
treea49567133332bf3260364514148a896e1ed337ea
parent9c3aa371c909cd5cfcc56cd8bdb7bd2013aee7af (diff)
downloadqpid-python-abcc7316bedddc6f5f5930e3661a3e6d06ce30cf.tar.gz
QPID-4027 Added error handling when converting between java and variant
types. git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/address-refactor2@1347729 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/bindings/swig_java_cpp_helper.i17
-rw-r--r--qpid/cpp/bindings/swig_java_typemaps.i12
2 files changed, 28 insertions, 1 deletions
diff --git a/qpid/cpp/bindings/swig_java_cpp_helper.i b/qpid/cpp/bindings/swig_java_cpp_helper.i
index e7b3332637..017b0e0e93 100644
--- a/qpid/cpp/bindings/swig_java_cpp_helper.i
+++ b/qpid/cpp/bindings/swig_java_cpp_helper.i
@@ -172,6 +172,18 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
return JNI_VERSION_1_4;
}
+static bool checkAndThrowException(JNIEnv* env, const char* msg)
+{
+ jthrowable cause = env->ExceptionOccurred();
+ if (cause)
+ {
+ jthrowable ex = static_cast<jthrowable>(env->NewObject(JAVA_JNI_LAYER_EXP, JAVA_JNI_LAYER_EXP_CTOR, msg, cause));
+ env->Throw(ex);
+ return true;
+ }
+ return false;
+}
+
static jobject newJavaBoolean(JNIEnv* env, jboolean arg)
{
return env->NewObject(JAVA_BOOLEAN_CLASS, JAVA_BOOLEAN_CTOR,arg);
@@ -285,8 +297,13 @@ static qpid::types::Variant convertJavaObjectToVariant(JNIEnv* env, jobject obj)
else
{
env->ThrowNew(JAVA_ILLEGAL_ARGUMENT_EXP,"Only primitive types and strings are allowed");
+ return 0;
}
+ if (checkAndThrowException(env,"Exception occured when converting Java object to Variant"))
+ {
+ return 0;
+ }
return result;
}
%}
diff --git a/qpid/cpp/bindings/swig_java_typemaps.i b/qpid/cpp/bindings/swig_java_typemaps.i
index 9d0446d31f..6dbefc1a7e 100644
--- a/qpid/cpp/bindings/swig_java_typemaps.i
+++ b/qpid/cpp/bindings/swig_java_typemaps.i
@@ -105,7 +105,17 @@
/* -- qpid::types::Variant& -- */
%typemap(in) (const qpid::types::Variant&) {
- $1 = new qpid::types::Variant(convertJavaObjectToVariant(jenv,$input));
+ qpid::types::Variant v = convertJavaObjectToVariant(jenv,$input);
+ if (v)
+ {
+ $1 = new qpid::types::Variant(v);
+ }
+ else
+ {
+ // There will be an exception on the java side,
+ // thrown by convertJavaObjectToVariant method.
+ return;
+ }
}
%typemap(javain) (const qpid::types::Variant&) "$javainput"