From 37fe1c2d7ae35ba4bffb33a7626853f03070d320 Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Wed, 9 Apr 2014 20:26:42 +0200 Subject: [PATCH] TAP: Missing NULL test (if the property JDBC URL is not provided a NullPointerException would have occurred) --- src/tap/config/DefaultTAPFactory.java | 40 +++++++++++++++------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/tap/config/DefaultTAPFactory.java b/src/tap/config/DefaultTAPFactory.java index dc1e380..3ba2cea 100644 --- a/src/tap/config/DefaultTAPFactory.java +++ b/src/tap/config/DefaultTAPFactory.java @@ -1,14 +1,24 @@ package tap.config; -import static tap.config.TAPConfiguration.*; +import static tap.config.TAPConfiguration.DEFAULT_BACKUP_BY_USER; +import static tap.config.TAPConfiguration.DEFAULT_BACKUP_FREQUENCY; +import static tap.config.TAPConfiguration.KEY_BACKUP_BY_USER; +import static tap.config.TAPConfiguration.KEY_BACKUP_FREQUENCY; +import static tap.config.TAPConfiguration.KEY_DB_PASSWORD; +import static tap.config.TAPConfiguration.KEY_DB_USERNAME; +import static tap.config.TAPConfiguration.KEY_JDBC_DRIVER; +import static tap.config.TAPConfiguration.KEY_JDBC_URL; +import static tap.config.TAPConfiguration.KEY_SQL_TRANSLATOR; +import static tap.config.TAPConfiguration.VALUE_JDBC_DRIVERS; +import static tap.config.TAPConfiguration.VALUE_PGSPHERE; +import static tap.config.TAPConfiguration.VALUE_POSTGRESQL; +import static tap.config.TAPConfiguration.VALUE_USER_ACTION; +import static tap.config.TAPConfiguration.getProperty; import java.lang.reflect.InvocationTargetException; import java.sql.ResultSet; import java.util.Properties; -import adql.translator.ADQLTranslator; -import adql.translator.PgSphereTranslator; -import adql.translator.PostgreSQLTranslator; import tap.AbstractTAPFactory; import tap.ServiceConnection; import tap.TAPException; @@ -18,6 +28,9 @@ import tap.db.JDBCConnection; import uws.UWSException; import uws.service.UWSService; import uws.service.backup.UWSBackupManager; +import adql.translator.ADQLTranslator; +import adql.translator.PgSphereTranslator; +import adql.translator.PostgreSQLTranslator; public final class DefaultTAPFactory extends AbstractTAPFactory<ResultSet> { @@ -31,15 +44,13 @@ public final class DefaultTAPFactory extends AbstractTAPFactory<ResultSet> { private boolean backupByUser; private long backupFrequency; - @SuppressWarnings("unchecked") public DefaultTAPFactory(ServiceConnection<ResultSet> service, final Properties tapConfig) throws NullPointerException, TAPException{ super(service); /* 0. Extract the DB type and deduce the JDBC Driver path */ String jdbcDriver = getProperty(tapConfig, KEY_JDBC_DRIVER); - String dbUrl = null; + String dbUrl = getProperty(tapConfig, KEY_JDBC_URL); if (jdbcDriver == null){ - dbUrl = getProperty(tapConfig, KEY_JDBC_URL); if (dbUrl == null) throw new TAPException("JDBC URL missing."); else if (!dbUrl.startsWith(JDBCConnection.JDBC_PREFIX + ":")) @@ -67,20 +78,13 @@ public final class DefaultTAPFactory extends AbstractTAPFactory<ResultSet> { translator = PostgreSQLTranslator.class; // case c.) PgSphere translator - else if (sqlTranslator.equals(VALUE_PGSPHERE)) + else if (sqlTranslator.equalsIgnoreCase(VALUE_PGSPHERE)) translator = PgSphereTranslator.class; // case d.) a client defined ADQLTranslator (with the provided class path) - else if (sqlTranslator.charAt(0) == '{' && sqlTranslator.charAt(sqlTranslator.length() - 1) == '}'){ - sqlTranslator = sqlTranslator.substring(1, sqlTranslator.length() - 2); - try{ - translator = (Class<? extends ADQLTranslator>)ClassLoader.getSystemClassLoader().loadClass(sqlTranslator); - }catch(ClassNotFoundException cnfe){ - throw new TAPException("Unable to load the SQL Translator! The class specified by the property sql_translator (" + sqlTranslator + ") can not be found."); - }catch(ClassCastException cce){ - throw new TAPException("Unable to load the SQL Translator! The class specified by the property sql_translator (" + sqlTranslator + ") is not implementing adql.translator.ADQLTranslator."); - } - } + else if (TAPConfiguration.isClassPath(sqlTranslator)) + translator = TAPConfiguration.fetchClass(sqlTranslator, KEY_SQL_TRANSLATOR, ADQLTranslator.class); + // case e.) unsupported value else throw new TAPException("Unsupported value for the property sql_translator: \"" + sqlTranslator + "\" !"); -- GitLab