Kaydet (Commit) f9f3513d authored tarafından Ocke Janssen's avatar Ocke Janssen

#90553# convert classname in jni conform way

üst ef5ff4dd
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: Class.cxx,v $ * $RCSfile: Class.cxx,v $
* *
* $Revision: 1.6 $ * $Revision: 1.7 $
* *
* last change: $Author: kr $ $Date: 2001-08-06 13:28:47 $ * last change: $Author: oj $ $Date: 2001-08-14 07:21:03 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -104,28 +104,12 @@ java_lang_Class * java_lang_Class::forName( const ::rtl::OUString& _par0 ) ...@@ -104,28 +104,12 @@ java_lang_Class * java_lang_Class::forName( const ::rtl::OUString& _par0 )
{ {
jobject out(NULL); jobject out(NULL);
SDBThreadAttach t; SDBThreadAttach t;
if( t.pEnv ){ if( t.pEnv )
jvalue args[1]; {
// Parameter konvertieren ::rtl::OString sClassName = ::rtl::OUStringToOString(_par0, RTL_TEXTENCODING_ASCII_US);
args[0].l = convertwchar_tToJavaString(t.pEnv,_par0); sClassName = sClassName.replace('.','/');
// temporaere Variable initialisieren out = t.pEnv->FindClass(sClassName);
char * cSignature = "(Ljava/lang/String;)Ljava/lang/Class;"; ThrowSQLException(t.pEnv,0);
char * cMethodName = "forName";
// Java-Call absetzen
jmethodID mID = t.pEnv->GetStaticMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!");
if( mID ){
out = t.pEnv->CallStaticObjectMethod( getMyClass(), mID, args[0].l );
if(!out)
{
t.pEnv->ExceptionClear();
out = t.pEnv->FindClass(::rtl::OUStringToOString(_par0, RTL_TEXTENCODING_ASCII_US));
}
ThrowSQLException(t.pEnv,0);
// und aufraeumen
} //mID
t.pEnv->DeleteLocalRef((jstring)args[0].l);
} //t.pEnv } //t.pEnv
// ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!! // ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!!
return out==0 ? NULL : new java_lang_Class( t.pEnv, out ); return out==0 ? NULL : new java_lang_Class( t.pEnv, out );
...@@ -136,15 +120,16 @@ sal_Bool java_lang_Class::isAssignableFrom( java_lang_Class * _par0 ) ...@@ -136,15 +120,16 @@ sal_Bool java_lang_Class::isAssignableFrom( java_lang_Class * _par0 )
jboolean out; jboolean out;
SDBThreadAttach t; SDBThreadAttach t;
if( t.pEnv ){ if( t.pEnv ){
jvalue args[1];
// Parameter konvertieren
args[0].l = _par0 != NULL ? ((java_lang_Object *)_par0)->getJavaObject() : NULL;
// temporaere Variable initialisieren // temporaere Variable initialisieren
char * cSignature = "(Ljava/lang/Class;)Z"; char * cSignature = "(Ljava/lang/Class;)Z";
char * cMethodName = "isAssignableFrom"; char * cMethodName = "isAssignableFrom";
// Java-Call absetzen // Java-Call absetzen
jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!"); jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!");
if( mID ){ if( mID ){
jvalue args[1];
// Parameter konvertieren
args[0].l = _par0 != NULL ? ((java_lang_Object *)_par0)->getJavaObject() : NULL;
out = t.pEnv->CallBooleanMethod( object, mID, args[0].l ); out = t.pEnv->CallBooleanMethod( object, mID, args[0].l );
ThrowSQLException(t.pEnv,0); ThrowSQLException(t.pEnv,0);
// und aufraeumen // und aufraeumen
...@@ -206,7 +191,8 @@ jobject java_lang_Class::newInstanceObject() ...@@ -206,7 +191,8 @@ jobject java_lang_Class::newInstanceObject()
if( mID ){ if( mID ){
out = (jstring)t.pEnv->CallObjectMethod( object, mID); out = (jstring)t.pEnv->CallObjectMethod( object, mID);
ThrowSQLException(t.pEnv,0); ThrowSQLException(t.pEnv,0);
aStr = JavaString2String(t.pEnv, (jstring)out ); if(out)
aStr = JavaString2String(t.pEnv, (jstring)out );
} //mID } //mID
} //t.pEnv } //t.pEnv
// ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!! // ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!!
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: DatabaseMetaData.cxx,v $ * $RCSfile: DatabaseMetaData.cxx,v $
* *
* $Revision: 1.9 $ * $Revision: 1.10 $
* *
* last change: $Author: oj $ $Date: 2001-07-04 10:54:30 $ * last change: $Author: oj $ $Date: 2001-08-14 07:21:03 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -236,7 +236,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getColumnPrivileges( ...@@ -236,7 +236,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getColumnPrivileges(
args[3].l = convertwchar_tToJavaString(t.pEnv,columnNamePattern); args[3].l = convertwchar_tToJavaString(t.pEnv,columnNamePattern);
out = t.pEnv->CallObjectMethod( object, mID, args[0].l, args[1].l,args[2].l,args[3].l); out = t.pEnv->CallObjectMethod( object, mID, args[0].l, args[1].l,args[2].l,args[3].l);
ThrowSQLException(t.pEnv,*this);
if(catalog.hasValue()) if(catalog.hasValue())
t.pEnv->DeleteLocalRef((jstring)args[0].l); t.pEnv->DeleteLocalRef((jstring)args[0].l);
if(args[1].l) if(args[1].l)
...@@ -245,6 +245,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getColumnPrivileges( ...@@ -245,6 +245,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getColumnPrivileges(
t.pEnv->DeleteLocalRef((jstring)args[2].l); t.pEnv->DeleteLocalRef((jstring)args[2].l);
if(columnNamePattern.getLength()) if(columnNamePattern.getLength())
t.pEnv->DeleteLocalRef((jstring)args[3].l); t.pEnv->DeleteLocalRef((jstring)args[3].l);
ThrowSQLException(t.pEnv,*this);
} //mID } //mID
} //t.pEnv } //t.pEnv
// ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!! // ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!!
...@@ -300,6 +301,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables( ...@@ -300,6 +301,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables(
char * cMethodName = "getTables"; char * cMethodName = "getTables";
// Java-Call absetzen // Java-Call absetzen
jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!"); jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!");
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
if( mID ) if( mID )
{ {
jvalue args[4]; jvalue args[4];
...@@ -307,12 +309,14 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables( ...@@ -307,12 +309,14 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables(
if(len) if(len)
{ {
jobjectArray pObjArray = t.pEnv->NewObjectArray((jsize) len, java_lang_String::getMyClass(), 0); jobjectArray pObjArray = t.pEnv->NewObjectArray((jsize) len, java_lang_String::getMyClass(), 0);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
const ::rtl::OUString* pBegin = types.getConstArray(); const ::rtl::OUString* pBegin = types.getConstArray();
for(sal_Int32 i=0;i<len;i++,++pBegin) for(sal_Int32 i=0;i<len;i++,++pBegin)
{ {
jstring aT = convertwchar_tToJavaString(t.pEnv,*pBegin); jstring aT = convertwchar_tToJavaString(t.pEnv,*pBegin);
//jstring aT = t.pEnv->NewStringUTF(_par3.GetToken(i)); //jstring aT = t.pEnv->NewStringUTF(_par3.GetToken(i));
t.pEnv->SetObjectArrayElement(pObjArray,(jsize)i,aT); t.pEnv->SetObjectArrayElement(pObjArray,(jsize)i,aT);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
} }
args[3].l = pObjArray; args[3].l = pObjArray;
}else }else
...@@ -322,14 +326,25 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables( ...@@ -322,14 +326,25 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables(
args[1].l = schemaPattern.toChar() == '%' ? NULL : convertwchar_tToJavaString(t.pEnv,schemaPattern); args[1].l = schemaPattern.toChar() == '%' ? NULL : convertwchar_tToJavaString(t.pEnv,schemaPattern);
args[2].l = convertwchar_tToJavaString(t.pEnv,tableNamePattern); args[2].l = convertwchar_tToJavaString(t.pEnv,tableNamePattern);
out = t.pEnv->CallObjectMethod( object, mID, args[0].l, args[1].l,args[2].l,args[3].l); out = t.pEnv->CallObjectMethod( object, mID, args[0].l, args[1].l,args[2].l,args[3].l);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
if(catalog.hasValue()) if(catalog.hasValue())
{
t.pEnv->DeleteLocalRef((jstring)args[0].l); t.pEnv->DeleteLocalRef((jstring)args[0].l);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
}
if(args[1].l) if(args[1].l)
{
t.pEnv->DeleteLocalRef((jstring)args[1].l); t.pEnv->DeleteLocalRef((jstring)args[1].l);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
}
if(tableNamePattern.getLength()) if(tableNamePattern.getLength())
{
t.pEnv->DeleteLocalRef((jstring)args[2].l); t.pEnv->DeleteLocalRef((jstring)args[2].l);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
}
//for(INT16 i=0;i<len;i++) //for(INT16 i=0;i<len;i++)
t.pEnv->DeleteLocalRef((jobjectArray)args[3].l); t.pEnv->DeleteLocalRef((jobjectArray)args[3].l);
OSL_ENSURE(!t.pEnv->ExceptionOccurred(),"Exception occured!");
ThrowSQLException(t.pEnv,*this); ThrowSQLException(t.pEnv,*this);
} //mID } //mID
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: JDriver.cxx,v $ * $RCSfile: JDriver.cxx,v $
* *
* $Revision: 1.17 $ * $Revision: 1.18 $
* *
* last change: $Author: oj $ $Date: 2001-08-03 14:19:08 $ * last change: $Author: oj $ $Date: 2001-08-14 07:21:03 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -206,6 +206,15 @@ Reference< XConnection > SAL_CALL java_sql_Driver::connect( const ::rtl::OUStrin ...@@ -206,6 +206,15 @@ Reference< XConnection > SAL_CALL java_sql_Driver::connect( const ::rtl::OUStrin
} }
} }
} }
catch(SQLException& e)
{
if( object )
{
t.pEnv->DeleteGlobalRef( object );
object = NULL;
}
throw SQLException(::rtl::OUString::createFromAscii("The specified driver could not be loaded!"),*this,::rtl::OUString(),1000,makeAny(e));
}
catch(Exception&) catch(Exception&)
{ {
if( object ) if( object )
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: Object.cxx,v $ * $RCSfile: Object.cxx,v $
* *
* $Revision: 1.8 $ * $Revision: 1.9 $
* *
* last change: $Author: oj $ $Date: 2001-07-06 08:37:18 $ * last change: $Author: oj $ $Date: 2001-08-14 07:21:03 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -194,15 +194,25 @@ int SDB_JRE_InitJava(const Reference<XMultiServiceFactory >& _rxFactory) ...@@ -194,15 +194,25 @@ int SDB_JRE_InitJava(const Reference<XMultiServiceFactory >& _rxFactory)
SDBThreadAttach::SDBThreadAttach() : bDetach(sal_False), pEnv(NULL) SDBThreadAttach::SDBThreadAttach() : bDetach(sal_False), pEnv(NULL)
{ {
attachThread(pEnv); attachThread(pEnv);
if(pEnv && pEnv->ExceptionOccurred())
pEnv->ExceptionClear();
} }
SDBThreadAttach::SDBThreadAttach(const Reference<XMultiServiceFactory >& _rxFactory) : bDetach(sal_False), pEnv(NULL) SDBThreadAttach::SDBThreadAttach(const Reference<XMultiServiceFactory >& _rxFactory) : bDetach(sal_False), pEnv(NULL)
{ {
attachThread(pEnv,_rxFactory); attachThread(pEnv,_rxFactory);
if(pEnv && pEnv->ExceptionOccurred())
pEnv->ExceptionClear();
} }
SDBThreadAttach::~SDBThreadAttach() SDBThreadAttach::~SDBThreadAttach()
{ {
if(pEnv && pEnv->ExceptionOccurred())
{
OSL_ENSURE(0,"Exception occured in JNI!");
pEnv->ExceptionClear();
}
detachThread(); detachThread();
} }
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: ResultSet.cxx,v $ * $RCSfile: ResultSet.cxx,v $
* *
* $Revision: 1.10 $ * $Revision: 1.11 $
* *
* last change: $Author: oj $ $Date: 2001-07-04 10:54:30 $ * last change: $Author: oj $ $Date: 2001-08-14 07:21:03 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -583,8 +583,8 @@ Any SAL_CALL java_sql_ResultSet::getObject( sal_Int32 columnIndex, const Referen ...@@ -583,8 +583,8 @@ Any SAL_CALL java_sql_ResultSet::getObject( sal_Int32 columnIndex, const Referen
jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!"); jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!");
if( mID ){ if( mID ){
out = t.pEnv->CallObjectMethodA( object, mID, args); out = t.pEnv->CallObjectMethodA( object, mID, args);
ThrowSQLException(t.pEnv,*this);
t.pEnv->DeleteLocalRef((jstring)args[1].l); t.pEnv->DeleteLocalRef((jstring)args[1].l);
ThrowSQLException(t.pEnv,*this);
// und aufraeumen // und aufraeumen
} //mID } //mID
} //t.pEnv } //t.pEnv
...@@ -1448,19 +1448,21 @@ void SAL_CALL java_sql_ResultSet::updateBinaryStream( sal_Int32 columnIndex, con ...@@ -1448,19 +1448,21 @@ void SAL_CALL java_sql_ResultSet::updateBinaryStream( sal_Int32 columnIndex, con
SDBThreadAttach t; SDBThreadAttach t;
if( t.pEnv ) if( t.pEnv )
{ {
// TODO
jvalue args[1];
// Parameter konvertieren
args[0].l = 0;
// temporaere Variable initialisieren // temporaere Variable initialisieren
char * cSignature = "(ILjava/io/InputStream;I)V"; char * cSignature = "(ILjava/io/InputStream;I)V";
char * cMethodName = "updateBinaryStream"; char * cMethodName = "updateBinaryStream";
// Java-Call absetzen // Java-Call absetzen
jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!"); jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!");
if( mID ){ if( mID ){
// TODO
jvalue args[1];
// Parameter konvertieren
args[0].l = 0;
t.pEnv->CallVoidMethod( object, mID,columnIndex,args[0].l,length); t.pEnv->CallVoidMethod( object, mID,columnIndex,args[0].l,length);
ThrowSQLException(t.pEnv,*this);
t.pEnv->DeleteLocalRef((jobject)args[0].l); t.pEnv->DeleteLocalRef((jobject)args[0].l);
ThrowSQLException(t.pEnv,*this);
} }
} }
} }
...@@ -1470,18 +1472,19 @@ void SAL_CALL java_sql_ResultSet::updateCharacterStream( sal_Int32 columnIndex, ...@@ -1470,18 +1472,19 @@ void SAL_CALL java_sql_ResultSet::updateCharacterStream( sal_Int32 columnIndex,
SDBThreadAttach t; SDBThreadAttach t;
if( t.pEnv ) if( t.pEnv )
{ {
jvalue args[1];
// Parameter konvertieren
args[0].l = 0;
// temporaere Variable initialisieren // temporaere Variable initialisieren
char * cSignature = "(ILjava/io/InputStream;I)V"; char * cSignature = "(ILjava/io/InputStream;I)V";
char * cMethodName = "updateCharacterStream"; char * cMethodName = "updateCharacterStream";
// Java-Call absetzen // Java-Call absetzen
jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!"); jmethodID mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!");
if( mID ){ if( mID ){
jvalue args[1];
// Parameter konvertieren
args[0].l = 0;
t.pEnv->CallVoidMethod( object, mID,columnIndex,args[0].l,length); t.pEnv->CallVoidMethod( object, mID,columnIndex,args[0].l,length);
ThrowSQLException(t.pEnv,*this);
t.pEnv->DeleteLocalRef((jobject)args[0].l); t.pEnv->DeleteLocalRef((jobject)args[0].l);
ThrowSQLException(t.pEnv,*this);
} }
} }
} }
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: tools.cxx,v $ * $RCSfile: tools.cxx,v $
* *
* $Revision: 1.6 $ * $Revision: 1.7 $
* *
* last change: $Author: oj $ $Date: 2001-05-31 08:29:15 $ * last change: $Author: oj $ $Date: 2001-08-14 07:21:03 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -161,9 +161,13 @@ java_util_Properties::java_util_Properties( ): java_lang_Object( NULL, (jobject) ...@@ -161,9 +161,13 @@ java_util_Properties::java_util_Properties( ): java_lang_Object( NULL, (jobject)
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
jstring connectivity::convertwchar_tToJavaString(JNIEnv *pEnv,const ::rtl::OUString& _rTemp) jstring connectivity::convertwchar_tToJavaString(JNIEnv *pEnv,const ::rtl::OUString& _rTemp)
{ {
jstring pStr = NULL;
if (pEnv) if (pEnv)
return pEnv->NewString(_rTemp.getStr(), _rTemp.getLength()); {
return NULL; pStr = pEnv->NewString(_rTemp.getStr(), _rTemp.getLength());
OSL_ENSURE(pStr,"Could not create a jsstring object!");
}
return pStr;
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment