in language-extensions/java/src/JavaSession.cpp [357:412]
void JavaSession::InitUserClassObject()
{
jclass jUserClass = m_env->FindClass(m_mainClassName.c_str());
if (jUserClass == nullptr)
{
JniHelper::ThrowOnJavaException(m_env, "Failed to find class " + m_mainClassName);
throw runtime_error("Failed to find class " + m_mainClassName);
}
jclass jBaseClass = m_env->FindClass(x_javaSdkBaseExecutorClass.c_str());
if (jBaseClass == nullptr)
{
JniHelper::ThrowOnJavaException(m_env, "Failed to find class " + x_javaSdkBaseExecutorClass);
throw runtime_error("Failed to find class " + x_javaSdkBaseExecutorClass);
}
// Verify that the user class inhierts the SDK base class
//
if (JNI_FALSE == m_env->IsAssignableFrom(jUserClass, jBaseClass))
{
throw runtime_error(
"Class " + m_mainClassName + " is not a subclass of " +
x_javaSdkBaseExecutorClass);
}
// Create the object and call the default constructor
//
jmethodID methodId = m_env->GetMethodID(jUserClass, "<init>", "()V");
if (methodId == nullptr)
{
JniHelper::ThrowOnJavaException(m_env, "Failed to find default constructor for class " + m_mainClassName);
throw runtime_error("Failed to find default constructor for class " + m_mainClassName);
}
jobject jUserObj = m_env->NewObject(jUserClass, methodId);
if (jUserObj == nullptr)
{
JniHelper::ThrowOnJavaException(m_env, "Failed to create object for class " + m_mainClassName);
throw runtime_error("Failed to create object for class " + m_mainClassName);
}
// Create global references
//
m_userClass = static_cast<jclass>(m_env->NewGlobalRef(jUserClass));
if (m_userClass == nullptr)
{
throw runtime_error("Failed to create global reference for class " + m_mainClassName);
}
m_userObject = m_env->NewGlobalRef(jUserObj);
if (m_userObject == nullptr)
{
throw runtime_error("Failed to create global reference on object ");
}
}