|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.kapott.hbci.callback.AbstractHBCICallback | +--org.kapott.hbci.callback.HBCICallbackNative
Callback-Klasse für native-Applikationen, die HBCI4Java durch Aufrufe des JNI benutzen. Diese Klasse wird in Java-Anwendungen selbst nicht benötigt, sondern stellt nur eine Schnittstelle dar, um die Callbacks via JNI zu realisieren.
Diese Klasse überschreibt die drei Methoden log
, callback
und status
. In dieser Klasse werden die jeweiligen Methoden-Aufrufe
nicht direkt behandelt, sondern es wird jeweils eine native Methode mit
der gleichen Signatur aufgerufen, nur dass sich der Methodenname durch ein
vorangestelltes Prefix "native
" unterscheidet.
Eine Anwendung muss vor dem Initialisieren des HBCI-Kernels diese nativen Methoden via JNI registrieren. Folgender Programmcode kann als Vorlage für die Verwendung von HBCI4Java-Callbacks aus einer C++-Anwendung heraus dienen:
#include "jni.h" void myOwnLog(JNIEnv *env,jobject obj,jstring jmsg,jint level,jobject date,jobject trace) { const char *msg=env->GetStringUTFChars(jmsg,NULL); printf("log: %s\n",msg); env->ReleaseStringUTFChars(jmsg,msg); } void myOwnCallback(JNIEnv *env,jobject obj,jobject passport,jint reason,jstring msg,jint datatype,jobject retData) { switch ((int)reason) { // ... } } void myOwnStatus(JNIEnv *env,jobject obj,jobject passport,jint statusTag,jarray o) { printf("status-callback\n"); } int main(int argc,char **argv) { JavaVM *jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption options[1]; JNINativeMethod methods[3]; // initialize JVM options[0].optionString="-Djava.class.path=/home/kleiner/projects/hbci2/classes"; vm_args.version=JNI_VERSION_1_4; vm_args.options=options; vm_args.nOptions=1; printf("create: %i\n",JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args)); // build array for registering native callback-methods methods[0].name="nativeLog"; methods[0].signature="(Ljava/lang/String;ILjava/util/Date;Ljava/lang/StackTraceElement;)V"; methods[0].fnPtr=myOwnLog; methods[1].name="nativeCallback"; methods[1].signature="(Lorg/kapott/hbci/passport/HBCIPassport;ILjava/lang/String;ILjava/lang/StringBuffer;)V"; methods[1].fnPtr=myOwnCallback; methods[2].name="nativeStatus"; methods[2].signature="(Lorg/kapott/hbci/passport/HBCIPassport;I[Ljava/lang/Object;)V"; methods[2].fnPtr=myOwnStatus; // get class HBCICallbackNative jclass callbacknative=env->FindClass("org/kapott/hbci/callback/HBCICallbackNative"); printf("callbacknative: %p\n",callbacknative); // register native methods printf("register: %i\n",env->RegisterNatives(callbacknative,methods,3)); // get constructor for HBCICallbackNative jmethodID callbacknative_init=env->GetMethodID(callbacknative,"","()V"); printf("callbacknative_init: %p\n",callbacknative_init); // create new HBCICallbackNative-object jobject callback=env->NewObject(callbacknative,callbacknative_init); printf("callback: %p\n",callback); // get class HBCIUtils jclass utils=env->FindClass("org/kapott/hbci/manager/HBCIUtils"); printf("utils: %p\n",utils); // get method HBCIUtils.setParam() jmethodID utils_setparam=env->GetStaticMethodID(utils,"setParam","(Ljava/lang/String;Ljava/lang/String;)V"); printf("utils_setparam: %p\n",utils_setparam); // set loglevel to DEBUG jstring name=env->NewStringUTF("log.loglevel.default"); jstring value=env->NewStringUTF("4"); env->CallStaticVoidMethod(utils,utils_setparam,name,value); // get method HBCIUtils.init() jmethodID utils_init=env->GetStaticMethodID(utils,"init","(Ljava/lang/ClassLoader;Ljava/lang/String;Lorg/kapott/hbci/callback/HBCICallback;)V"); printf("utils_init: %p\n",utils_init); // call HBCIUtils.init() env->CallStaticVoidMethod(utils,utils_init,NULL,NULL,callback); // ... // do HBCI stuff here // ... jvm->DestroyJavaVM(); }
Field Summary |
Methods inherited from interface org.kapott.hbci.callback.HBCICallback |
callback, log, status |
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |