I have the gerrit.war file, version 3.12.2.
I have the Saml plugin downloaded from the master branch installed at /gerrit/lib and that is version 2a24daff4f. It seems it's only available on the master branch from
When I start gerrit, I see the call stack (as pasted below) in the error logs.
I've searched the google group conversations and am not landing on anything that directly applies. I believe I have version harmony between gerrit and the SAML plugin.
How can I resolve this?
[2025-09-24T14:37:56.188Z] [main] INFO com.google.gerrit.server.git.WorkQueue : Adding metrics for 'SshCommandStart' queue
[2025-09-24T14:37:56.219Z] [main] WARN com.google.gerrit.sshd.HostKeyProvider : Only an ssh-rsa host key type exists. This is a weak key type, consider adding newer key types by running gerrit init.
[2025-09-24T14:37:56.316Z] [main] INFO com.google.gerrit.server.git.WorkQueue : Adding metrics for 'SSH-Stream-Worker' queue
[2025-09-24T14:37:56.317Z] [main] INFO com.google.gerrit.server.git.WorkQueue : Adding metrics for 'SSH-Interactive-Worker' queue
[2025-09-24T14:37:56.318Z] [main] INFO com.google.gerrit.server.git.WorkQueue : Adding metrics for 'SSH-Batch-Worker' queue
[2025-09-24T14:37:56.318Z] [main] INFO com.google.gerrit.server.git.WorkQueue : Adding metrics for 'MigrateExternalIdCase' queue
[2025-09-24T14:37:56.525Z] [main] INFO org.eclipse.jetty.util.log : Logging initialized @5588ms to org.eclipse.jetty.util.log.Slf4jLog
[2025-09-24T14:37:56.615Z] [main] ERROR com.google.gerrit.pgm.Daemon : Unable to start daemon
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) [Guice/ErrorInjectingConstructor]: IllegalArgumentException: Unable to instantiate front-end HTTP Filter SamlWebFilter
at JettyServer.<init>(JettyServer.java:218)
at JettyModule.configure(JettyModule.java:31)
while locating JettyServer
Learn more:
https://github.com/google/guice/wiki/ERROR_INJECTING_CONSTRUCTORCaused by: IllegalArgumentException: Unable to instantiate front-end HTTP Filter SamlWebFilter
at JettyServer.makeContext(JettyServer.java:562)
at JettyServer.makeContext(JettyServer.java:504)
at JettyServer.<init>(JettyServer.java:258)
at JettyServer$$FastClassByGuice$$44e64881.GUICE$TRAMPOLINE(<generated>)
at JettyServer$$FastClassByGuice$$44e64881.apply(<generated>)
at DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
at ConstructorInjector.provision(ConstructorInjector.java:114)
at ConstructorInjector.construct(ConstructorInjector.java:91)
at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at SingletonScope$1.get(SingletonScope.java:169)
at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:213)
at InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:186)
at InternalInjectorCreator.build(InternalInjectorCreator.java:113)
at InjectorImpl.createChildInjector(InjectorImpl.java:240)
at Daemon.createHttpdInjector(Daemon.java:694)
at Daemon.initHttpd(Daemon.java:645)
at Daemon.start(Daemon.java:412)
at Daemon.run(Daemon.java:303)
at AbstractProgram.main(AbstractProgram.java:62)
at java.base/DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/Method.invoke(Method.java:580)
at GerritLauncher.invokeProgram(GerritLauncher.java:251)
at GerritLauncher.mainImpl(GerritLauncher.java:147)
at GerritLauncher.main(GerritLauncher.java:92)
at Main.main(Main.java:30)
Caused by: ConfigurationException: Guice configuration errors:
1) [Guice/MissingImplementation]: No implementation for Set<String> annotated with @AuthHeaders() was bound.
Requested by:
1 : SamlWebFilter.<init>(SamlWebFilter.java:92)
\_ for 5th parameter authHeaders
while locating SamlWebFilter
Learn more:
https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION1 error
======================
Full classname legend:
======================
AuthHeaders: "com.googlesource.gerrit.plugins.saml.AuthHeaders"
SamlWebFilter: "com.googlesource.gerrit.plugins.saml.SamlWebFilter"
========================
End of classname legend:
========================
at InjectorImpl.getProvider(InjectorImpl.java:1174)
at InjectorImpl.getProvider(InjectorImpl.java:1134)
at InjectorImpl.getInstance(InjectorImpl.java:1186)
at JettyServer.makeContext(JettyServer.java:546)
... 26 more
2) [Guice/ErrorInjectingConstructor]: IllegalArgumentException: Unable to instantiate front-end HTTP Filter SamlWebFilter
at JettyServer.<init>(JettyServer.java:218)
at JettyModule.configure(JettyModule.java:31)
at JettyMetrics.<init>(JettyMetrics.java:29)
\_ for 1st parameter jetty
at JettyModule.configure(JettyModule.java:34)
while locating JettyMetrics
Learn more:
https://github.com/google/guice/wiki/ERROR_INJECTING_CONSTRUCTORCaused by: IllegalArgumentException: Unable to instantiate front-end HTTP Filter SamlWebFilter
at JettyServer.makeContext(JettyServer.java:562)
at JettyServer.makeContext(JettyServer.java:504)
at JettyServer.<init>(JettyServer.java:258)
at JettyServer$$FastClassByGuice$$44e64881.GUICE$TRAMPOLINE(<generated>)
at JettyServer$$FastClassByGuice$$44e64881.apply(<generated>)
at DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
at ConstructorInjector.provision(ConstructorInjector.java:114)
at ConstructorInjector.construct(ConstructorInjector.java:91)
at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at SingletonScope$1.get(SingletonScope.java:169)
at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at SingleParameterInjector.inject(SingleParameterInjector.java:40)
at SingleParameterInjector.getAll(SingleParameterInjector.java:60)
at ConstructorInjector.provision(ConstructorInjector.java:113)
at ConstructorInjector.construct(ConstructorInjector.java:91)
at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at SingletonScope$1.get(SingletonScope.java:169)
at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
at InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:213)
at InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:186)
at InternalInjectorCreator.build(InternalInjectorCreator.java:113)
at InjectorImpl.createChildInjector(InjectorImpl.java:240)
at Daemon.createHttpdInjector(Daemon.java:694)
at Daemon.initHttpd(Daemon.java:645)
at Daemon.start(Daemon.java:412)
at Daemon.run(Daemon.java:303)
at AbstractProgram.main(AbstractProgram.java:62)
at java.base/DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/Method.invoke(Method.java:580)
at GerritLauncher.invokeProgram(GerritLauncher.java:251)
at GerritLauncher.mainImpl(GerritLauncher.java:147)
at GerritLauncher.main(GerritLauncher.java:92)
at Main.main(Main.java:30)
Caused by: ConfigurationException: Guice configuration errors:
1) [Guice/MissingImplementation]: No implementation for Set<String> annotated with @AuthHeaders() was bound.
Requested by:
1 : SamlWebFilter.<init>(SamlWebFilter.java:92)
\_ for 5th parameter authHeaders
while locating SamlWebFilter
Learn more:
https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION1 error
======================
Full classname legend:
======================
AuthHeaders: "com.googlesource.gerrit.plugins.saml.AuthHeaders"
SamlWebFilter: "com.googlesource.gerrit.plugins.saml.SamlWebFilter"
========================
End of classname legend:
========================
at InjectorImpl.getProvider(InjectorImpl.java:1174)
at InjectorImpl.getProvider(InjectorImpl.java:1134)
at InjectorImpl.getInstance(InjectorImpl.java:1186)
at JettyServer.makeContext(JettyServer.java:546)
... 34 more
2 errors
======================
Full classname legend:
======================
AbstractProgram: "com.google.gerrit.pgm.util.AbstractProgram"
ConfigurationException: "com.google.inject.ConfigurationException"
ConstructorBindingImpl$Factory: "com.google.inject.internal.ConstructorBindingImpl$Factory"
ConstructorInjector: "com.google.inject.internal.ConstructorInjector"
Daemon: "com.google.gerrit.pgm.Daemon"
DefaultConstructionProxyFactory$FastClassProxy: "com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy"
DirectMethodHandleAccessor: "jdk.internal.reflect.DirectMethodHandleAccessor"
GerritLauncher: "com.google.gerrit.launcher.GerritLauncher"
InjectorImpl: "com.google.inject.internal.InjectorImpl"
InternalFactoryToProviderAdapter: "com.google.inject.internal.InternalFactoryToProviderAdapter"
InternalInjectorCreator: "com.google.inject.internal.InternalInjectorCreator"
JettyMetrics: "com.google.gerrit.pgm.http.jetty.JettyMetrics"
JettyModule: "com.google.gerrit.pgm.http.jetty.JettyModule"
JettyServer: "com.google.gerrit.pgm.http.jetty.JettyServer"
JettyServer$$FastClassByGuice$$44e64881: "com.google.gerrit.pgm.http.jetty.JettyServer$$FastClassByGuice$$44e64881"
Method: "java.lang.reflect.Method"
ProviderToInternalFactoryAdapter: "com.google.inject.internal.ProviderToInternalFactoryAdapter"
SamlWebFilter: "com.googlesource.gerrit.plugins.saml.SamlWebFilter"
SingleParameterInjector: "com.google.inject.internal.SingleParameterInjector"
SingletonScope$1: "com.google.inject.internal.SingletonScope$1"
========================
End of classname legend:
========================
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:589)
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:190)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:113)
at com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:240)
at com.google.gerrit.pgm.Daemon.createHttpdInjector(Daemon.java:694)
at com.google.gerrit.pgm.Daemon.initHttpd(Daemon.java:645)
at com.google.gerrit.pgm.Daemon.start(Daemon.java:412)
at com.google.gerrit.pgm.Daemon.run(Daemon.java:303)
at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:62)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:251)
at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:147)
at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:92)
at Main.main(Main.java:30)