Menu

StackOverflowError

Help
Andrew
2008-12-15
2013-04-25
  • Andrew

    Andrew - 2008-12-15

    When using the Hibernate3BeanReplicator with a class that has a java.util.Calendar object I get the error below.  I've only included the first 50 lines of the 1025 lines generated.  Any help would be appreciated.

    Thanks,
    Andrew

    java.lang.StackOverflowError
        at org.apache.log4j.CategoryKey.equals(CategoryKey.java:47)
        at java.util.Hashtable.get(Unknown Source)
        at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:268)
        at org.apache.log4j.Hierarchy.getLogger(Hierarchy.java:242)
        at org.apache.log4j.LogManager.getLogger(LogManager.java:188)
        at org.apache.log4j.Logger.getLogger(Logger.java:117)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.<init>(ReplicatorTemplate.java:44)
        at net.sf.beanlib.provider.BeanTransformer.<init>(BeanTransformer.java:185)
        at net.sf.beanlib.provider.BeanPopulator.<init>(BeanPopulator.java:134)
        at net.sf.beanlib.provider.BeanPopulator$Factory.newBeanPopulator(BeanPopulator.java:123)
        at net.sf.beanlib.provider.BeanPopulator$Factory.newBeanPopulator(BeanPopulator.java:1)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:175)
        at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:196)
        at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:77)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:126)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120)
        at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:255)
        at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:231)
        at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:185)
        at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:325)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:179)
        at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:196)
        at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:77)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:126)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120)
        at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:255)
        at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:231)
        at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:185)
        at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:325)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:179)
        at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:196)
        at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:77)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:126)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120)
        at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:255)
        at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:231)
        at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:185)
        at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:325)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:179)
        at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:196)
        at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:77)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:126)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120)
        at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:255)
        at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:231)
        at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:185)
        at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:325)
        at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:179)
        at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:196)

     
    • Joe D. Velopar

      Joe D. Velopar - 2008-12-15

      Interesting, and thanks for reporting this.

      For now, you can use a custom transformer for Calendar objects, like so:

      public class CalendarTransformer implements CustomBeanTransformerSpi {
          public static class Factory implements CustomBeanTransformerSpi.Factory {
              @Override
              public CustomBeanTransformerSpi newCustomBeanTransformer(BeanTransformerSpi contextBeanTransformer) {
                  return new CalendarTransformer();
              }
          }

          @Override
          public <T> boolean isTransformable(Object from, Class<T> toClass, PropertyInfo propertyInfo) {
              return from instanceof Calendar
                  && Calendar.class.isAssignableFrom(toClass);
          }

          @Override
          public <T> T transform(Object in, Class<T> toClass, PropertyInfo propertyInfo) {
              Calendar cal = (Calendar)in;
              return (T)cal.clone();
          }
      }

      =====
      Usages
      =====
      If you are replicating via Hibernate3BeanReplicator (for Hibernate objects), you can plug in this custom transformer like:

                  T from = ...
                  T to = new Hibernate3BeanReplicator()
                                   .initCustomTransformerFactory(new CalendarTransformer.Factory())
                                   .copy(from)
                                   ;

      If you are replicating via BeanReplicator (for simple pojo's), you can plug in the same custom transform like:

                  T from = ...
                  T to = new BeanReplicator(new BeanTransformer(new CalendarTransformer.Factory())).replicateBean(from);

      In the future, I will provide native support of Calendar in Beanlib.

      Cheers,
      Hanson

       
    • Andrew

      Andrew - 2008-12-15

      That worked a treat.  Thank you so much.

      Andrew

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.