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.
@@ -44,7 +44,7 @@ public class OracleTableMetaDataProvider extends GenericTableMetaDataProvider {
44
44
private final boolean includeSynonyms ;
45
45
46
46
@ Nullable
47
- private String defaultSchema ;
47
+ private final String defaultSchema ;
48
48
49
49
50
50
/**
@@ -65,23 +65,27 @@ public OracleTableMetaDataProvider(DatabaseMetaData databaseMetaData, boolean in
65
65
66
66
super (databaseMetaData );
67
67
this .includeSynonyms = includeSynonyms ;
68
-
69
- lookupDefaultSchema (databaseMetaData );
68
+ this .defaultSchema = lookupDefaultSchema (databaseMetaData );
70
69
}
71
70
72
71
73
72
/*
74
73
* Oracle-based implementation for detecting the current schema.
75
74
*/
76
- private void lookupDefaultSchema (DatabaseMetaData databaseMetaData ) {
75
+ @ Nullable
76
+ private static String lookupDefaultSchema (DatabaseMetaData databaseMetaData ) {
77
77
try {
78
78
CallableStatement cstmt = null ;
79
79
try {
80
- cstmt = databaseMetaData .getConnection ().prepareCall (
81
- "{? = call sys_context('USERENV', 'CURRENT_SCHEMA')}" );
80
+ Connection con = databaseMetaData .getConnection ();
81
+ if (con == null ) {
82
+ logger .debug ("Cannot check default schema - no Connection from DatabaseMetaData" );
83
+ return null ;
84
+ }
85
+ cstmt = con .prepareCall ("{? = call sys_context('USERENV', 'CURRENT_SCHEMA')}" );
82
86
cstmt .registerOutParameter (1 , Types .VARCHAR );
83
87
cstmt .execute ();
84
- this . defaultSchema = cstmt .getString (1 );
88
+ return cstmt .getString (1 );
85
89
}
86
90
finally {
87
91
if (cstmt != null ) {
@@ -90,7 +94,8 @@ private void lookupDefaultSchema(DatabaseMetaData databaseMetaData) {
90
94
}
91
95
}
92
96
catch (SQLException ex ) {
93
- logger .debug ("Encountered exception during default schema lookup" , ex );
97
+ logger .debug ("Exception encountered during default schema lookup" , ex );
98
+ return null ;
94
99
}
95
100
}
96
101
@@ -116,6 +121,12 @@ public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData,
116
121
}
117
122
118
123
Connection con = databaseMetaData .getConnection ();
124
+ if (con == null ) {
125
+ logger .warn ("Unable to include synonyms in table metadata lookup - no Connection from DatabaseMetaData" );
126
+ super .initializeWithTableColumnMetaData (databaseMetaData , catalogName , schemaName , tableName );
127
+ return ;
128
+ }
129
+
119
130
try {
120
131
Class <?> oracleConClass = con .getClass ().getClassLoader ().loadClass ("oracle.jdbc.OracleConnection" );
121
132
con = (Connection ) con .unwrap (oracleConClass );
@@ -133,7 +144,7 @@ public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData,
133
144
Boolean originalValueForIncludeSynonyms ;
134
145
135
146
try {
136
- Method getIncludeSynonyms = con .getClass ().getMethod ("getIncludeSynonyms" , ( Class []) null );
147
+ Method getIncludeSynonyms = con .getClass ().getMethod ("getIncludeSynonyms" );
137
148
ReflectionUtils .makeAccessible (getIncludeSynonyms );
138
149
originalValueForIncludeSynonyms = (Boolean ) getIncludeSynonyms .invoke (con );
139
150
0 commit comments