Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Treat unsupported URLs as specified in Driver#connect to avoid overwriting the "real" exception #114

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions postgis-jdbc/src/main/java/net/postgis/jdbc/DriverWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,18 +145,18 @@ private static TypesAdder loadTypesAdder(final String version) throws SQLExcepti
/**
* Creates a postgresql connection, and then adds the PostGIS data types to it calling addpgtypes().
*
* A side-effect of this method is that the specified url parameter may be be changed
*
* @param url the URL of the database to connect to (may be changed as a side-effect of this method)
* @param url the URL of the database to connect to
* @param info a list of arbitrary tag/value pairs as connection arguments
* @return a connection to the URL or null if it isnt us
* @return a connection to the URL or null if the driver does not support the subprotocol specified in the URL
* @exception SQLException if a database access error occurs
*
* @see java.sql.Driver#connect
* @see org.postgresql.Driver
*/
public java.sql.Connection connect(String url, final Properties info) throws SQLException {
url = mangleURL(url);
if (!acceptsURL(url)) {
return null;
}
Connection result = super.connect(url, info);
typesAdder.addGT(result, useLW(result));
return result;
Expand Down Expand Up @@ -184,7 +184,7 @@ protected boolean useLW(final Connection result) {
* A side-effect of this method is that the specified url parameter may be be changed
*
* @see java.sql.Driver#acceptsURL
* @param url the URL of the driver (may be changed as a side-effect of this method)
* @param url the URL of the driver
* @return true if this driver accepts the given URL
*/
public boolean acceptsURL(String url) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package net.postgis.jdbc;

import org.junit.Assert;
import org.junit.Test;

import java.sql.DriverManager;
import java.sql.SQLException;

public class DriverConnectBehaviorTest {

@Test
public void testThatPostGisDoesNotOverwriteSavedExceptionForUnsupportedConnectionString() {
try {
DriverManager.getConnection("jdbc:missing");
} catch (SQLException e) {
// This should not be "Unknown protocol or subprotocol in url jdbc:missing", which
// would indicate that PostGIS threw an exception instead of returning `null` from
// the `connect` method for an unsupported connection string.
// (This is documented in `java.sql.Driver.connect`.)
//
// The former behavior is not desirable as throwing an exception causes a previously
// saved exception from a "better fitting" driver to be overwritten by PostGis, despite
// PostGis not actually being able to handle the connection.
//
// (Imagine an Oracle connection string with a wrong password, in which the Oracle
// driver's exception regarding the wrong password would be replaced with a generic
// nonsensical PostGis exception.)
Assert.assertEquals("No suitable driver found for jdbc:missing", e.getMessage());
}
}

}