Hi good catch, has been fixed upstream: https://github.com/apache/tomee/blob/master/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java#L363
Romain Manni-Bucau @rmannibucau <https://twitter.com/rmannibucau> | Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber <http://www.tomitribe.com> 2015-11-09 16:49 GMT-08:00 chr...@rmt.com.au <chr...@rmt.com.au>: > I am getting a NullPointerException from > PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform() when > running in Java 8. > > I have a command line application using openejb-core-4.7.2 and running in > Java 8, so when starting the app it runs using the javaagent > openejb-javaagent.jar. > > This app uses JPA, but also has some legacy code that gets jdbc connections > using a BasicDataSource. > Now whenever it gets a jdbc connection the javaagent seems to be doing some > manipulations of the byte code and a NullPointerException is thrown from > org.apache.openejb.persistence.PersistenceUnitInfoImpl from the method > PersistenceClassFileTransformer.transform at the line that reads 'String > replace = className.replace('/', '.');'. So className appears to be null. > > This is the method where the exception comes from > public byte[] transform(ClassLoader classLoader, String className, Class<?> > classBeingRedefined, ProtectionDomain protectionDomain, byte[] > classfileBuffer) throws IllegalClassFormatException { > String replace = className.replace('/', '.'); > return > > PersistenceUnitInfoImpl.isServerClass(replace)?classfileBuffer:this.classTransformer.transform(classLoader, > replace, classBeingRedefined, protectionDomain, classfileBuffer); > } > > When running this same app in Java 7 no exceptions are thrown. > > This is the stack trace: > > java.lang.NullPointerException > at > > org.apache.openejb.persistence.PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform(PersistenceUnitInfoImpl.java:358) > at > > org.apache.openejb.persistence.PersistenceBootstrap$Transformer.transform(PersistenceBootstrap.java:429) > at > sun.instrument.TransformerManager.transform(TransformerManager.java:188) > at > sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) > at sun.misc.Unsafe.defineAnonymousClass(Native Method) > at > > java.lang.invoke.InvokerBytecodeGenerator.loadAndInitializeInvokerClass(InvokerBytecodeGenerator.java:284) > at > > java.lang.invoke.InvokerBytecodeGenerator.loadMethod(InvokerBytecodeGenerator.java:276) > at > > java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618) > at > java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654) > at > > java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:247) > at > > java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187) > at > > java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176) > at > java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83) > at > java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:103) > at > java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:108) > at > java.lang.invoke.LambdaForm$NamedFunction.resolve(LambdaForm.java:1078) > at > > java.lang.invoke.DirectMethodHandle$Lazy.<clinit>(DirectMethodHandle.java:688) > at > > java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:231) > at > > java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187) > at > > java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176) > at > java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83) > at > > java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1656) > at > > java.lang.invoke.MethodHandles$Lookup.getDirectMethod(MethodHandles.java:1601) > at > java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:778) > at > > java.lang.invoke.BoundMethodHandle$Factory.makeCbmhCtor(BoundMethodHandle.java:817) > at > > java.lang.invoke.BoundMethodHandle$Factory.makeCtors(BoundMethodHandle.java:772) > at > > java.lang.invoke.BoundMethodHandle$SpeciesData.initForBootstrap(BoundMethodHandle.java:358) > at > > java.lang.invoke.BoundMethodHandle$SpeciesData.<clinit>(BoundMethodHandle.java:447) > at > java.lang.invoke.BoundMethodHandle.<clinit>(BoundMethodHandle.java:829) > at > java.lang.invoke.LambdaForm.createIdentityForms(LambdaForm.java:1778) > at java.lang.invoke.LambdaForm.<clinit>(LambdaForm.java:1833) > at > > java.lang.invoke.DirectMethodHandle.makePreparedLambdaForm(DirectMethodHandle.java:222) > at > > java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:187) > at > > java.lang.invoke.DirectMethodHandle.preparedLambdaForm(DirectMethodHandle.java:176) > at > java.lang.invoke.DirectMethodHandle.make(DirectMethodHandle.java:83) > at > > java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1656) > at > > java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(MethodHandles.java:1613) > at > > java.lang.invoke.MethodHandles$Lookup.getDirectMethodForConstant(MethodHandles.java:1798) > at > > java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1747) > at > > java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477) > at > > sun.security.util.AbstractAlgorithmConstraints.loadAlgorithmsMap(AbstractAlgorithmConstraints.java:50) > at > > sun.security.util.AbstractAlgorithmConstraints.getAlgorithms(AbstractAlgorithmConstraints.java:79) > at > > sun.security.util.DisabledAlgorithmConstraints.<init>(DisabledAlgorithmConstraints.java:77) > at > > sun.security.ssl.SSLAlgorithmConstraints.<clinit>(SSLAlgorithmConstraints.java:50) > at > sun.security.ssl.ProtocolVersion.<clinit>(ProtocolVersion.java:114) > at > > sun.security.ssl.SSLContextImpl$AbstractSSLContext.<clinit>(SSLContextImpl.java:453) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:264) > at java.security.Provider$Service.getImplClass(Provider.java:1634) > at java.security.Provider$Service.newInstance(Provider.java:1592) > at sun.security.jca.GetInstance.getInstance(GetInstance.java:236) > at sun.security.jca.GetInstance.getInstance(GetInstance.java:164) > at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156) > at > com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1590) > at > > com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323) > at > > com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991) > at > > com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827) > at > > com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012) > at > > org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) > at > > org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) > at > > org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) > at > > org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) > at > > org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) > at > > org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) > > > > > -- > View this message in context: > http://tomee-openejb.979440.n4.nabble.com/NullPointer-from-PersistenceUnitInfoImpl-when-running-in-Java-8-tp4676755.html > Sent from the TomEE Dev mailing list archive at Nabble.com. >