Bug #73070 Preparing a stored procedure call with Fabric results in an exception
Submitted: 21 Jun 2014 2:38 Modified: 16 Jul 2014 20:24
Reporter: Jess Balint Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / J Severity:S3 (Non-critical)
Version:5.1.30 OS:Any
Assigned to: Jess Balint CPU Architecture:Any
Tags: fabric

[21 Jun 2014 2:38] Jess Balint
Description:
Preparing a call to a stored procedure throws an exception:

Exception in thread "main" java.sql.SQLException: java.lang.NullPointerException
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
    at com.mysql.jdbc.CharsetMapping.getMysqlCharsetForJavaEncoding(CharsetMapping.java:618)
    at com.mysql.jdbc.CharsetMapping.getCollationIndexForJavaEncoding(CharsetMapping.java:626)
    at com.mysql.jdbc.Field.setEncoding(Field.java:442)
    at com.mysql.jdbc.DatabaseMetaData.buildResultSet(DatabaseMetaData.java:916)
    at com.mysql.jdbc.DatabaseMetaData.buildResultSet(DatabaseMetaData.java:902)
    at com.mysql.jdbc.DatabaseMetaData.getProceduresAndOrFunctions(DatabaseMetaData.java:4760)
    at com.mysql.jdbc.DatabaseMetaData.getProcedureOrFunctionColumns(DatabaseMetaData.java:4412)
    at com.mysql.jdbc.JDBC4DatabaseMetaData.getProcedureColumns(JDBC4DatabaseMetaData.java:106)
    at com.mysql.jdbc.CallableStatement.determineParameterTypes(CallableStatement.java:857)
    at com.mysql.jdbc.CallableStatement.<init>(CallableStatement.java:630)
    at com.mysql.jdbc.JDBC4CallableStatement.<init>(JDBC4CallableStatement.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
    at com.mysql.jdbc.CallableStatement.getInstance(CallableStatement.java:524)
    at com.mysql.jdbc.ConnectionImpl.parseCallableStatement(ConnectionImpl.java:4326)
    at com.mysql.jdbc.ConnectionImpl.prepareCall(ConnectionImpl.java:4410)
    at com.mysql.jdbc.ConnectionImpl.prepareCall(ConnectionImpl.java:4384)
    at com.mysql.jdbc.LoadBalancedMySQLConnection.prepareCall(LoadBalancedMySQLConnection.java:2174)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.mysql.jdbc.LoadBalancingConnectionProxy.invoke(LoadBalancingConnectionProxy.java:643)
    at com.mysql.jdbc.LoadBalancingConnectionProxy.invoke(LoadBalancingConnectionProxy.java:548)
    at com.sun.proxy.$Proxy0.prepareCall(Unknown Source)
    at com.mysql.jdbc.ReplicationConnection.prepareCall(ReplicationConnection.java:543)
    at com.mysql.fabric.jdbc.FabricMySQLConnectionProxy.prepareCall(FabricMySQLConnectionProxy.java:718)
    at ForumFabricPrepareCall.main(ForumFabricPrepareCall.java:9)
Caused by: java.lang.NullPointerException
    at com.mysql.jdbc.CharsetMapping.getMysqlCharsetForJavaEncoding(CharsetMapping.java:582)
    ... 30 more

How to repeat:
Connection c = DriverManager.getConnection("jdbc:mysql:fabric://localhost:32274?fabricUsername=admin&fabricPassword=jbalint&fabricServerGroup=fabric_test1_global");
System.out.println("Catalog is '" + c.getCatalog() + "'");
c.createStatement().executeUpdate("set @x = 1");
c.prepareCall("{call x(?)}");
[16 Jul 2014 20:23] Daniel So
Added the following entry to the Connector/J 5.1.32 changelog:

"Preparing a call to a stored procedure with Fabric caused a null point exception to be thrown."