[ 
http://issues.apache.org/jira/browse/IBATIS-210?page=comments#action_12363051 ] 

Reuben Firmin commented on IBATIS-210:
--------------------------------------

Hello, an update on this. 

#status[].value# does in fact work; however, #status[]# does not. (The first 
works because the Deployment.Status Enum implements HasValue, which contains a 
getValue() method.) The second gives this stacktrace:

java.lang.NullPointerException
        at 
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:42)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
        at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:176)
        at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
        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.mapping.statement.CachingStatement.executeQueryForList(CachingStatement.java:100)
        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:101)
        at 
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78)
        

java.lang.NullPointerException
        at 
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:42)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
        at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:176)
        at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
        at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)


I also reproduced the bug using a map:

    <select id="testCaseForClinton" parameterClass="map" resultClass="long">
        SELECT *
        FROM Deployment
        WHERE statusId=#status#
    </select>

    public void getIbatisBug210() {
        HashMap map = new HashMap();
        map.put("status", Deployment.Status.BUILDING);
        
getSqlMapClientTemplate().queryForObject("Deployment.testCaseForClinton", map);
    }

    public void testIbatisBug210() throws Exception {
        System.out.println("testing ibatis bug 210");
        DeploymentDao dao = DeploymentDaoFactory.getDefault();
        dao.getIbatisBug210();
        fail("it works unexpectedly");        
    }

With this (the latter being a junit test; the former part of the 
DeploymentDao), I get the same stacktrace:

java.lang.NullPointerException
        at 
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:42)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameter(BasicParameterMap.java:165)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap.setParameters(BasicParameterMap.java:125)
        at 
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:176)
        at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
        at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
        at 
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)
        at 
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:561)
        at 
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:536)

Again, I know you don't support enums, but wanted to clarify my previous 
comment.

Thanks



> Enum within Collection is not mapped to custom TypeHandler
> ----------------------------------------------------------
>
>          Key: IBATIS-210
>          URL: http://issues.apache.org/jira/browse/IBATIS-210
>      Project: iBatis for Java
>         Type: Bug
>   Components: SQL Maps
>     Versions: 2.1.0
>  Environment: Linux/Spring/Resin/Jdk1.5
>     Reporter: Reuben Firmin

>
> Passing an Enum to Ibatis requires the declaration of a custom TypeHandler 
> (see my comments here for my implementation: 
> http://opensource2.atlassian.com/confluence/oss/display/IBATIS/How%20do%20I%20use%20a%20Custom%20Type%20Handler%20with%20complex%20property%20or%20Type%20Safe%20Enumeration)
> This works, except when the Enum is within a map or a list.
> That is, if I pass a list of Enum attributes to a statement, as a parameter, 
> and attempt to iterate over them, they are mapped to UnknownTypeHandler. 
> Similarly, when an Enum is passed as value in a HashMap as part of a 
> parameter, it is also mapped to an UnknownTypeHandler.

-- 
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

Reply via email to