00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __ccxx_JavaContext_h
00024 #define __ccxx_JavaContext_h
00025
00026 #include <commonc++/Common.h++>
00027 #include <commonc++/Exception.h++>
00028 #include <commonc++/String.h++>
00029 #include <commonc++/JavaException.h++>
00030
00031 #include <jni.h>
00032 #include <cstdarg>
00033
00034 namespace ccxx {
00035
00036 class JavaVirtualMachine;
00037
00043 struct JavaNativeMethod
00044 {
00046 String signature;
00047
00049 void *function;
00050 };
00051
00069 class COMMONCPPJVM_API JavaContext
00070 {
00071 friend class JavaVirtualMachine;
00072
00073 public:
00074
00080 JavaContext(JNIEnv *env);
00081
00084 ~JavaContext();
00085
00093 static String encodeType(const String &type);
00094
00111 static bool parseSignature(const String &signature, String& method,
00112 String& descriptor, bool &isStatic);
00113
00123 jclass findClass(const String &name) throw(JavaException);
00124
00137 jmethodID findMethod(jclass clazz, const String &signature)
00138 throw(JavaException);
00139
00148 jobject createObject(jclass clazz, jmethodID constructor, ...)
00149 throw(JavaException);
00150
00160 jobject createObjectVA(jclass clazz, jmethodID constructor, va_list args)
00161 throw(JavaException);
00162
00171 void callVoidMethod(jobject object, jmethodID method, ...)
00172 throw(JavaException);
00173
00183 jobject callObjectMethod(jobject object, jmethodID method, ...)
00184 throw(JavaException);
00185
00195 String callStringMethod(jobject object, jmethodID method, ...)
00196 throw(JavaException);
00197
00207 WString callWStringMethod(jobject object, jmethodID method, ...)
00208 throw(JavaException);
00209
00219 jboolean callBooleanMethod(jobject object, jmethodID method, ...)
00220 throw(JavaException);
00221
00231 jbyte callByteMethod(jobject object, jmethodID method, ...)
00232 throw(JavaException);
00233
00243 jchar callCharMethod(jobject object, jmethodID method, ...)
00244 throw(JavaException);
00245
00255 jshort callShortMethod(jobject object, jmethodID method, ...)
00256 throw(JavaException);
00257
00267 jint callIntMethod(jobject object, jmethodID method, ...)
00268 throw(JavaException);
00269
00279 jlong callLongMethod(jobject object, jmethodID method, ...)
00280 throw(JavaException);
00281
00291 jfloat callFloatMethod(jobject object, jmethodID method, ...)
00292 throw(JavaException);
00293
00303 jdouble callDoubleMethod(jobject object, jmethodID method, ...)
00304 throw(JavaException);
00305
00315 void callNonvirtualVoidMethod(jobject object, jclass clazz,
00316 jmethodID method, ...)
00317 throw(JavaException);
00318
00329 jobject callNonvirtualObjectMethod(jobject object, jclass clazz,
00330 jmethodID method, ...)
00331 throw(JavaException);
00332
00343 jboolean callNonvirtualBooleanMethod(jobject object, jclass clazz,
00344 jmethodID method, ...)
00345 throw(JavaException);
00346
00357 jbyte callNonvirtualByteMethod(jobject object, jclass clazz,
00358 jmethodID method, ...)
00359 throw(JavaException);
00360
00371 jchar callNonvirtualCharMethod(jobject object, jclass clazz,
00372 jmethodID method, ...)
00373 throw(JavaException);
00374
00385 jshort callNonvirtualShortMethod(jobject object, jclass clazz,
00386 jmethodID method, ...)
00387 throw(JavaException);
00388
00399 jint callNonvirtualIntMethod(jobject object, jclass clazz,
00400 jmethodID method, ...)
00401 throw(JavaException);
00402
00413 jlong callNonvirtualLongMethod(jobject object, jclass clazz,
00414 jmethodID method, ...)
00415 throw(JavaException);
00416
00427 jfloat callNonvirtualFloatMethod(jobject object, jclass clazz,
00428 jmethodID method, ...)
00429 throw(JavaException);
00430
00441 jdouble callNonvirtualDoubleMethod(jobject object, jclass clazz,
00442 jmethodID method, ...)
00443 throw(JavaException);
00444
00454 void callStaticVoidMethod(jclass clazz, jmethodID method, ...)
00455 throw(JavaException);
00456
00466 jobject callStaticObjectMethod(jclass clazz, jmethodID method, ...)
00467 throw(JavaException);
00468
00478 String callStaticStringMethod(jclass clazz, jmethodID method, ...)
00479 throw(JavaException);
00480
00490 WString callStaticWStringMethod(jclass clazz, jmethodID method, ...)
00491 throw(JavaException);
00492
00502 jboolean callStaticBooleanMethod(jclass clazz, jmethodID method, ...)
00503 throw(JavaException);
00504
00514 jbyte callStaticByteMethod(jclass clazz, jmethodID method, ...)
00515 throw(JavaException);
00516
00526 jchar callStaticCharMethod(jclass clazz, jmethodID method, ...)
00527 throw(JavaException);
00528
00538 jshort callStaticShortMethod(jclass clazz, jmethodID method, ...)
00539 throw(JavaException);
00540
00550 jint callStaticIntMethod(jclass clazz, jmethodID method, ...)
00551 throw(JavaException);
00552
00562 jlong callStaticLongMethod(jclass clazz, jmethodID method, ...)
00563 throw(JavaException);
00564
00574 jfloat callStaticFloatMethod(jclass clazz, jmethodID method, ...)
00575 throw(JavaException);
00576
00586 jdouble callStaticDoubleMethod(jclass clazz, jmethodID method, ...)
00587 throw(JavaException);
00588
00597 bool checkException(bool verbose = false);
00598
00603 void clearException() throw();
00604
00611 jthrowable getException() throw();
00612
00620 bool throwException(jclass exception, const String &message);
00621
00632 jfieldID findField(jclass clazz, const String &signature)
00633 throw(JavaException);
00634
00643 jobject getObjectField(jobject object, jfieldID field) throw(JavaException);
00644
00653 jboolean getBooleanField(jobject object, jfieldID field)
00654 throw(JavaException);
00655
00664 jbyte getByteField(jobject object, jfieldID field) throw(JavaException);
00665
00674 jchar getCharField(jobject object, jfieldID field) throw(JavaException);
00675
00684 jshort getShortField(jobject object, jfieldID field) throw(JavaException);
00685
00694 jint getIntField(jobject object, jfieldID field) throw(JavaException);
00695
00704 jlong getLongField(jobject object, jfieldID field) throw(JavaException);
00705
00714 jfloat getFloatField(jobject object, jfieldID field) throw(JavaException);
00715
00724 jdouble getDoubleField(jobject object, jfieldID field) throw(JavaException);
00725
00734 String getStringField(jobject object, jfieldID field) throw(JavaException);
00735
00744 WString getWStringField(jobject object, jfieldID field) throw(JavaException);
00745
00754 jobject getStaticObjectField(jclass clazz, jfieldID field)
00755 throw(JavaException);
00756
00765 jboolean getStaticBooleanField(jclass clazz, jfieldID field)
00766 throw(JavaException);
00767
00776 jbyte getStaticByteField(jclass clazz, jfieldID field) throw(JavaException);
00777
00786 jchar getStaticCharField(jclass clazz, jfieldID field) throw(JavaException);
00787
00796 jshort getStaticShortField(jclass clazz, jfieldID field)
00797 throw(JavaException);
00798
00807 jint getStaticIntField(jclass clazz, jfieldID field) throw(JavaException);
00808
00817 jlong getStaticLongField(jclass clazz, jfieldID field) throw(JavaException);
00818
00827 jfloat getStaticFloatField(jclass clazz, jfieldID field)
00828 throw(JavaException);
00829
00838 jdouble getStaticDoubleField(jclass clazz, jfieldID field)
00839 throw(JavaException);
00840
00849 String getStaticStringField(jclass clazz, jfieldID field)
00850 throw(JavaException);
00851
00860 WString getStaticWStringField(jclass clazz, jfieldID field)
00861 throw(JavaException);
00862
00871 void setObjectField(jobject object, jfieldID field, jobject value)
00872 throw(JavaException);
00873
00882 void setBooleanField(jobject object, jfieldID field, jboolean value)
00883 throw(JavaException);
00884
00893 void setByteField(jobject object, jfieldID field, jbyte value)
00894 throw(JavaException);
00895
00904 void setCharField(jobject object, jfieldID field, jchar value)
00905 throw(JavaException);
00906
00915 void setShortField(jobject object, jfieldID field, jshort value)
00916 throw(JavaException);
00917
00926 void setIntField(jobject object, jfieldID field, jint value)
00927 throw(JavaException);
00928
00937 void setLongField(jobject object, jfieldID field, jlong value)
00938 throw(JavaException);
00939
00948 void setFloatField(jobject object, jfieldID field, jfloat value)
00949 throw(JavaException);
00950
00959 void setDoubleField(jobject object, jfieldID field, jdouble value)
00960 throw(JavaException);
00961
00970 void setStringField(jobject object, jfieldID field, const String &value)
00971 throw(JavaException);
00972
00981 void setWStringField(jobject object, jfieldID field, const WString &value)
00982 throw(JavaException);
00983
00992 void setStaticObjectField(jclass clazz, jfieldID field, jobject value)
00993 throw(JavaException);
00994
01003 void setStaticBooleanField(jclass clazz, jfieldID field, jboolean value)
01004 throw(JavaException);
01005
01014 void setStaticByteField(jclass clazz, jfieldID field, jbyte value)
01015 throw(JavaException);
01016
01025 void setStaticCharField(jclass clazz, jfieldID field, jchar value)
01026 throw(JavaException);
01027
01036 void setStaticShortField(jclass clazz, jfieldID field, jshort value)
01037 throw(JavaException);
01038
01047 void setStaticIntField(jclass clazz, jfieldID field, jint value)
01048 throw(JavaException);
01049
01058 void setStaticLongField(jclass clazz, jfieldID field, jlong value)
01059 throw(JavaException);
01060
01069 void setStaticFloatField(jclass clazz, jfieldID field, jfloat value)
01070 throw(JavaException);
01071
01080 void setStaticDoubleField(jclass clazz, jfieldID field, jdouble value)
01081 throw(JavaException);
01082
01090 jbyteArray createByteArray(uint_t length)
01091 throw(JavaException);
01092
01101 void setObjectArrayElement(jobjectArray array, uint_t index, jobject value)
01102 throw(JavaException);
01103
01112 jobject getObjectArrayElement(jobjectArray array, uint_t index)
01113 throw(JavaException);
01114
01122 uint_t getArrayLength(jarray array) throw(JavaException);
01123
01133 jobject createDirectByteBuffer(byte_t *buf, size_t size)
01134 throw(JavaException);
01135
01146 void *getDirectBufferRegion(jobject buf, uint64_t &size);
01147
01155 jobject createLocalRef(jobject object) throw(JavaException);
01156
01162 void deleteLocalRef(jobject ref);
01163
01170 void ensureLocalCapacity(size_t capacity) throw(JavaException);
01171
01179 jobject createGlobalRef(jobject object) throw(JavaException);
01180
01186 void deleteGlobalRef(jobject ref);
01187
01195 String decodeString(jstring str) throw(JavaException);
01196
01204 WString decodeWString(jstring str) throw(JavaException);
01205
01213 jstring encodeString(const String &str) throw(JavaException);
01214
01222 jstring encodeWString(const WString &str) throw(JavaException);
01223
01230 size_t getStringLength(jstring str);
01231
01246 void *getArrayData(jarray array, size_t &length, bool *isCopy = NULL)
01247 throw(JavaException);
01248
01256 void releaseArrayData(jarray array, void *data);
01257
01266 jbyteArray createByteArray(const byte_t *data, size_t length)
01267 throw(JavaException);
01268
01279 jarray createObjectArray(jclass type, size_t length,
01280 jobject initialValue = NULL)
01281 throw(JavaException);
01282
01291 bool isSameObject(jobject object1, jobject object2);
01292
01302 bool isInstanceOf(jobject object, jclass clazz);
01303
01312 bool isAssignableFrom(jclass clazz1, jclass clazz2);
01313
01320 jclass getClassForObject(jobject object);
01321
01329 jclass getSuperclass(jclass clazz);
01330
01338 void enterMonitor(jobject object) throw(JavaException);
01339
01346 void exitMonitor(jobject object) throw(JavaException);
01347
01356 void registerNativeMethods(jclass clazz, const JavaNativeMethod methods[])
01357 throw(JavaException);
01358
01364 void unregisterNativeMethods(jclass clazz);
01365
01372 void pushLocalFrame(uint_t capacity = 8) throw(JavaException);
01373
01378 void popLocalFrame();
01379
01382 inline bool isVerbose() const throw()
01383 { return(_verbose); }
01384
01385 private:
01386
01387 void setVerbose(bool verbose) throw()
01388 { _verbose = verbose; }
01389
01390 void setJVM(JavaVirtualMachine *jvm) throw()
01391 { _jvm = jvm; }
01392
01393 JNIEnv *_env;
01394 JavaVirtualMachine *_jvm;
01395 bool _verbose;
01396 };
01397
01398 };
01399
01400 #endif // __ccxx_JavaContext_hxx
01401
01402