2.3.1 throws exception for java bean specification violation (2.3.0 not)
------------------------------------------------------------------------

                 Key: IBATIS-501
                 URL: https://issues.apache.org/jira/browse/IBATIS-501
             Project: iBatis for Java
          Issue Type: Bug
          Components: SQL Maps
    Affects Versions: 2.3.1
         Environment: ibatis-2.3.1.710
            Reporter: Kai Grabfelder


Assume the following class com.foo.bar.Bean with the following methods: 

void setFoo(int) 
void setFoo(String) 
int getFoo()

I'm using this bean in an implicit parameter map as a parameter to an select 
statement that looks like this

<select id="getIds" parameterClass="java.util.Map" 
resultClass="java.lang.Integer">
select * from dual where 1 = #bean.foo#
</select>

with the bean being a property of the map. This statement is working with 
iBATIS 2.3.0 but iBATIS 2.3.1 throws the following exception when executing the 
select:

Could not get property 'foo' from com.foo.bar.Bean.  Cause: 
java.lang.RuntimeException: Illegal overloaded setter method with ambiguous 
type for property foo in class class com.foo.bar.Bean.  This breaks the 
JavaBeans specification and can cause unpredicatble results.

This exception makes sense when it comes to actually using the setters but as 
only the getters are used I think it should not be thrown. It is perfectly ok 
for me, if you consider this as won't fix, but please at least mention the 
change in the release notes because it breaks backward compatibility.

See below for the relevant parts of the stacktrace

Caused by: com.ibatis.common.beans.ProbeException: Could not get property 'foo' 
from com.foo.bar.Bean.  Cause: java.lang.RuntimeException: Illegal overloaded 
setter method with ambiguous type for property foo in class class 
com.foo.bar.Bean.  This breaks the JavaBeans specification and can cause 
unpredicatble results.
        at 
com.ibatis.common.beans.ComplexBeanProbe.getProperty(ComplexBeanProbe.java:336)
        at 
com.ibatis.common.beans.ComplexBeanProbe.getObject(ComplexBeanProbe.java:190)
        at com.ibatis.common.beans.GenericProbe.getObject(GenericProbe.java:74)
        at 
com.ibatis.sqlmap.engine.exchange.ComplexDataExchange.getData(ComplexDataExchange.java:65)
        at 
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.getParameterObjectValues(ParameterMap.java:133)
        at 
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:181)
        ... 30 more
Caused by: java.lang.RuntimeException: Illegal overloaded setter method with 
ambiguous type for property contractYear in class class com.foo.bar.Bean.  This 
breaks the JavaBeans specification and can cause unpredicatble results.
        at 
com.ibatis.common.beans.ClassInfo.resolveSetterConflicts(ClassInfo.java:163)
        at com.ibatis.common.beans.ClassInfo.addSetMethods(ClassInfo.java:141)
        at com.ibatis.common.beans.ClassInfo.<init>(ClassInfo.java:76)
        at com.ibatis.common.beans.ClassInfo.getInstance(ClassInfo.java:509)
        at 
com.ibatis.common.beans.ComplexBeanProbe.getProperty(ComplexBeanProbe.java:315)
        ... 35 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to