[ http://issues.apache.org/jira/browse/IBATIS-153?page=comments#action_12314604 ]
ppz4j commented on IBATIS-153: ------------------------------ I'm using executeQueryForList because i want ibatis to get the resultset and convert each row in a java bean as defined in the follow xml file : <resultMap id="result" class="it.app.test.Stock"> <result property="idInstrument" column="id_instrument"/> <result property="shortName" column="shortname"/> <result property="refPrice" column="refprice"/> </resultMap> <procedure id="getOptions" resultMap="result" parameterMap="params"> { call OPT_USER.TEST.TEST_CURSOR(?,?,?) } </procedure> With update, as you suggest, i can get only the returned resultset from the input parameter map and after i have to convert it on my own and this is not the behaviour i expect Regards, > NullPointer exception during call of oracle stored procedure with REF CURSOR > as output parameter > ------------------------------------------------------------------------------------------------- > > Key: IBATIS-153 > URL: http://issues.apache.org/jira/browse/IBATIS-153 > Project: iBatis for Java > Type: Bug > Components: SQL Maps > Versions: 2.1.0 > Environment: Oracle 9. > Reporter: ppz4j > Assignee: Clinton Begin > Priority: Minor > > the invocation of an oracle stored procedura with REF CURSOR as output > parameter raises a NullPointerException. > The procedure's signature is : > PROCEDURE test ( > out_cur OUT my_cur, > out_err_code OUT NUMBER, > out_err_text OUT VARCHAR2 > ) > where TYPE my_cur IS REF CURSOR; > and ibatis configuration is : > > <parameterMap id="params" class="map"> > > > > </parameterMap> > <resultMap id="result" class="it.app.test.Stock"> > <result property="idInstrument" column="id_instrument"/> > <result property="shortName" column="shortname"/> > <result property="refPrice" column="refprice"/> > </resultMap> > <procedure id="getOptions" resultMap="result" parameterMap="params"> > { call OPT_USER.TEST.TEST_CURSOR(?,?,?) } > </procedure> > the exception stack trace is: > Caused by: > java.lang.NullPointerException > at > com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:352) > at > com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQueryProcedure(SqlExecutor.java:291) > at > com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteQuery(ProcedureStatement.java:34) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584) > at > com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:105) > at > com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78) > at it.imiweb.app.data.DataModelTest.testOptions(DataModelTest.java:295) > at it.imiweb.app.data.DataModelTest.main(DataModelTest.java:445) > Looking inside the code it seems that the problem is due to the invocation > of the follow instruction: > rs = cs.getResultSet() > in method executeQueryProcedure of SQLExcecutor class that returns a null > value instead of the resultset as the stored procedure output. To > successfully invoke the procedure i have modified the code as follow: > public void executeQueryProcedure(RequestScope request, Connection conn, > String sql, Object[] parameters, > int skipResults, int maxResults, > RowHandlerCallback callback) > ... > ... > cs.execute(); > > //this method returns always null > //rs = cs.getResultSet(); > > //with this code is possible to get the resultset even if the procedure > returns more than one output parameter > retrieveOutputParameters(cs, mappings, parameters); > for ( int ii = 0; ii < parameters.length; ii++ ) { > if ( parameters[ii] instanceof ResultSet ) { > rs = ( ResultSet ) parameters[ii]; > break; > } > } > //end added code > > errorContext.setMoreInfo("Check the results (failed to retrieve > results)."); > handleResults(request, rs, skipResults, maxResults, callback); > errorContext.setMoreInfo("Check the output parameters (retrieval of > output parameters failed)."); > //commented because it's already invoked and another call will throw an > exception > //retrieveOutputParameters(cs, mappings, parameters); > ... > ... > } > The driver jdbc is : > Manifest-Version: 1.0 > Specification-Title: "Oracle JDBC driver classes for use with JDK1.4" > Specification-Version: "Oracle JDBC Driver version - 9.0.2.0.0" > Specification-Vendor: "Oracle Corporation" . > Implementation-Title: "ojdbc14.jar" > Implementation-Version: "Oracle JDBC Driver version - 9.0.2.0.0" > Implementation-Vendor: "Oracle Corporation" > Implementation-Time: "Tue Apr 6 01:10:57 2004" > Can you help me, please ? -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira