ibatis-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Duffey <tduf...@utilivisor.com>
Subject UnknownTypeHandler and inner classes/enums
Date Tue, 17 Oct 2006 04:09:55 GMT
Hi All,

I'm looking at revision 464707 (Latest available on trunk this  
afternoon) of com.ibatis.sqlmap.engine.type.UnknownTypeHandler and am  
puzzled by its setParameter() method:

   public void setParameter(PreparedStatement ps, int i, Object  
parameter, String jdbcType)
       throws SQLException {
     Class searchClass = parameter.getClass();
     if ( usingJavaPre5 )  {
         try  {
             searchClass = getBaseClass(searchClass);
         catch ( Exception ex ) {
             searchClass = null;
     if ( searchClass == null )  {
         searchClass = parameter.getClass();
     TypeHandler handler = factory.getTypeHandler(searchClass,  
     handler.setParameter(ps, i, parameter, jdbcType);

Why the call to getBaseClass() for JDK5?  The comment above  
getBaseClass() is puzzling, too:

    * Get the base class of classParam, for top level classes
    * this returns null. For enums, inner and anonymous
    * classes it returns the enclosing class. The intent
    * is to use this for enum support in Java 5+.
    * @param classParam class to get enclosing class of
    * @return Enclosing class
    * @throws NoSuchMethodException when run in pre Java 5.
   private static Class getBaseClass(Class classParam) { ... }

If I specify a type handler for an inner class or enum, why would I  
ever want iBATIS to look for a type handler for that inner class/ 
enum's enclosing class?  I am experiencing a problem right now where  
I specify a type handler for foo.bar.Person$Type and when I do an  
insert/update the aforementioned code results in iBATIS searching for  
a type handler for foo.bar.Person and generates an NPE at:

     handler.setParameter(ps, i, parameter, jdbcType);

because no such type handler exists.  What am I missing?

I am happy to provide code, stack traces, etc. if you agree that this  
is a problem.


View raw message