You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Clinton Begin (JIRA)" <ib...@incubator.apache.org> on 2004/11/27 07:58:38 UTC

[jira] Closed: (IBATIS-12) INOUT parameters to proc not retrieved properly

     [ http://nagoya.apache.org/jira/browse/IBATIS-12?page=history ]
     
Clinton Begin closed IBATIS-12:
-------------------------------

      Assign To: Clinton Begin
     Resolution: Fixed
    Fix Version: 2.0.8


Fixed as described.

> INOUT parameters to proc not retrieved properly
> -----------------------------------------------
>
>          Key: IBATIS-12
>          URL: http://nagoya.apache.org/jira/browse/IBATIS-12
>      Project: iBatis for Java
>         Type: Bug
>   Components: SQL Maps
>     Reporter: Clinton Begin
>     Assignee: Clinton Begin
>      Fix For: 2.0.8

>
>  When calling a stored-proc with INOUT parameters, ibatis assigns the value of the nth parameter to the nth INOUT parameter.
> This is fine if all the INOUT parameters come first, but breaks if they don't.
> The broken code is in PropertyAccessPlan.setProperties(). "values" is an array of all the parameter values but "propertyNames" and "setters" only defin the OUTPUT parameters.
> public void setProperties(Object object, Object[] values) {
> try {
> Object[] arg = new Object[1];
> for (int i = 0; i < propertyNames.length; i++) {
> arg[0] = values[i];
> try {
> setters[i].invoke(object, arg);
> } catch (Throwable t) {
> throw ClassInfo.unwrapThrowable(t);
> }
> }
> } catch (Throwable t) {
> throw new NestedRuntimeException("Error setting properties of '" + object + "'. Cause: " + t, t);
> }
> }
> <procedure id="insertData" parameterMap="insertData-map">
> {call w_ins_data(?,?,?,?,?,?,?,?) }
> </procedure>
> <parameterMap id="insertData-map" class="com.xxx.Data">
> <parameter property="id" mode="INOUT" jdbcType="NUMERIC" javaType="long" nullValue="0"/>
> <parameter property="title" jdbcType="VARCHAR" javaType="java.lang.String"/>
> <parameter property="moeId" jdbcType="NUMERIC" javaType="long"/>
> <parameter property="hasComputer" jdbcType="SMALLINT" javaType="boolean"/>
> <parameter property="maxFoo" jdbcType="NUMERIC" javaType="int"/>
> <parameter property="active" mode="INOUT" jdbcType="SMALLINT" javaType="int" nullValue="0"/>
> <parameter property="location" jdbcType="VARCHAR" javaType="java.lang.String"/>
> <parameter property="otherInfo" jdbcType="VARCHAR" javaType="java.lang.String"/>
> </parameterMap>
> com.ibatis.common.jdbc.exception.NestedSQLException:
> --- The error occurred in com/xxx/web/persistence/ibatis/sqlmap/xml/ecm.xml.
> --- The error occurred while applying a parameter map.
> --- Check the exam-centre-manager.insertData-map.
> --- Check the output parameters.
> --- Cause: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.xxx.Data@f3c5c4'. Cause: java.lang.IllegalArgumentException: argument type mismatch
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.xxx.Data@f3c5c4'. Cause: java.lang.IllegalArgumentException: argument type mismatch
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:89)
> at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:315)
> at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:74)
> at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:49)
> at com.xxx.persistence.ibatis.sqlmap.BaseDaoImpl.executeUpdate(BaseDaoImpl.java:290)
> at com.xxx.persistence.ibatis.sqlmap.OurStuffDaoImpl.insertData(OurStuffDaoImpl.java:299)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:64)
> at $Proxy82.insertData(Unknown Source)
> at com.xxx.persistence.OurStuffTest.insertSomeDatas(OurStuffTest.java:252)
> at com.xxx.persistence.OurStuffTest.testDataList(OurStuffTest.java:93)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.xxx.Data@f3c5c4'. Cause: java.lang.IllegalArgumentException: argument type mismatch
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:51)
> at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:126)
> at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.refreshParameterObjectValues(BasicParameterMap.java:140)
> at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.postProcessParameterObject(ProcedureStatement.java:26)
> at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:77)
> ... 42 more
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:45)
> ... 46 more
> Caused by:
> com.ibatis.common.exception.NestedRuntimeException: Error setting properties of 'com.xxx.Data@f3c5c4'. Cause: java.lang.IllegalArgumentException: argument type mismatch
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:51)
> at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:126)
> at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.refreshParameterObjectValues(BasicParameterMap.java:140)
> at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.postProcessParameterObject(ProcedureStatement.java:26)
> at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:77)
> at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:315)
> at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:74)
> at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:49)
> at com.xxx.persistence.ibatis.sqlmap.BaseDaoImpl.executeUpdate(BaseDaoImpl.java:290)
> at com.xxx.persistence.ibatis.sqlmap.OurStuffDaoImpl.insertData(OurStuffDaoImpl.java:299)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:64)
> at $Proxy82.insertData(Unknown Source)
> at com.xxx.persistence.OurStuffTest.insertSomeDatas(OurStuffTest.java:252)
> at com.xxx.persistence.OurStuffTest.testDataList(OurStuffTest.java:93)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:45)
> ... 46 more
> Caused by:
> java.lang.IllegalArgumentException: argument type mismatch
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at com.ibatis.sqlmap.engine.accessplan.PropertyAccessPlan.setProperties(PropertyAccessPlan.java:45)
> at com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange.setData(JavaBeanDataExchange.java:126)
> at com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.refreshParameterObjectValues(BasicParameterMap.java:140)
> at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.postProcessParameterObject(ProcedureStatement.java:26)
> at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:77)
> at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:315)
> at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:74)
> at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:49)
> at com.xxx.persistence.ibatis.sqlmap.BaseDaoImpl.executeUpdate(BaseDaoImpl.java:290)
> at com.xxx.persistence.ibatis.sqlmap.OurStuffDaoImpl.insertData(OurStuffDaoImpl.java:299)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:64)
> at $Proxy82.insertData(Unknown Source)
> at com.xxx.persistence.OurStuffTest.insertSomeDatas(OurStuffTest.java:252)
> at com.xxx.persistence.OurStuffTest.testDataList(OurStuffTest.java:93)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira