Repository navigation
FELIX-6869 - Run the HTTP integration tests on a current JDK and on this framework - #571
Merged
Merged
Conversation
paulrutter
force-pushed
the
FELIX-6869-http-its-jdk27
branch
from
October 9, 2026 07:51
9167320 to
a9351b3
Compare
paulrutter
changed the base branch from
master
to
fix-filterimpl-wrappercapability
October 9, 2026 07:52
paulrutter
added this pull request to stack #572
October 9, 2026 07:56
paulrutter
force-pushed
the
FELIX-6869-http-its-jdk27
branch
from
October 9, 2026 07:57
a9351b3 to
a74e1d9
Compare
The integration tests cannot run on JDK 27. JettySniHostCheckIT times out
after 30 seconds waiting for an HttpService that never registers, and the
container log gives the reason:
org.apache.aries.spifly.dynamic.bundle [Events.Framework] ERROR
java.lang.ClassFormatError: Weaving hook failed.
Caused by: java.lang.IllegalArgumentException:
Unsupported class file major version 71
AbstractJettyTestSupport.spifly() provisions ASM as separate bundles pinned to
9.7, and Aries SpiFly wires to them through its import of
org.objectweb.asm;version="[9.6,10)". ASM 9.7 only knows up to class file 67
(Java 23), so on JDK 27 SpiFly's weaving hook throws for every class it is
asked to weave and Jetty never finishes starting.
The ASM bundles move to 9.10.1, which declares V27 = 71 and still satisfies
SpiFly's import range, so SpiFly itself does not change. Bumping SpiFly to
1.3.8 instead does not work: its imports changed and the test container is then
left with unresolved bundles.
Nothing here is specific to SNI or TLS. The test keystore is current
(PBES2/AES-256, 2048-bit RSA, SHA384withRSA) and Jetty starts normally up to
the weaving failure; JettySniHostCheckIT is just the test that waits on a
service that never arrives.
Verified on JDK 21: the full jetty12 build passes, 21 integration tests, and
the full jetty build passes, 4 integration tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…repository
The integration tests pinned org.apache.felix.framework 7.0.5, so pax-exam
always started them on that released framework rather than the one built here.
They therefore could not catch a framework regression, and did not: the
FilterImpl.WrapperCapability fix this change is stacked on repairs
Filter.matches(Map), which had been throwing for any non-empty map, and with
that bug present JettySniHostCheckIT fails with 404 instead of 200 because the
whiteboard servlet never registers. On 7.0.5 it passes, which is why nobody
noticed.
The version becomes a felix.framework.version property, still defaulting to the
latest release so each module continues to build on its own, and CI overrides
it with the version it just built:
FRAMEWORK_VERSION=$(mvn ... help:evaluate -Dexpression=project.version ...)
mvn ... -Dfelix.framework.version=$FRAMEWORK_VERSION
For that to work the framework has to be installed first, so the Felix
Framework step moves ahead of Felix HTTP and runs when either framework or http
changed. It already used install rather than verify for the TCK, which resolves
the framework from the repository for the same reason.
Verified against the framework built here, 7.1.0-SNAPSHOT: jetty12 passes 21
integration tests and jetty passes 4.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
paulrutter
force-pushed
the
FELIX-6869-http-its-jdk27
branch
from
October 9, 2026 08:01
a74e1d9 to
6c02bcc
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
FELIX-6869. Was stacked on #554, which is now merged; rebased onto master and targets it directly. The second commit depends on the
FilterImplfix from #554.1. The integration tests cannot run on JDK 27
JettySniHostCheckITtimes out after 30 seconds waiting for anHttpServicethat never registers; the pax-exam container log gives the reason:AbstractJettyTestSupport.spifly()provisions ASM as separate bundles pinned to 9.7, and Aries SpiFly wires to them through itsorg.objectweb.asm;version="[9.6,10)"import. ASM 9.7 only knows up to class file 67 (Java 23), so on JDK 27 SpiFly's weaving hook throws for every class it is asked to weave and Jetty never finishes starting.The five ASM bundles move 9.7 → 9.10.1, which declares
V27 = 71and still satisfies SpiFly's import range, so SpiFly itself is untouched. Bumping SpiFly to 1.3.8 instead does not work: itsImport-Packagechanged and the container is then left withThere are unresolved bundles.Nothing here is specific to SNI or TLS — the test keystore is current (PBES2/AES-256, 2048-bit RSA, SHA384withRSA) and Jetty 12.1.14 starts normally up to the weaving failure.
JettySniHostCheckITis just the test that waits on a service that never arrives.2. The integration tests ran on a released framework, not this one
http/jetty/pom.xmlandhttp/jetty12/pom.xmlpinnedorg.apache.felix.framework7.0.5, so pax-exam always started them on that framework rather than the one built here. They therefore could not catch a framework regression — and did not:JettySniHostCheckITexpected:<200> but was:<404>FilterImplfixFilter.matches(Map)was throwing for any non-empty map, so the whiteboard servlet never registered. That is the regression #554 fixed. Switching the ITs to the in-repo framework before that fix landed turned them red, which is why this PR waited on it.The version becomes a
felix.framework.versionproperty, still defaulting to the latest release so each module continues to build standalone, and CI overrides it with the version it just built:For that the framework must be installed first, so the
Felix Frameworkstep moves ahead ofFelix HTTPand runs when eitherframeworkorhttpchanged — otherwise an http-only PR would find nothing to resolve. It already usedinstallrather thanverifyfor the TCK, for the same underlying reason.Verification
http/jetty12verifyagainst framework 7.1.0-SNAPSHOThttp/jettyverifyagainst framework 7.1.0-SNAPSHOTFilterTest(from #554)JDK 27 itself is verified indirectly — I have no 27 locally — by ASM 9.7's
Opcodestopping out atV23 = 67while 9.10.1 declaresV27 = 71. The original failure is this run on #433, which added 27 to the matrix and has since removed it pending this fix.Still open
The pinning is repo-wide and worse elsewhere:
scrpins framework 7.0.1,rootcauseandsystemready6.0.5,eventadmin/impl6.0.3,configadminandhealthcheck/core7.0.5, plus siblings such asframework.security2.8.3 — an artifact the 8.0.0 line removes. Worth its own issue; this PR only covers the two HTTP modules.🤖 Generated with Claude Code