in src/jni/jni.cpp [972:1066]
jobject getSerializedCasData (JNIEnv* jeEnv, jobject joJTaf, jint jiWhichData, uima::internal::SerializedCAS & crSerializedCAS) {
jobject joResult = NULL;
try {
UIMA_TPRINT("getSerializedDataJNI() entered");
uima::JNIInstance* pInstance = JNIUtils::getCppInstance(jeEnv, joJTaf);
assert( EXISTS(pInstance) );
//////uima::internal::SerializedCAS const & crSerializedCAS = pInstance->getSerializedCAS();
{
// the C++ objects created for TOPTYPE and DOCUMENT are destroyed after the switch
// but the created Java object inside is still alive
switch (jiWhichData) {
case CONST_PREFIX( TYPE_INH ):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getTypeInheritanceTable());
break;
case CONST_PREFIX(FEATURE_DEF):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getFeatureDefinitionTable());
break;
case CONST_PREFIX(FEATURE_OFFSET):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getFeatureOffsetTable());
break;
case CONST_PREFIX(TYPE_SYMBOLS):
joResult = JNIUtils::createStringArray(jeEnv, crSerializedCAS.getTypeSymbolTable());
break;
case CONST_PREFIX(FEATURE_SYMBOLS):
joResult = JNIUtils::createStringArray(jeEnv, crSerializedCAS.getFeatureSymbolTable());
break;
case CONST_PREFIX( TYPE_PRIORITIES):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getTypePriorityTable() );
break;
case CONST_PREFIX(TOPTYPE): {
assert( sizeof(uima::lowlevel::TyFSType) == sizeof(jint) );
uima::lowlevel::TyFSType tyTop = pInstance->getCASImpl().getHeap().getTypeSystem().getTopType();
assert(pInstance->getCASImpl().getHeap().getTypeSystem().isValidType(tyTop));
JavaIntegerObject javaInt(jeEnv, (int) tyTop );
joResult = javaInt.getJObject();
}
break;
case CONST_PREFIX(FSHEAP):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getFSHeapArray());
break;
case CONST_PREFIX(BYTEHEAP):
joResult = JNIUtils::createByteArray(jeEnv, crSerializedCAS.getByteHeapArray());
break;
case CONST_PREFIX(SHORTHEAP):
joResult = JNIUtils::createShortArray(jeEnv, crSerializedCAS.getShortHeapArray());
break;
case CONST_PREFIX(LONGHEAP):
joResult = JNIUtils::createLongArray(jeEnv, crSerializedCAS.getLongHeapArray());
break;
case CONST_PREFIX(STRINGSYMBOL):
joResult = JNIUtils::createStringArray(jeEnv, crSerializedCAS.getStringSymbolTable());
break;
case CONST_PREFIX(DOCUMENT): {
// uima::UnicodeStringRef ustrp = pInstance->getCAS()->getDocumentText();
// UIMA_TPRINT("Doc text: " << ustrp);
// JavaString javaStr(jeEnv, ustrp);
// joResult = javaStr.getJObject();
break;
}
case CONST_PREFIX(INDEXEDFSS):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getIndexedFSs());
break;
case CONST_PREFIX(INDEXID):
joResult = JNIUtils::createStringArray(jeEnv, crSerializedCAS.getIndexIDTable() );
break;
case CONST_PREFIX(INDEXKIND):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getIndexKindTable() );
break;
case CONST_PREFIX(COMPARATORDEF):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getComparatorDefinitionTable() );
break;
case CONST_PREFIX(COMPARATORSTART):
joResult = JNIUtils::createIntArray(jeEnv, crSerializedCAS.getComparatorStartTable() );
break;
default:
assert(false);
}
}
UIMA_TPRINT("getSerializedDataJNI() finished");
} catch (uima::Exception & rException) {
UIMA_TPRINT("Exception: " << rException.asString() );
JNIUtils::throwNewInternalException(jeEnv, rException);
return NULL;
} catch (...) {
UIMA_TPRINT("Unknown Exception" );
CHECK_FOR_JNI_EXCEPTION_WITH_RETURN_VALUE(jeEnv, NULL);
uima::ErrorInfo errInfo(UIMA_MSG_ID_EXC_UNEXPECTED_ERROR, UIMA_ERR_ENGINE_UNEXPECTED_EXCEPTION, uima::ErrorInfo::unrecoverable);
JNIUtils::throwNewInternalException(jeEnv, errInfo);
return NULL;
}
return joResult;
}