[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-1365) NPE AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372) when trying to load a class defined in a signed/sealed JAR
Wolfgang Fahl (JIRA)
noreply at atlassian.com
Sat Aug 26 10:22:25 EDT 2006
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1365?page=comments#action_24121 ]
Wolfgang Fahl commented on HHH-1365:
------------------------------------
The patch from Martin Schulz did not work for me immediately since I got an error like:
Caused by: java.lang.SecurityException: class "org.hibernate.proxy.HibernateProxy$$FastClassByCGLIB$$76d69142"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:611)
at java.lang.ClassLoader.defineClass(ClassLoader.java:532)
... 66 more
Which is not caused in the Enhanser but in FastClass. So going by the same pattern started by Martin
i added:
RCS file: /usr/cvsroot/Source/Java/cglib/src/proxy/net/sf/cglib/reflect/FastClass.java,v
retrieving revision 1.1
diff -r1.1 FastClass.java
59a60
> this.setProtDomainSrc(type);
Now the above error is gone - Thank you Martin!
> NPE AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372) when trying to load a class defined in a signed/sealed JAR
> ----------------------------------------------------------------------------------------------------------------------------------
>
> Key: HHH-1365
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1365
> Project: Hibernate3
> Type: Bug
> Versions: 3.1
> Environment: Java1.5.06 Ant1.7alpha, hibernate 3.1
> Reporter: Steve Loughran
> Priority: Minor
> Attachments: cglib-src-2.1_3.patch
>
>
> I'm testing what happens to hibernate when running against a signed JAR. The answer is: most tests pass. What fails is this test (Apache 2.0 license, BTW)
> public void testDetachedObject() throws Exception {
> Event event = createTestEvent();
> session.save(event);
> session.flush();
> closeSession();
> //here the event is detached.
> //we change it outside an operation.
> String text = "modified";
> event.setText(text);
> session = getSessionFactory().openSession();
> Event merged=(Event) session.merge(event);
> assertEquals(event, merged);
> session.flush();
> closeSession();
> session = getSessionFactory().openSession();
> Event loaded = (Event) session.load(Event.class, event.getKey());
> assertEquals(text, loaded.getText());
> assertEquals(event, loaded);
> }
> the session.load operation is failing, with the short stack trace of:
> java.lang.NullPointerException
> at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
> at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
> at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
> at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
> at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
> at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:869)
> at org.hibernate.impl.SessionImpl.load(SessionImpl.java:788)
> at org.hibernate.impl.SessionImpl.load(SessionImpl.java:781)
> at d1.persist.test.SessionTest.testDetachedObject(SessionTest.java:155)
> The root cause is probably contained in the info that gets printed when the session starts up, complaining that things cant be added to sealed classes
> [junit] 2261 ERROR org.hibernate.proxy.BasicLazyInitializer - CGLIB Enhancement failed: d1.persist.Event
> [junit] net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
> [junit] at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
> [junit] at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
> [junit] at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
> [junit] at org.hibernate.proxy.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:126)
> [junit] at org.hibernate.proxy.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:41)
> [junit] at org.hibernate.tuple.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:161)
> [junit] at org.hibernate.tuple.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:131)
> [junit] at org.hibernate.tuple.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
> [junit] at org.hibernate.tuple.TuplizerLookup.create(TuplizerLookup.java:64)
> [junit] at org.hibernate.tuple.EntityMetamodel.<init>(EntityMetamodel.java:257)
> [junit] at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:412)
> [junit] at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:108)
> [junit] at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
> [junit] at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:215)
> [junit] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1154)
> [junit] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:375)
> [junit] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:533)
> [junit] at org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.java:109)
> [junit] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:155)
> [junit] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:82)
> [junit] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
> [junit] at d1.persist.PersistTools.createManagerFactory(PersistTools.java:82)
> [junit] at d1.persist.PersistTools.createDefaultManagerFactory(PersistTools.java:76)
> [junit] at d1.persist.test.Ejb3TestBase.setUp(Ejb3TestBase.java:27)
> [junit] at junit.framework.TestCase.runBare(TestCase.java:125)
> [junit] at junit.framework.TestResult$1.protect(TestResult.java:106)
> [junit] at junit.framework.TestResult.runProtected(TestResult.java:124)
> [junit] at junit.framework.TestResult.run(TestResult.java:109)
> [junit] at junit.framework.TestCase.run(TestCase.java:118)
> [junit] at junit.framework.TestSuite.runTest(TestSuite.java:208)
> [junit] at junit.framework.TestSuite.run(TestSuite.java:203)
> [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:328)
> [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:736)
> [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:605)
> [junit] Caused by: java.lang.reflect.InvocationTargetException
> [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [junit] at java.lang.reflect.Method.invoke(Method.java:585)
> [junit] at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
> [junit] at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
> [junit] ... 33 more
> [junit] Caused by: java.lang.SecurityException: class "d1.persist.Event$$EnhancerByCGLIB$$55c8eae8_2"'s signer information does not match signer information of other classes in the same package
> [junit] at java.lang.ClassLoader.checkCerts(ClassLoader.java:775)
> [junit] at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487)
> [junit] at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
> [junit] ... 39 more
> [junit] 2262 WARN org.hibernate.tuple.PojoEntityTuplizer - could not create proxy factory for:d1.persist.Event
> [junit] org.hibernate.HibernateException: CGLIB Enhancement failed: d1.persist.Event
> [junit] at org.hibernate.proxy.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:132)
> [junit] at org.hibernate.proxy.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:41)
> [junit] at org.hibernate.tuple.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:161)
> [junit] at org.hibernate.tuple.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:131)
> [junit] at org.hibernate.tuple.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
> [junit] at org.hibernate.tuple.TuplizerLookup.create(TuplizerLookup.java:64)
> [junit] at org.hibernate.tuple.EntityMetamodel.<init>(EntityMetamodel.java:257)
> [junit] at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:412)
> [junit] at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:108)
> [junit] at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
> [junit] at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:215)
> [junit] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1154)
> [junit] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:375)
> [junit] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:533)
> [junit] at org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.java:109)
> [junit] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:155)
> [junit] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:82)
> [junit] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
> [junit] at d1.persist.PersistTools.createManagerFactory(PersistTools.java:82)
> [junit] at d1.persist.PersistTools.createDefaultManagerFactory(PersistTools.java:76)
> [junit] at d1.persist.test.Ejb3TestBase.setUp(Ejb3TestBase.java:27)
> [junit] at junit.framework.TestCase.runBare(TestCase.java:125)
> [junit] at junit.framework.TestResult$1.protect(TestResult.java:106)
> [junit] at junit.framework.TestResult.runProtected(TestResult.java:124)
> [junit] at junit.framework.TestResult.run(TestResult.java:109)
> [junit] at junit.framework.TestCase.run(TestCase.java:118)
> [junit] at junit.framework.TestSuite.runTest(TestSuite.java:208)
> [junit] at junit.framework.TestSuite.run(TestSuite.java:203)
> [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:328)
> [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:736)
> [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:605)
> [junit] Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
> [junit] at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
> [junit] at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
> [junit] at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
> [junit] at org.hibernate.proxy.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:126)
> [junit] ... 30 more
> [junit] Caused by: java.lang.reflect.InvocationTargetException
> [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [junit] at java.lang.reflect.Method.invoke(Method.java:585)
> [junit] at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
> [junit] at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
> [junit] ... 33 more
> [junit] Caused by: java.lang.SecurityException: class "d1.persist.Event$$EnhancerByCGLIB$$55c8eae8_2"'s signer information does not match signer information of other classes in the same package
> [junit] at java.lang.ClassLoader.checkCerts(ClassLoader.java:775)
> [junit] at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487)
> [junit] at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
> [junit] ... 39 more
> No doubt there is some way to configure hibernate to create proxies in a different package, and I shall seek that option out. All I want to note here is that NPEs are not the best way to report failure.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list