1
1
/*
2
- * Copyright 2002-2017 the original author or authors.
2
+ * Copyright 2002-2018 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -64,23 +64,26 @@ public OracleTableMetaDataProvider(DatabaseMetaData databaseMetaData, boolean in
64
64
65
65
super (databaseMetaData );
66
66
this .includeSynonyms = includeSynonyms ;
67
-
68
- lookupDefaultSchema (databaseMetaData );
67
+ this .defaultSchema = lookupDefaultSchema (databaseMetaData );
69
68
}
70
69
71
70
72
71
/*
73
72
* Oracle-based implementation for detecting the current schema.
74
73
*/
75
- private void lookupDefaultSchema (DatabaseMetaData databaseMetaData ) {
74
+ private static String lookupDefaultSchema (DatabaseMetaData databaseMetaData ) {
76
75
try {
77
76
CallableStatement cstmt = null ;
78
77
try {
79
- cstmt = databaseMetaData .getConnection ().prepareCall (
80
- "{? = call sys_context('USERENV', 'CURRENT_SCHEMA')}" );
78
+ Connection con = databaseMetaData .getConnection ();
79
+ if (con == null ) {
80
+ logger .debug ("Cannot check default schema - no Connection from DatabaseMetaData" );
81
+ return null ;
82
+ }
83
+ cstmt = con .prepareCall ("{? = call sys_context('USERENV', 'CURRENT_SCHEMA')}" );
81
84
cstmt .registerOutParameter (1 , Types .VARCHAR );
82
85
cstmt .execute ();
83
- this . defaultSchema = cstmt .getString (1 );
86
+ return cstmt .getString (1 );
84
87
}
85
88
finally {
86
89
if (cstmt != null ) {
@@ -89,7 +92,8 @@ private void lookupDefaultSchema(DatabaseMetaData databaseMetaData) {
89
92
}
90
93
}
91
94
catch (SQLException ex ) {
92
- logger .debug ("Encountered exception during default schema lookup" , ex );
95
+ logger .debug ("Exception encountered during default schema lookup" , ex );
96
+ return null ;
93
97
}
94
98
}
95
99
@@ -113,6 +117,12 @@ public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData,
113
117
}
114
118
115
119
Connection con = databaseMetaData .getConnection ();
120
+ if (con == null ) {
121
+ logger .warn ("Unable to include synonyms in table metadata lookup - no Connection from DatabaseMetaData" );
122
+ super .initializeWithTableColumnMetaData (databaseMetaData , catalogName , schemaName , tableName );
123
+ return ;
124
+ }
125
+
116
126
NativeJdbcExtractor nativeJdbcExtractor = getNativeJdbcExtractor ();
117
127
if (nativeJdbcExtractor != null ) {
118
128
con = nativeJdbcExtractor .getNativeConnection (con );
@@ -149,7 +159,7 @@ public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData,
149
159
Boolean originalValueForIncludeSynonyms ;
150
160
151
161
try {
152
- Method getIncludeSynonyms = con .getClass ().getMethod ("getIncludeSynonyms" , ( Class []) null );
162
+ Method getIncludeSynonyms = con .getClass ().getMethod ("getIncludeSynonyms" );
153
163
ReflectionUtils .makeAccessible (getIncludeSynonyms );
154
164
originalValueForIncludeSynonyms = (Boolean ) getIncludeSynonyms .invoke (con );
155
165
0 commit comments