java .lang.instrument.Instrumentation.setNativeMethodPrefix метод не работает. Почему? - PullRequest
0 голосов
/ 06 февраля 2020

Мой env: Window10 x64 + jdk1.8.0_221

Агент premain:

public static void premain(String agentArgs, Instrumentation inst) {
     JNITransformer transformer = new JNITransformer();
     inst.addTransformer(transformer);
     inst.setNativeMethodPrefix(transformer, "test");
}

Класс ClassFileTransformer:

@Override
public byte[] transform(ClassLoader loader,
                            String className,
                            Class<?> classBeingRedefined,
                            ProtectionDomain protectionDomain,
                            byte[] classfileBuffer) {
    return classfileBuffer;
}

Файл dll cpp:

JNIEXPORT jstring JNICALL Java_com_xxx_jni_sample_BaseService_test_doService
(JNIEnv* env, jclass obj, jstring prompt) {
    return charTojstring(env, "do service 2");
}

Мой нативный метод: public static native String doService(String str);

Когда я вызываю нативный метод doService в java Я не получаю ожидаемый результат: do service 2

...