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

Shaded version of docker-client: ClassNotFoundException org.mandas.docker.client.shaded.javax.ws.rs.core.Configurable #84

Closed
ieggel opened this issue Nov 13, 2019 · 10 comments

Comments

@ieggel
Copy link

ieggel commented Nov 13, 2019

Is this a BUG REPORT or FEATURE REQUEST?: BUG REPORT

Description

First of all thank you for keeping this project alive!
I'm using SpringBoot 2.1.0 for Rest Services and therefore i have to use the shaded version of the library. However as soon as I start my application, there is immediately a java.lang.ClassNotFoundException thrown with the message org.mandas.docker.client.shaded.javax.ws.rs.core.Configurable.
This never happened before when using the spotify version. The last spotify version i used was: com.spotify:docker-client:8.14.5:shaded.

Thanks for any help!

How to reproduce

  • Create SpringBoot project
  • Create a service class:
@Service
public class BasicDockerClientService {
    private DockerClient docker;

    public BasicDockerClientService(){
            docker = DefaultDockerClient.fromEnv().build();
    }
    
    public DockerClient getDocker() {
    	return this.docker;
    }
}
  • Create a controller class that uses the above service class:
@RestController
@CrossOrigin
public class MyController {
	@Autowired
	BasicDockerClientService dockerService;
...
}
  • Launch application

What do you expect

I would expect that the application starts by creating a new instance of DockerClient.

What happened instead

java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable was thrown

Software:

  • docker version:
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89e8a
 Built:             Thu Jul 25 21:21:35 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89e8a
  Built:            Thu Jul 25 21:20:09 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
  • Spotify's docker-client version: org.mandas:docker-client:2.0.0:shaded

Full backtrace

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'evaluationsController': Unsatisfied dependency expressed through field 'evaluationsDockerService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'evaluationsDockerService': Unsatisfied dependency expressed through field 'dockerClientService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainDockerClientService': Unsatisfied dependency expressed through field 'basicDockerClientService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basicDockerClientService' defined in file [/home/ivan/code/eaasy/eaasy-swarm-backend-api/bin/main/ch/hevs/medgift/eaasy/swarmbackend/docker/BasicDockerClientService.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
	at ch.hevs.medgift.eaasy.swarmbackend.EaasySwarmBackendApplication.main(EaasySwarmBackendApplication.java:10) [main/:na]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'evaluationsDockerService': Unsatisfied dependency expressed through field 'dockerClientService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainDockerClientService': Unsatisfied dependency expressed through field 'basicDockerClientService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basicDockerClientService' defined in file [/home/ivan/code/eaasy/eaasy-swarm-backend-api/bin/main/ch/hevs/medgift/eaasy/swarmbackend/docker/BasicDockerClientService.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	... 19 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainDockerClientService': Unsatisfied dependency expressed through field 'basicDockerClientService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basicDockerClientService' defined in file [/home/ivan/code/eaasy/eaasy-swarm-backend-api/bin/main/ch/hevs/medgift/eaasy/swarmbackend/docker/BasicDockerClientService.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	... 32 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basicDockerClientService' defined in file [/home/ivan/code/eaasy/eaasy-swarm-backend-api/bin/main/ch/hevs/medgift/eaasy/swarmbackend/docker/BasicDockerClientService.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1270) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1164) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	... 45 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1262) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	... 56 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable
	at ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService.<init>(BasicDockerClientService.java:27) ~[main/:na]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_222]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_222]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_222]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_222]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
	... 58 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.mandas.docker.client.shaded.javax.ws.rs.core.Configurable
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_222]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_222]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_222]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_222]
	... 64 common frames omitted
@dmandalidis
Copy link
Owner

Hi, thanks for reaching out.

This must be probably triggered by the update of jersey-client to 2.28. The javax.ws.rs.core package is now included in a different group id (jakarta.ws.rs). This is not handled by the current configuration and it's certainly a problem and I verified locally that Configurable is now included in the shaded jar.

Have to test it a little bit though since other artifacts may be affected as well (unless you can grab the branch referenced in the PR, build it and test it locally)

dmandalidis added a commit that referenced this issue Nov 13, 2019
- Remove unused shading of javax.annotation
@dmandalidis
Copy link
Owner

Hi again,

Just tested it with a sample spring-boot project and I 've managed to list the containers in my docker host. Therefore, I assume we 're ok. Closing this issue, patch release 2.0.1 by tomorrow.

Thanks

@ieggel
Copy link
Author

ieggel commented Nov 14, 2019

Hi @dmandalidis

Great. Thank you so much. I'll test it tomorrow and give you feedback!
Cheers!

@ieggel
Copy link
Author

ieggel commented Nov 14, 2019

@dmandalidis

I actually tried it out myself now. I cloned the repo and build it with maven from the master branch. However there were some tests that did not pass.
Failed tests:

Failed tests: 
  DefaultDockerClientTest.testContainerWithMemoryOptions:1857 
Expected: <33554432L>
     but: was <-1L>
  DefaultDockerClientTest.testContainerWithAppArmorLogs:1890 
Expected: ""
     but: was "unconfined"
  DefaultDockerClientTest.testListTasks:5063 
Expected: is <0>
     but: was <5>
  DefaultDockerClientTest.testInspectServiceEndpoint:4955 
Expected: iterable over [<PortConfig{name=web, protocol=tcp, targetPort=80, publishedPort=8080, publishMode=INGRESS}>, <PortConfig{name=null, protocol=tcp, targetPort=22, publishedPort=null, publishMode=HOST}>] in any order
     but: No item matches: <PortConfig{name=web, protocol=tcp, targetPort=80, publishedPort=8080, publishMode=INGRESS}>, <PortConfig{name=null, protocol=tcp, targetPort=22, publishedPort=null, publishMode=HOST}> in []

Tests in error: 
  DefaultDockerClientTest.testSsl:2426 » Docker java.util.concurrent.ExecutionEx...
  DefaultDockerClientTest.testNetworksConnectContainerWithEndpointConfig:3829 » DockerRequest

I then built it without the tests with mvn -Dmaven.test.skip=true package and referenced docker-client-3.0.0-SNAPSHOT-sources.jar in my project. The application now starts, however throws the following Exception: java.lang.ClassNotFoundException: com.kenai.jffi.Type

I am not sure if those failed test have anything to do with the errors i get during execution.

The exception is thrown here in my code:

    //Constructor
    public BasicDockerClientService(){
        try {
            docker = DefaultDockerClient.fromEnv().build();
           //Exception is thrown here
            System.out.println(docker.info().toString()); 
        }
        ...

Here the stacktrace:

org.mandas.docker.client.exceptions.DockerException: java.util.concurrent.ExecutionException: org.mandas.docker.client.shaded.javax.ws.rs.ProcessingException: java.lang.UnsatisfiedLinkError: could not load FFI provider org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.Provider
	at org.mandas.docker.client.DefaultDockerClient.propagate(DefaultDockerClient.java:2788)
	at org.mandas.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:2652)
	at org.mandas.docker.client.DefaultDockerClient.info(DefaultDockerClient.java:612)
	at ch.hevs.medgift.eaasy.swarmbackend.docker.BasicDockerClientService.<init>(BasicDockerClientService.java:28)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1262)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1164)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1239)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1166)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1378)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
	at ch.hevs.medgift.eaasy.swarmbackend.EaasySwarmBackendApplication.main(EaasySwarmBackendApplication.java:10)
Caused by: java.util.concurrent.ExecutionException: org.mandas.docker.client.shaded.javax.ws.rs.ProcessingException: java.lang.UnsatisfiedLinkError: could not load FFI provider org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.Provider
	at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
	at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
	at org.mandas.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:2650)
	... 65 more
Caused by: org.mandas.docker.client.shaded.javax.ws.rs.ProcessingException: java.lang.UnsatisfiedLinkError: could not load FFI provider org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.Provider
	at org.mandas.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime.processFailure(ClientRuntime.java:207)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime.access$100(ClientRuntime.java:61)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime$2.lambda$failure$1(ClientRuntime.java:159)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:292)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:274)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:244)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:288)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime$2.failure(ClientRuntime.java:159)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:483)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime.lambda$null$3(ClientRuntime.java:163)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:292)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:274)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:244)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:288)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.client.ClientRuntime.lambda$createRunnableForAsyncProcessing$4(ClientRuntime.java:139)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.UnsatisfiedLinkError: could not load FFI provider org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.Provider
	at org.mandas.docker.client.shaded.jnr.ffi.provider.InvalidProvider$1.loadLibrary(InvalidProvider.java:48)
	at org.mandas.docker.client.shaded.jnr.ffi.LibraryLoader.load(LibraryLoader.java:325)
	at org.mandas.docker.client.shaded.jnr.unixsocket.Native.<clinit>(Native.java:80)
	at org.mandas.docker.client.shaded.jnr.unixsocket.UnixSocketChannel.<init>(UnixSocketChannel.java:101)
	at org.mandas.docker.client.shaded.jnr.unixsocket.UnixSocketChannel.open(UnixSocketChannel.java:60)
	at org.mandas.docker.client.UnixConnectionSocketFactory.createSocket(UnixConnectionSocketFactory.java:69)
	at org.mandas.docker.client.UnixConnectionSocketFactory.createSocket(UnixConnectionSocketFactory.java:44)
	at org.mandas.docker.client.shaded.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:118)
	at org.mandas.docker.client.shaded.org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
	at org.mandas.docker.client.shaded.org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
	at org.mandas.docker.client.shaded.org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
	at org.mandas.docker.client.shaded.org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
	at org.mandas.docker.client.shaded.org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
	at org.mandas.docker.client.shaded.org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.mandas.docker.client.shaded.org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
	at org.mandas.docker.client.shaded.org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:426)
	at org.mandas.docker.client.shaded.org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:479)
	... 13 more
Caused by: java.lang.NoClassDefFoundError: com/kenai/jffi/Type
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.jafflType(NativeRuntime.java:193)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.buildTypeMap(NativeRuntime.java:76)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:57)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:53)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:49)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
	at org.mandas.docker.client.shaded.jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
	at org.mandas.docker.client.shaded.jnr.ffi.LibraryLoader.create(LibraryLoader.java:73)
	at org.mandas.docker.client.shaded.jnr.unixsocket.Native.<clinit>(Native.java:76)
	... 28 more
Caused by: java.lang.ClassNotFoundException: com.kenai.jffi.Type
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 45 more

@dmandalidis dmandalidis reopened this Nov 15, 2019
@dmandalidis
Copy link
Owner

Hi,

Let's not dig further into this since the test errors seem to be as a configuration issue in your side (master build passes here). The com.kenai.jffi.Type could be triggered by the update of jnr-unixsocket dependency update, but since this hasn't been released yet I took a note to investigate this before releasing 3.0.0.

2.0.1 is out now containing the shading fix, please use that one and let me know if you face further issues.

@ieggel
Copy link
Author

ieggel commented Nov 15, 2019

Thank you @dmandalidis !
Yes, i think the tests did not pass because I already had a swarm running locally with some services.

I now tested your new release.
Regarding the java.lang.NoClassDefFoundError: org/mandas/docker/client/shaded/javax/ws/rs/core/Configurable: I can confirm this is not happening anymore.

However i got another error when trying to read the service logs. Will create another issue for it.

Thanks for all your effort!

@tony--
Copy link

tony-- commented Nov 15, 2019

Thanks for the release - I was running into the same issues and was planning on digging in today. So nice to have them already fixed! 🤞

@dmandalidis
Copy link
Owner

Hi @tony-- , there's another fix coming for #88 which will result in 2.0.2 release. Stay tuned!

@tony--
Copy link

tony-- commented Nov 15, 2019

@ieggel @dmandalidis I think I am running into something similar to Ivan

java.util.concurrent.ExecutionException: org.mandas.docker.client.shaded.javax.ws.rs.ProcessingException: java.lang.UnsatisfiedLinkError: could not load FFI provider org.mandas.docker.client.shaded.jnr.ffi.provider.jffi.Provider

@dmandalidis
Copy link
Owner

Hi @tony--

Please open another issue for this one

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

No branches or pull requests

3 participants