Re: Bug report: NullPointerException from Driver.connect when passed a Properties with non-string values - Mailing list pgsql-jdbc

From Dave Cramer
Subject Re: Bug report: NullPointerException from Driver.connect when passed a Properties with non-string values
Date
Msg-id CADK3HHK9HgJ+-2x9cBMbH9VryUoNvTAbzcG1D+xgN9WR=05vEw@mail.gmail.com
Whole thread Raw
In response to Re: Bug report: NullPointerException from Driver.connect when passed a Properties with non-string values  (dmp <danap@ttc-cmc.net>)
Responses Re: Bug report: NullPointerException from Driver.connect when passed a Properties with non-string values  (Nathaniel Waisbrot <waisbrot@highfleet.com>)
List pgsql-jdbc
Well ... another interesting stretching of the spec.

Driver PropertyInfo values are required to be Strings as per the spec. http://docs.oracle.com/javase/1.3/docs/api/java/sql/DriverPropertyInfo.html

Your test case is actually a bit misleading as getProperty returns null because getString on the empty object returns null.

while I'm inclined to accept a patch to fix this, this is clearly 'out of spec'

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Mon, Jan 28, 2013 at 1:16 PM, dmp <danap@ttc-cmc.net> wrote:
Hello Nathaniel,

Any very robust program will try to handle anything the user throws at it.

In this case you have passed a null value as an argument to the method
and it as acted according by giving you a NUllPointerException. Perhaps
wrapping this as SQLException may be more easily caught by your app., but
would be deceptive in response.

Perhaps you could submit a patch for consideration, to the solution you
desire. The code may be obtained at GitHub.

git clone git://github.com/pgjdbc/pgjdbc.git

danap.



Nathaniel Waisbrot wrote:
I found this while working with another JDBC driver (Stels XML driver).  The Postgresql driver's connect() method is expecting the passed Properties object to have only string values, but this is not actually guaranteed to be the case.  I think that the PG driver should wrap the NullPointerException in a SQLException, which would allow the DriverManager to attempt to use other JDBC drivers to make the connection.

Here is a simple Java program which will reproduce the problem:

==================
import java.sql.DriverManager;
import java.util.Properties;

public class PGTest {
        public static void main(String[] args) throws Exception {
                Class.forName("org.postgresql.Driver");
                Properties info = new Properties();
                info.put("foo", new Object());      // info.getPropert("foo") will return null
                DriverManager.getConnection("foo:bar//baz", info);
        }
}
==================

and here is the stack trace produced by running that program:

==================
Exception in thread "main" java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:542)
        at java.util.Properties.setProperty(Properties.java:161)
        at org.postgresql.Driver.connect(Driver.java:244)
        at java.sql.DriverManager.getConnection(DriverManager.java:579)
        at java.sql.DriverManager.getConnection(DriverManager.java:190)
        at PGTest.main(PGTest.java:9)
==================

I'm using postgresql-9.2-1002.jdbc4.jar, with Java 7, running on Mac OS 10.8.2.  Output of java -version:
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)






--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc

pgsql-jdbc by date:

Previous
From: dmp
Date:
Subject: Re: Bug report: NullPointerException from Driver.connect when passed a Properties with non-string values
Next
From: Nathaniel Waisbrot
Date:
Subject: Re: Bug report: NullPointerException from Driver.connect when passed a Properties with non-string values