modules/fxpackager/src/main/native/library/common/Java.cpp
Print this page
*** 38,59 ****
//--------------------------------------------------------------------------------------------------
#ifdef DEBUG
! std::string JavaException::CreateExceptionMessage(JNIEnv* Env, jthrowable Exception,
jmethodID GetCauseMethod, jmethodID GetStackTraceMethod, jmethodID ThrowableToTStringMethod,
jmethodID FrameToTStringMethod) {
! std::string result;
jobjectArray frames = (jobjectArray)Env->CallObjectMethod(Exception, GetStackTraceMethod);
// Append Throwable.toTString().
if (0 != frames) {
jstring jstr = (jstring)Env->CallObjectMethod(Exception, ThrowableToTStringMethod);
const char* str = Env->GetStringUTFChars(jstr, 0);
! result += str;
Env->ReleaseStringUTFChars(jstr, str);
Env->DeleteLocalRef(jstr);
}
// Append stack trace if one exists.
--- 38,59 ----
//--------------------------------------------------------------------------------------------------
#ifdef DEBUG
! TString JavaException::CreateExceptionMessage(JNIEnv* Env, jthrowable Exception,
jmethodID GetCauseMethod, jmethodID GetStackTraceMethod, jmethodID ThrowableToTStringMethod,
jmethodID FrameToTStringMethod) {
! TString result;
jobjectArray frames = (jobjectArray)Env->CallObjectMethod(Exception, GetStackTraceMethod);
// Append Throwable.toTString().
if (0 != frames) {
jstring jstr = (jstring)Env->CallObjectMethod(Exception, ThrowableToTStringMethod);
const char* str = Env->GetStringUTFChars(jstr, 0);
! result += PlatformString(str).toPlatformString();
Env->ReleaseStringUTFChars(jstr, str);
Env->DeleteLocalRef(jstr);
}
// Append stack trace if one exists.
*** 64,75 ****
// Get the string from the next frame and append it to
// the error message.
jobject frame = Env->GetObjectArrayElement(frames, i);
jstring obj = (jstring)Env->CallObjectMethod(frame, FrameToTStringMethod);
const char* str = Env->GetStringUTFChars(obj, 0);
! result += "\n ";
! result += str;
Env->ReleaseStringUTFChars(obj, str);
Env->DeleteLocalRef(obj);
Env->DeleteLocalRef(frame);
}
}
--- 64,75 ----
// Get the string from the next frame and append it to
// the error message.
jobject frame = Env->GetObjectArrayElement(frames, i);
jstring obj = (jstring)Env->CallObjectMethod(frame, FrameToTStringMethod);
const char* str = Env->GetStringUTFChars(obj, 0);
! result += _T("\n ");
! result += PlatformString(str).toPlatformString();
Env->ReleaseStringUTFChars(obj, str);
Env->DeleteLocalRef(obj);
Env->DeleteLocalRef(frame);
}
}
*** 87,117 ****
return result;
}
#endif //DEBUG
! JavaException::JavaException() : std::exception() {}
! //TODO Fix JavaException for all platforms.
! #ifdef WINDOWS
! JavaException::JavaException(const char* const message) : std::exception(message) {}
! #endif //WINDOWS
! #ifdef MAC
! JavaException::JavaException(const char* const message) {}
! #endif //MAC
!
! #ifdef WINDOWS
! JavaException::JavaException(JNIEnv *Env, const char* const message) : std::exception(message) {
! #endif //WINDOWS
! #ifdef POSIX
! JavaException::JavaException(JNIEnv *Env, const char* const message) {
! #endif //POSIX
FEnv = Env;
FException = Env->ExceptionOccurred();
Env->ExceptionClear();
- FMessage = message;
#ifdef DEBUG
Platform& platform = Platform::GetInstance();
if (platform.GetDebugState() == dsNone) {
--- 87,108 ----
return result;
}
#endif //DEBUG
! JavaException::JavaException() : Exception() {}
! //#ifdef WINDOWS
! JavaException::JavaException(JNIEnv *Env, const TString Message) : Exception(Message) {
! //#endif //WINDOWS
! //#ifdef POSIX
! //JavaException::JavaException(JNIEnv *Env, TString message) {
! //#endif //POSIX
FEnv = Env;
FException = Env->ExceptionOccurred();
Env->ExceptionClear();
#ifdef DEBUG
Platform& platform = Platform::GetInstance();
if (platform.GetDebugState() == dsNone) {
*** 163,188 ****
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Env->ExceptionClear();
return;
}
! std::string lmessage = CreateExceptionMessage(Env, FException, GetCauseMethod,
GetStackTraceMethod, ThrowableToTStringMethod, FrameToTStringMethod);
! FMessage = lmessage.c_str();
}
#endif //DEBUG
}
- const char* JavaException::what() {
- if (FMessage.empty() == true) {
- return std::exception::what();
- }
- else {
- return FMessage.c_str();
- }
- }
-
void JavaException::Rethrow() {
FEnv->Throw(FException);
}
//--------------------------------------------------------------------------------------------------
--- 154,170 ----
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Env->ExceptionClear();
return;
}
! TString lmessage = CreateExceptionMessage(Env, FException, GetCauseMethod,
GetStackTraceMethod, ThrowableToTStringMethod, FrameToTStringMethod);
! SetMessage(lmessage);
}
#endif //DEBUG
}
void JavaException::Rethrow() {
FEnv->Throw(FException);
}
//--------------------------------------------------------------------------------------------------
*** 199,210 ****
FEnv->CallStaticVoidMethodV(FClass, FMethod, args);
va_end(args);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! std::string message = PlatformString(messages.GetMessage(ERROR_INVOKING_METHOD)).toStdString();
! throw JavaException(FEnv, message.c_str());
}
}
JavaStaticMethod::operator jmethodID () {
return FMethod;
--- 181,191 ----
FEnv->CallStaticVoidMethodV(FClass, FMethod, args);
va_end(args);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! throw JavaException(FEnv, messages.GetMessage(ERROR_INVOKING_METHOD));
}
}
JavaStaticMethod::operator jmethodID () {
return FMethod;
*** 224,235 ****
FEnv->CallVoidMethodV(FObj, FMethod, args);
va_end(args);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! std::string message = PlatformString(messages.GetMessage(ERROR_INVOKING_METHOD)).toStdString();
! throw JavaException(FEnv, message.c_str());
}
}
JavaMethod::operator jmethodID () {
return FMethod;
--- 205,215 ----
FEnv->CallVoidMethodV(FObj, FMethod, args);
va_end(args);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! throw JavaException(FEnv, messages.GetMessage(ERROR_INVOKING_METHOD));
}
}
JavaMethod::operator jmethodID () {
return FMethod;
*** 242,276 ****
FClassName = Name;
FClass = FEnv->FindClass(PlatformString(FClassName));
if (FClass == NULL || FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! std::string message = PlatformString(messages.GetMessage(CLASS_NOT_FOUND)).toStdString();
! message = PlatformString::Format(message,
! PlatformString(FClassName).c_str());
! throw JavaException(FEnv, message.c_str());
}
}
JavaClass::~JavaClass() {
FEnv->DeleteLocalRef(FClass);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, "Error");
}
}
JavaStaticMethod JavaClass::GetStaticMethod(TString Name, TString Signature) {
jmethodID method = FEnv->GetStaticMethodID(FClass, PlatformString(Name), PlatformString(Signature));
if (method == NULL || FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! std::string message = PlatformString(messages.GetMessage(METHOD_NOT_FOUND)).toStdString();
! message = PlatformString::Format(message,
! PlatformString(Name).c_str(),
! PlatformString(FClassName).c_str());
! throw JavaException(FEnv, message.c_str());
}
return JavaStaticMethod(FEnv, FClass, method);
}
--- 222,253 ----
FClassName = Name;
FClass = FEnv->FindClass(PlatformString(FClassName));
if (FClass == NULL || FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! TString message = messages.GetMessage(CLASS_NOT_FOUND);
! message = PlatformString::Format(message, FClassName.data());
! throw JavaException(FEnv, message);
}
}
JavaClass::~JavaClass() {
FEnv->DeleteLocalRef(FClass);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, _T("Error"));
}
}
JavaStaticMethod JavaClass::GetStaticMethod(TString Name, TString Signature) {
jmethodID method = FEnv->GetStaticMethodID(FClass, PlatformString(Name), PlatformString(Signature));
if (method == NULL || FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! TString message = messages.GetMessage(METHOD_NOT_FOUND);
! message = PlatformString::Format(message, Name.data(), FClassName.data());
! throw JavaException(FEnv, message);
}
return JavaStaticMethod(FEnv, FClass, method);
}
*** 283,302 ****
void JavaStringArray::Initialize(size_t Size) {
JavaClass jstringClass(FEnv, _T("java/lang/String"));
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! std::string message = PlatformString(messages.GetMessage(CLASS_NOT_FOUND)).toStdString();
! message = PlatformString::Format(message, "String");
! throw JavaException(FEnv, message.c_str());
}
jstring str = PlatformString("").toJString(FEnv);
FData = (jobjectArray)FEnv->NewObjectArray((jsize)Size, jstringClass, str);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, "Error");
}
}
JavaStringArray::JavaStringArray(JNIEnv *Env, size_t Size) {
FEnv = Env;
--- 260,279 ----
void JavaStringArray::Initialize(size_t Size) {
JavaClass jstringClass(FEnv, _T("java/lang/String"));
if (FEnv->ExceptionCheck() == JNI_TRUE) {
Messages& messages = Messages::GetInstance();
! TString message = messages.GetMessage(CLASS_NOT_FOUND);
! message = PlatformString::Format(message, _T("String"));
! throw JavaException(FEnv, message.data());
}
jstring str = PlatformString("").toJString(FEnv);
FData = (jobjectArray)FEnv->NewObjectArray((jsize)Size, jstringClass, str);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, _T("Error"));
}
}
JavaStringArray::JavaStringArray(JNIEnv *Env, size_t Size) {
FEnv = Env;
*** 326,354 ****
void JavaStringArray::SetValue(jsize Index, jstring Item) {
FEnv->SetObjectArrayElement(FData, Index, Item);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, "Error");
}
}
jstring JavaStringArray::GetValue(jsize Index) {
jstring result = (jstring)FEnv->GetObjectArrayElement(FData, Index);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, "Error");
}
return result;
}
unsigned int JavaStringArray::Count() {
unsigned int result = FEnv->GetArrayLength(FData);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, "Error");
}
return result;
}
--- 303,331 ----
void JavaStringArray::SetValue(jsize Index, jstring Item) {
FEnv->SetObjectArrayElement(FData, Index, Item);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, _T("Error"));
}
}
jstring JavaStringArray::GetValue(jsize Index) {
jstring result = (jstring)FEnv->GetObjectArrayElement(FData, Index);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, _T("Error"));
}
return result;
}
unsigned int JavaStringArray::Count() {
unsigned int result = FEnv->GetArrayLength(FData);
if (FEnv->ExceptionCheck() == JNI_TRUE) {
! throw JavaException(FEnv, _T("Error"));
}
return result;
}