We are running in an issue with REST services that is rendered in the log files as this (essence: HK2 service reification failed for ...):
I have snipped the stack trace due to “An error occurred: Body is limited to 52000 characters; you entered 307152.”
confluence-1 | WARNING: HK2 service reification failed for [com.addonengine.addons.analytics.rest.filter.UserHasPermissionToViewSpaceAnalyticsFilter] with an exception:
confluence-1 | MultiException stack 1 of 2
confluence-1 | java.lang.NoSuchMethodException: Could not find a suitable constructor in com.addonengine.addons.analytics.rest.filter.UserHasPermissionToViewSpaceAnalyticsFilter class.
confluence-1 | at org.glassfish.jersey.inject.hk2.JerseyClassAnalyzer.getConstructor(JerseyClassAnalyzer.java:168)
confluence-1 | at org.jvnet.hk2.internal.Utilities.getConstructor(Utilities.java:156)
confluence-1 | at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:105)
confluence-1 | at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:156)
confluence-1 | at org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:716)
confluence-1 | at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:670)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:442)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2300)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl.access$1200(ServiceLocatorImpl.java:106)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl$10.compute(ServiceLocatorImpl.java:1385)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl$10.compute(ServiceLocatorImpl.java:1380)
confluence-1 | at org.glassfish.hk2.utilities.cache.internal.WeakCARCacheImpl.compute(WeakCARCacheImpl.java:105)
confluence-1 | at
<... snip ...>
confluence-1 | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
confluence-1 | at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
confluence-1 | at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
confluence-1 | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
confluence-1 | at java.base/java.lang.Thread.run(Thread.java:840)
confluence-1 | MultiException stack 2 of 2
confluence-1 | java.lang.IllegalArgumentException: Errors were discovered while reifying SystemDescriptor(
confluence-1 | implementation=com.addonengine.addons.analytics.rest.filter.UserHasPermissionToViewSpaceAnalyticsFilter
confluence-1 | contracts={javax.ws.rs.container.ContainerRequestFilter,javax.ws.rs.container.ContainerResponseFilter}
confluence-1 | scope=javax.inject.Singleton
confluence-1 | qualifiers={org.glassfish.jersey.internal.inject.Custom}
confluence-1 | descriptorType=CLASS
confluence-1 | descriptorVisibility=NORMAL
confluence-1 | metadata=
confluence-1 | rank=0
confluence-1 | loader=null
confluence-1 | proxiable=null
confluence-1 | proxyForSameScope=null
confluence-1 | analysisName=null
confluence-1 | id=220
confluence-1 | locatorId=41
confluence-1 | identityHashCode=881808534
confluence-1 | reified=false)
confluence-1 | at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:681)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:442)
confluence-1 | at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2300)
<... snip ...>
confluence-1 | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
confluence-1 | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
confluence-1 | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
confluence-1 | at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
confluence-1 | at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
confluence-1 | at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
confluence-1 | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
confluence-1 | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
confluence-1 | at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
confluence-1 | at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
confluence-1 | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
confluence-1 | at java.base/java.lang.Thread.run(Thread.java:840)
The reason I mention this is because it has nothing to do with our app. I can reproduce the issue simply by starting and installing a new Confluence server in a container, install the REST API Browser and let it show me the private API services via the UI.
When I shutdown the server after its installation and do the same procedure, I do get a lot of stack traces, but not the one shown above.
Why do I post such a silly question? I get the issue also when I deploy our app and I have read MarekTokarski’s answer to this question Platform 7 upgrade in progress: Learn about the first highlights and changes - #64 by ashraf.teleb85 that this may be related to:
Based on the error message I suspect the resource lack
@Injectannotation that is required on REST v2 resources.
As I am using Spring Java Config this brings me back to my question I posted about a month ago: REST Services on Platform 7 / Confluence 9. I am somewhat convinced that the user who posted the question Marek answered is also using Spring Java Config, due to his post here: Preparing for Confluence 9.0 - EAP out now - #109 by ashraf.teleb85.
So my question boils down to this:
- If I am using Spring Java Config do I need to add
@Injectannotations for REST services? - Do I need to declare REST Services via Spring Java Config (I assume yes) and do I need to export it (I assume no) or is it sufficient to declar the services via the
atlassian-plugin.xml?
3.Is there some documentation I have missed?
Thank you in advance! ![]()