OS: Windows
Java Version: Java 25
Jeety Version: 12.1.13
Lucee Version: 7.1.2.184-RC
Write up compiled by Google Gemini.
Environment
- Lucee Version:
7.1.2.184-RC(upgraded in-place from7.1.1.16-RC) - Java Version:
JDK 25.0.4+7(64-bit) - Servlet Container:
Eclipse Jetty 12.1.12(ee11) - OS:
Windows 10 / 11 (64-bit) - JDBC Driver / Extension: MariaDB JDBC Extension
3.5.3(F2FA5DB2-0C27-499C-B1171D2D812FDAF9,org.mariadb.jdbc.Driver/mariadb-java-client:3.5.3)
Description
After upgrading Lucee from 7.1.1.16-RC to 7.1.2.184-RC (and removing/updating extensions in the Lucee Administrator without a full JVM restart), executing queryExecute() when the datasource connection pool creates a new MariaDB JDBC connection throws a java.lang.NullPointerException inside Apache Felix (org.apache.felix.framework.BundleRevisionImpl.getResourcesLocal(BundleRevisionImpl.java:558)):
text
lucee.runtime.exp.PageRuntimeException: Cannot invoke “org.apache.felix.framework.cache.Content.hasEntry(String)” because the return value of “java.util.List.get(int)” is null
Concurrently, lucee-server/context/logs/felix.log is flooded with:
text
ERROR:
Unable to get module class path.
What Happens Under the Hood
- During the in-place upgrade from
7.1.1.16-RCto7.1.2.184-RC(and subsequent extension cleanup indeploy.log), Lucee updates/removes.lexextensions and OSGi bundles while the JVM is running. - When
DatasourceConnectionFactory.create()invokesorg.mariadb.jdbc.Driver.connect(), the MariaDB driver (3.5.3) callsorg.mariadb.jdbc.Configuration.loadCodecs(), which usesjava.util.ServiceLoaderto look upMETA-INF/services/org.mariadb.jdbc.plugin.Codecvia the OSGiBundleClassLoader. BundleWiringImpl$BundleClassLoader.getResources()delegates toBundleRevisionImpl.getResourcesLocal(BundleRevisionImpl.java:558).- Because the underlying OSGi bundle revision’s content path failed to resolve (logging
Unable to get module class path.infelix.log),getContentPath()contains anullentry in itsList<Content>, causingcontentPath.get(i).hasEntry(name)atBundleRevisionImpl.java:558to throwNullPointerException.
Relevant Log Entries
1. deploy.log
text
“INFO”,“qtp93314457-62553”,“10/23/2026”,“10:39:06”,“”,“Update-Engine”,“Installing Lucee version [7.1.2.184-RC] (previous version was [7.1.1.16-RC])”
…
“INFO”,“qtp93314457-62553”,“10/23/2026”,“10:39:09”,“”,“request”,“Successfully installed the following extensions: 37C61C0A-5D7E-4256-8572639BE0CF5838;groupId=org.lucee;artifactId=esapi-extension;version=3.1.0.1, 97EB5427-F051-4684-91EBA6DBB5C5203F;groupId=org.lucee;artifactId=scheduler-classic-extension;version=1.0.0.2, 212BA548-F15A-4EBD-8B1EEDF8DD8A844D;groupId=org.lucee;artifactId=mail-extension;version=1.1.0.17;since=7.1.0.0, 8D7FB0DF-08BB-1589-FE3975678F07DB17;groupId=org.lucee;artifactId=compress-extension;version=2.1.0.3, CED6227E-0F49-6367-A68D21AACA6B07E8;groupId=org.lucee;artifactId=administrator-extension;version=1.0.0.9, B737ABC4-D43F-4D91-8E8E973E37C40D1B;groupId=org.lucee;artifactId=image-extension;version=3.1.0.11”
…
“INFO”,“qtp93314457-4909”,“10/23/2026”,“11:47:48”,“”,“extension”,“Found the extension [F2FA5DB2-0C27-499C-B1171D2D812FDAF9;symbolic-name=F2FA5DB2-0C27-499C-B1171D2D812FDAF9;version=3.5.3] in the installed folder that is not present in the configuration in any version, so we will uninstall it”
“INFO”,“qtp93314457-4909”,“10/23/2026”,“11:47:48”,“”,“extension”,“remove admin/dbdriver/MariaDB.cfc”
“INFO”,“qtp93314457-4909”,“10/23/2026”,“11:47:48”,“”,“extension”,“Remove JDBC Driver [class:org.mariadb.jdbc.Driver;name:mariadb-java-client;version:3.5.3;] from extension [MariaDB:3.5.3]”
“INFO”,“qtp93314457-4909”,“10/23/2026”,“11:47:48”,“”,“extension”,“removed extension [F2FA5DB2-0C27-499C-B1171D2D812FDAF9;symbolic-name=F2FA5DB2-0C27-499C-B1171D2D812FDAF9;version=3.5.3]”
2. felix.log
text
ERROR [Fri Oct 23 10:39:07 CDT 2026]:
Error starting D:\Jetty-Bases\Jetty-Base-12\lucee-server\bundles\owasp-java-html-sanitizer-20260313.1.jar
ERROR [Fri Oct 23 10:39:29 CDT 2026]:
Unable to get module class path.
ERROR [Fri Oct 23 10:39:29 CDT 2026]:
Unable to get module class path.
3. Full Stack Trace (application.log)
text
lucee.runtime.exp.NativeException: lucee.runtime.exp.PageRuntimeException:Cannot invoke “org.apache.felix.framework.cache.Content.hasEntry(String)” because the return value of “java.util.List.get(int)” is null
at lucee.commons.lang.ExceptionUtil.toIOException(ExceptionUtil.java:249)
at lucee.runtime.db.DatasourceConnectionFactory.create(DatasourceConnectionFactory.java:67)
at lucee.runtime.db.DatasourceConnectionFactory.create(DatasourceConnectionFactory.java:22)
at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:68)
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:557)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:299)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:231)
at lucee.runtime.config.DatasourceConnPool.borrowObject(DatasourceConnPool.java:41)
at lucee.runtime.db.DatasourceManagerImpl.getConnection(DatasourceManagerImpl.java:85)
at lucee.runtime.tag.Query.executeDatasoure(Query.java:1159)
at lucee.runtime.tag.Query._doEndTag(Query.java:714)
at lucee.runtime.tag.Query.doEndTag(Query.java:577)
at lucee.runtime.functions.query.QueryExecute.call(QueryExecute.java:93)
at lucee.runtime.functions.query.QueryExecute.call(QueryExecute.java:57)
…
Caused by: lucee.runtime.exp.PageRuntimeException: Cannot invoke “org.apache.felix.framework.cache.Content.hasEntry(String)” because the return value of “java.util.List.get(int)” is null
at lucee.runtime.op.Caster.toPageRuntimeException(Caster.java:3631)
at lucee.runtime.db.DataSourceSupport.getConnection(DataSourceSupport.java:110)
at lucee.runtime.db.DatasourceConnectionFactory.create(DatasourceConnectionFactory.java:61)
… 163 more
Caused by: lucee.runtime.exp.NativeException: Cannot invoke “org.apache.felix.framework.cache.Content.hasEntry(String)” because the return value of “java.util.List.get(int)” is null
at org.apache.felix.framework.BundleRevisionImpl.getResourcesLocal(BundleRevisionImpl.java:558)
at org.apache.felix.framework.BundleWiringImpl.findResourcesByDelegation(BundleWiringImpl.java:1201)
at org.apache.felix.framework.BundleWiringImpl.getResourcesByDelegation(BundleWiringImpl.java:1111)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.getResources(BundleWiringImpl.java:2550)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1074)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1099)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1142)
at java.base/java.util.ServiceLoader$1.hasNext(ServiceLoader.java:1164)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1246)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
at org.mariadb.jdbc.Configuration.loadCodecs(Configuration.java:2283)
at org.mariadb.jdbc.Configuration.buildUrl(Configuration.java:1170)
at org.mariadb.jdbc.Configuration$Builder.build(Configuration.java:3571)
at org.mariadb.jdbc.Configuration.parseInternal(Configuration.java:732)
at org.mariadb.jdbc.Configuration.parse(Configuration.java:674)
at org.mariadb.jdbc.Driver.connect(Driver.java:99)
at org.mariadb.jdbc.Driver.connect(Driver.java:29)
at lucee.runtime.db.DataSourceSupport._getConnection(DataSourceSupport.java:124)
at lucee.runtime.db.DataSourceSupport.getConnection(DataSourceSupport.java:106)
… 164 more
Caused by: java.lang.NullPointerException: Cannot invoke “org.apache.felix.framework.cache.Content.hasEntry(String)” because the return value of “java.util.List.get(int)” is null
… 183 more
Also note one additional error currently firing in D:\Jetty-Bases\Jetty-Base-12\lucee-server\context\logs\application.log every minute from Lucee’s background SpoolerEngineImpl:
D:\Jetty-Bases\Jetty-Base-12\lucee-server\context\remote-client\open\*.tsk(java.nio.file.NoSuchFileException) — if you’d like me to check or clean up those orphaned.tskreferences or include that in a separate ticket, just let me know!