⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stafjavaservicehelper.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            default:            {                connection->writeUInt(kSTAFInvalidValue);                connection->writeString(STAFString("Invalid Java service ") +                                        "request type: " + STAFString(reqType));                break;            }        }    }    catch (STAFException &se)    {        se.trace("JSTAFSH.HandleRequest()");    }    catch (...)    {        STAFTrace::trace(            kSTAFTraceError,            "Caught unknown exception in JSTAFSH.HandleRequest()");    }    return 0;}void HandleServiceConstruct(STAFConnectionPtr &connection){    STAFString serviceName   = connection->readString();    STAFString execInfo      = connection->readString();    STAFString writeLocation = connection->readString();    STAFServiceType_t serviceType =        static_cast<STAFServiceType_t>(connection->readUInt());    // Attach the current thread    JNIEnv *env = 0;    jint attachRC = gJVM->AttachCurrentThread(reinterpret_cast<void **>(&env),                                              NULL);    if (attachRC != 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error attaching Java VM thread, RC: " + STAFString(attachRC));        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error attaching Java VM thread, RC: " +                                STAFString(attachRC) + " in constructService "                                "for " + serviceName);        return;    }    // Call JVM to load the class    jclass helperClass = env->GetObjectClass(gHelperObj);    jmethodID loadService = env->GetMethodID(helperClass, sLoadServiceMethod,                                             sLoadServiceMethodSig);    if (loadService == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error getting STAFServiceHelper.loadService() method ID");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error getting "                                "STAFServiceHelper.loadService() method ID "                                "in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    // Convert the execInfo string to UTF-8 for Java    execInfo      += kUTF8_NULL;    serviceName   += kUTF8_NULL;    writeLocation += kUTF8_NULL;    jstring javaExecInfo      = env->NewStringUTF(execInfo.buffer());    if (javaExecInfo == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error converting execInfo string to UTF-8");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error converting execInfo string to UTF-8 "                                "in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    jstring javaServiceName   = env->NewStringUTF(serviceName.buffer());    if (javaServiceName == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error converting service name string to UTF-8");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error converting service name to UTF-8 "                                "in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    jstring javaWriteLocation = env->NewStringUTF(writeLocation.buffer());    jint    javaServiceType   = serviceType;    if (javaWriteLocation == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error converting writeLocation string to UTF-8");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error converting writeLocation to UTF-8 "                                "in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    // Call the loadService() method        jobject javaResult = env->CallObjectMethod(gHelperObj, loadService,                                               javaServiceName, javaExecInfo,                                               javaWriteLocation,                                               // XXX: Pass here?                                               javaServiceType);    if (javaResult == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error calling the loadService method");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error calling the loadService method in "                                "constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    // Get the field IDs of the STAFResult class    jclass resultClass = env->FindClass(sSTAFResultClass);    if (resultClass == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error finding Java class " + *sSTAFResultClassStringPtr);        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error finding Java class " +                                *sSTAFResultClassStringPtr +                                " in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    jfieldID resultRCID = env->GetFieldID(resultClass, sSTAFResultRCField,                                          sJavaIntFieldType);    if (resultRCID == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error getting rc field of Java class " +            *sSTAFResultClassStringPtr);        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error getting rc field of Java class " +                                *sSTAFResultClassStringPtr +                                " in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    jfieldID resultStringID = env->GetFieldID(resultClass,                                              sSTAFResultResultField,                                              sJavaStringFieldType);    if (resultStringID == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error getting result field of Java class " +            *sSTAFResultClassStringPtr);        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error getting result field of Java class " +                                *sSTAFResultClassStringPtr +                                " in constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    // Get the return code and result string from the STAFResult object    jint rc = env->GetIntField(javaResult, resultRCID);    jstring javaResultString = (jstring)env->GetObjectField(javaResult,                                                            resultStringID);    const char *utfResultString =               env->GetStringUTFChars(javaResultString, 0);    if (utfResultString == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error constructing service " + serviceName +            ": Error getting UTF-8 result string");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error getting UTF-8 result string in "                                "constructService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }    STAFString resultString(utfResultString,                            env->GetStringUTFLength(javaResultString),                            STAFString::kUTF8);    env->ReleaseStringUTFChars(javaResultString, utfResultString);    connection->writeUInt(rc);    connection->writeString(resultString);    // Detach the current thread    gJVM->DetachCurrentThread();}void HandleServiceInit(STAFConnectionPtr &connection){    STAFString serviceName = connection->readString();    STAFString parms = connection->readString();    STAFString writeLocation = connection->readString();    // Attach the current thread    JNIEnv *env = 0;    jint attachRC = gJVM->AttachCurrentThread(reinterpret_cast<void **>(&env),                                              NULL);    if (attachRC != 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error initializing service " + serviceName +            ": Error attaching Java VM thread, RC: " + STAFString(attachRC));        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error attaching Java VM thread, RC: " +                                STAFString(attachRC) + " in initService "                                "for " + serviceName);        return;    }    // Call JVM to load the class    jclass helperClass = env->GetObjectClass(gHelperObj);    jmethodID initService = env->GetMethodID(helperClass, sInitServiceMethod,                                             sInitServiceMethodSig);    if (initService == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error initializing service " + serviceName +            ": Error getting STAFServiceHelper.initService() method ID");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error getting "                                "STAFServiceHelper.initService() method ID");        gJVM->DetachCurrentThread();        return;    }    // Convert the service name, parms, and writeLocation strings to UTF-8    // for Java    serviceName += kUTF8_NULL;    parms = parms.replace(kUTF8_NULL, kUTF8_NULL2);    parms += kUTF8_NULL;    writeLocation += kUTF8_NULL;    jstring javaServiceName = env->NewStringUTF(serviceName.buffer());    if (javaServiceName == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error initializing service " + serviceName +            ": Error converting service name to UTF-8");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error converting service name " +                                serviceName + " to UTF-8 in initService");        gJVM->DetachCurrentThread();        return;    }    jstring javaParms = env->NewStringUTF(parms.buffer());    if (javaParms == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error initializing service " + serviceName +            ": Error converting Java parameters to UTF-8");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error converting Java parameters for " +                                serviceName + " to UTF-8 in initService");        gJVM->DetachCurrentThread();        return;    }    jstring javaWriteLocation = env->NewStringUTF(writeLocation.buffer());    if (javaWriteLocation == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error initializing service " + serviceName +            ": Error converting writeLocation string to UTF-8");        env->ExceptionDescribe();        env->ExceptionClear();        connection->writeUInt(kSTAFJavaError);        connection->writeString("Error converting writeLocation to UTF-8 "                                "in initService for " + serviceName);        gJVM->DetachCurrentThread();        return;    }        // Load and construct the ServiceInit class    jclass serviceInitClass = env->FindClass(sServiceInitClass);    if (serviceInitClass == 0)    {        STAFTrace::trace(            kSTAFTraceError, "Error initializing service " + serviceName +             ": Error finding Java class " + *sServiceInitClassStringPtr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -