You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Marius Kruger <am...@gmail.com> on 2010/09/23 23:46:52 UTC

NPE in TempClassLoader

the error asked so nicely to send the stacktrace below.

I'm trying to load an alternative ejb implementation for testing
purposes similar to:

http://openejb.979440.n4.nabble.com/Is-it-possible-to-insert-a-mock-implementation-of-EJB-that-is-being-referenced-using-EJB-annotation-td981106.html

so I'm trying to specify my alternative in the ejb-jar.xml  (in
src/test/resources/META-INF)

<?xml version="1.0" encoding="ASCII"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
  <display-name>DDS Service</display-name>
  <enterprise-beans><session><ejb-name>za.co.enerweb.dds.ejb.MockEmailSender</ejb-name></session></enterprise-beans>
</ejb-jar>

(using openejb-core-3.1.3-20100806.053716-36.jar)

==
ERROR - FATAL ERROR: Unknown error in Assembler.  Please send the
following stack trace and this message to users@openejb.apache.org :
 java.lang.NullPointerException
	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:90)
	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:66)
	at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1055)
	at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:684)
	at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:194)
	at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:248)
	at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:612)
	at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:562)
	at org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:391)
	at org.apache.openejb.assembler.classic.Assembler.getOpenEjbConfiguration(Assembler.java:300)
	at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:279)
	at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:125)
	at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:60)
	at org.apache.openejb.OpenEJB.init(OpenEJB.java:271)
	at org.apache.openejb.OpenEJB.init(OpenEJB.java:250)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
	at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:71)
	at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:53)
	at org.apache.openejb.client.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:42)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at za.co.enerweb.toolbox.openejb.AbstractOpenEjbTest.inject(AbstractOpenEjbTest.java:49)
	at za.co.enerweb.toolbox.openejb.AbstractOpenEjbTest.injectContext(AbstractOpenEjbTest.java:34)
	at za.co.enerweb.toolbox.openejb.AbstractOpenEjbTest.<init>(AbstractOpenEjbTest.java:23)
	at za.co.enerweb.emailservice.AbstractSendEmailTest.<init>(AbstractSendEmailTest.java:23)
	at za.co.enerweb.dds.ejb.DdsEmailSenderEjbTest.<init>(DdsEmailSenderEjbTest.java:20)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:202)
	at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:251)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:248)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

FATAL - OpenEJB has encountered a fatal error and cannot be started:
Assembler failed to build the container system.
org.apache.openejb.OpenEJBException: java.lang.NullPointerException: null
	at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:293)
	at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:125)
	at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:60)
	at org.apache.openejb.OpenEJB.init(OpenEJB.java:271)
	at org.apache.openejb.OpenEJB.init(OpenEJB.java:250)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
	at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:71)
	at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:53)
	at org.apache.openejb.client.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:42)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at za.co.enerweb.toolbox.openejb.AbstractOpenEjbTest.inject(AbstractOpenEjbTest.java:49)
	at za.co.enerweb.toolbox.openejb.AbstractOpenEjbTest.injectContext(AbstractOpenEjbTest.java:34)
	at za.co.enerweb.toolbox.openejb.AbstractOpenEjbTest.<init>(AbstractOpenEjbTest.java:23)
	at za.co.enerweb.emailservice.AbstractSendEmailTest.<init>(AbstractSendEmailTest.java:23)
	at za.co.enerweb.dds.ejb.DdsEmailSenderEjbTest.<init>(DdsEmailSenderEjbTest.java:20)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:202)
	at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:251)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:248)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.NullPointerException
	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:90)
	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:66)
	at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1055)
	at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:684)
	at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:194)
	at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:248)
	at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:612)
	at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:562)
	at org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:391)
	at org.apache.openejb.assembler.classic.Assembler.getOpenEjbConfiguration(Assembler.java:300)
	at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:279)
	... 43 more


-- 
<>< Marius ><>

Re: NPE in TempClassLoader

Posted by David Blevins <da...@visi.com>.
On Sep 23, 2010, at 2:46 PM, Marius Kruger wrote:

> the error asked so nicely to send the stacktrace below.
> 
> I'm trying to load an alternative ejb implementation for testing
> purposes similar to:
> 
> http://openejb.979440.n4.nabble.com/Is-it-possible-to-insert-a-mock-implementation-of-EJB-that-is-being-referenced-using-EJB-annotation-td981106.html
> 
> so I'm trying to specify my alternative in the ejb-jar.xml  (in
> src/test/resources/META-INF)
> 
> <?xml version="1.0" encoding="ASCII"?>
> <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
>  <display-name>DDS Service</display-name>
>  <enterprise-beans><session><ejb-name>za.co.enerweb.dds.ejb.MockEmailSender</ejb-name></session></enterprise-beans>
> </ejb-jar>
> 
> (using openejb-core-3.1.3-20100806.053716-36.jar)
> 
> ==
> ERROR - FATAL ERROR: Unknown error in Assembler.  Please send the
> following stack trace and this message to users@openejb.apache.org :
> java.lang.NullPointerException
> 	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:90)
> 	at org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:66)
> 	at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1055)

Duplicated this one and it's a simple matter of the ejb-name specified in xml not matching anything that was discovered.  Long story short, per spec the ejb-name of an annotated bean defaults to clazz.getSimpleName() rather than clazz.getName().  So things weren't lining up.  I cleaned up all the exception handling around this:

  OPENEJB-1373: Validation: <ejb-class> omitted with no corresponding annotated bean
  OPENEJB-1372: Default openejb.descriptors.output to true when there are validation failures

We're re-rolling the 3.1.3 binaries right now so these changes should be there.

-David