Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error using gitlab4j-api in native quarkus image #672

Open
vindevoy opened this issue Mar 22, 2021 · 4 comments
Open

Error using gitlab4j-api in native quarkus image #672

vindevoy opened this issue Mar 22, 2021 · 4 comments

Comments

@vindevoy
Copy link

Hi,

The library has been used to connect Rundeck to Gitlab in a small Java project that uses Quarkus and GraalVM. It simply returns some basic info (like tags and branches, the current user) and this all works EXCEPT when you build a native image and try to connect. Then there's an error about the InjectionManagerFactory not found.

Problem arises only when using the native image, not the fatjar, ...

2021-03-22 10:50:45,897 INFO [io.quarkus] (main) rundeck-gitlab-connector 1.6.0-SNAPSHOT native (powered by Quarkus 1.12.2.Final) started in 0.597s. Listening on: http://0.0.0.0:8080
2021-03-22 10:50:45,898 INFO [io.quarkus] (main) Profile prod activated.
2021-03-22 10:50:45,898 INFO [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jackson]
2021-03-22 10:51:12,157 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /user failed, error id: 510aee19-778b-4323-b991-c93d1408bbd1-1: org.jboss.resteasy.spi.UnhandledException: org.gitlab4j.api.GitLabApiException: InjectionManagerFactory not found.
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:106)
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:372)
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:218)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:519)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)
at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:73)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:138)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.access$000(VertxRequestHandler.java:41)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:93)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.lang.Thread.run(Thread.java:834)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
at com.oracle.svm.core.windows.WindowsJavaThreads.osThreadStartRoutine(WindowsJavaThreads.java:138)
Caused by: org.gitlab4j.api.GitLabApiException: InjectionManagerFactory not found.
at org.gitlab4j.api.AbstractApi.handle(AbstractApi.java:655)
at org.gitlab4j.api.AbstractApi.get(AbstractApi.java:215)
at org.gitlab4j.api.UserApi.getCurrentUser(UserApi.java:670)
at online.vindevoy.foss.rundeckGitlabConnector.services.UserService.getCurrentUser(UserService.java:16)
at online.vindevoy.foss.rundeckGitlabConnector.services.UserService_ClientProxy.getCurrentUser(UserService_ClientProxy.zig:188)
at online.vindevoy.foss.rundeckGitlabConnector.resources.UserResource.user(UserResource.java:22)
at java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:643)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:507)
at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:457)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:459)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:419)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:393)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:68)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492)
... 17 more
Caused by: java.lang.IllegalStateException: InjectionManagerFactory not found.
at org.glassfish.jersey.internal.inject.Injections.lambda$lookupInjectionManagerFactory$0(Injections.java:74)
at java.util.Optional.orElseThrow(Optional.java:408)
at org.glassfish.jersey.internal.inject.Injections.lookupInjectionManagerFactory(Injections.java:74)
at org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:44)
at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:412)
at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:317)
at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:807)
at org.glassfish.jersey.client.ClientRequest.getClientRuntime(ClientRequest.java:219)
at org.glassfish.jersey.client.ClientRequest.getInjectionManager(ClientRequest.java:610)
at org.glassfish.jersey.client.JerseyWebTarget.onBuilder(JerseyWebTarget.java:364)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:192)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:36)
at org.gitlab4j.api.GitLabApiClient.invocation(GitLabApiClient.java:796)
at org.gitlab4j.api.GitLabApiClient.invocation(GitLabApiClient.java:761)
at org.gitlab4j.api.GitLabApiClient.get(GitLabApiClient.java:412)
at org.gitlab4j.api.GitLabApiClient.get(GitLabApiClient.java:400)
at org.gitlab4j.api.AbstractApi.get(AbstractApi.java:213)
... 33 more

@flon-chou
Copy link

Yeah, I have a similar problem.

@jabby
Copy link
Collaborator

jabby commented Apr 19, 2022

I did not have time to work on this topic. If you can find a way to fix this, I can review PRs.

@jmini
Copy link
Collaborator

jmini commented Apr 13, 2023

InjectionManagerFactory is a class that belongs to the Jersey client that this lib is using.
I guess in the Quarkus world it would be better to use the HTTP client they provide: smallrye-rest-client.

There is an open issue to discuss what should happen with the HTTP client used in this lib:
#924
--> Nothing is decided so far. Feel free to join the discussion.

For the issue mentioned here, a quick search pointed to following issue:
quarkusio/quarkus#1647 (comment)
--> Somebody computed the GraalVM instructions in order to have the Jersey reflection working at runtime in the native mode.


It would be interesting to know if this issue has evolved with the 6.0.0-rc.1 version where we are now using a newer version of Jersey 3.1.1 (using the jakarta.* namespace instead of javax.*).
Probably you also need to update to Quarkus 3 in order to use this version.

@jmini jmini added the question label Apr 13, 2023
@jmini
Copy link
Collaborator

jmini commented Dec 21, 2023

I am not sure if this is enough for your use case, but @nilchina proposed following change: #1074

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants