Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-59301

Crowd 2 plugin not compatible with JDK11

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: In Review (View Workflow)
    • Priority: Major
    • Resolution: Unresolved
    • Component/s: crowd2-plugin
    • Environment:
    • Similar Issues:

      Description

      Hi,

      I don't know if it's me, but it seems that the Crowd2 plugin is not compatible with JDK11

      javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
       - with linked exception:
      [java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
      	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
      	at javax.xml.bind.ContextFinder.find(ContextFinder.java:397)
      	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
      	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
      	at com.atlassian.crowd.integration.rest.util.JAXBContextCache$1.load(JAXBContextCache.java:29)
      	at com.atlassian.crowd.integration.rest.util.JAXBContextCache$1.load(JAXBContextCache.java:25)
      	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3568)
      	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2350)
      	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2313)
      	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2228)
      	at com.google.common.cache.LocalCache.get(LocalCache.java:3965)
      	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3969)
      	at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4829)
      	at com.atlassian.crowd.integration.rest.util.JAXBContextCache.getJAXBContext(JAXBContextCache.java:41)
      	at com.atlassian.crowd.integration.rest.service.RestExecutor.getUnmarshaller(RestExecutor.java:414)
      	at com.atlassian.crowd.integration.rest.service.RestExecutor.access$000(RestExecutor.java:68)
      	at com.atlassian.crowd.integration.rest.service.RestExecutor$MethodExecutor.andReceive(RestExecutor.java:489)
      	at com.atlassian.crowd.integration.rest.service.RestCrowdClient.getGroup(RestCrowdClient.java:337)
      	at de.theit.jenkins.crowd.CrowdConfigurationService.getGroup(CrowdConfigurationService.java:519)
      	at de.theit.jenkins.crowd.CrowdConfigurationService.isGroupActive(CrowdConfigurationService.java:310)
      	at de.theit.jenkins.crowd.CrowdConfigurationService.isGroupMember(CrowdConfigurationService.java:675)
      	at de.theit.jenkins.crowd.CrowdConfigurationService.isGroupMember(CrowdConfigurationService.java:257)
      	at de.theit.jenkins.crowd.CrowdAuthenticationManager.authenticate(CrowdAuthenticationManager.java:114)
      	at org.acegisecurity.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:74)
      	at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:252)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
      	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)
      	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
      	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
      	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
      	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
      	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
      	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
      	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1701)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
      	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
      	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
      	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1668)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
      	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      	at org.eclipse.jetty.server.Server.handle(Server.java:502)
      	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
      	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
      	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
      	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
      	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
      	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
      	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
      	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
      	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
      	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
      	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
      	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
      	at java.base/java.lang.Thread.run(Thread.java:834)
      Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
      	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
      	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
      	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
      	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:565)
      	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
      	at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122)
      	at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155)
      	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276)
      	... 68 more
      

      Exact same config work for jenkins/jenkins:2.176.3

      Regards,

      Valentin

        Attachments

        1. crowd_java_opt.png
          crowd_java_opt.png
          148 kB
        2. crowd_jaxb.png
          crowd_jaxb.png
          175 kB
        3. crowd2_2.png
          crowd2_2.png
          76 kB
        4. crowd2.png
          crowd2.png
          60 kB
        5. plugins.png
          plugins.png
          111 kB
        6. Screenshot 2019-09-10 at 19.46.24.png
          Screenshot 2019-09-10 at 19.46.24.png
          295 kB

          Issue Links

            Activity

            Hide
            msglueck Markus Glück added a comment -

            I also have the same issue here. Started in refactoring the plugin here: https://github.com/jenkinsci/crowd2-plugin/pull/39

            Actually adding the missing functions with the new proposed Crowd REST client (see above) wasn't that hard. Still struggling with the JAXB dependency though. First time I touched a Jenkins plugin, so maybe I'm missing something- 

            but have to switch over to other duties ATM  Hope this helps anyways.

            Show
            msglueck Markus Glück added a comment - I also have the same issue here. Started in refactoring the plugin here: https://github.com/jenkinsci/crowd2-plugin/pull/39 Actually adding the missing functions with the new proposed Crowd REST client (see above) wasn't that hard. Still struggling with the JAXB dependency though. First time I touched a Jenkins plugin, so maybe I'm missing something-  but have to switch over to other duties ATM  Hope this helps anyways.
            Hide
            ferstl Stefan Ferstl added a comment -

            The plugin works when you add a JAXB-Implementation and its dependencies to JENKINS_HOME/war/WEB-INF/lib . These are the libraries of the implementation that formerly was part of the JDK (jaxb-runtime and its dependencies):

            org.glassfish.jaxb:jaxb-runtime:jar:2.3.0
            org.glassfish.jaxb:jaxb-core:jar:2.3.0
            javax.xml.bind:jaxb-api:jar:2.3.0
            org.glassfish.jaxb:txw2:jar:2.3.0 
            com.sun.istack:istack-commons-runtime:jar:3.0.5 
            org.jvnet.staxex:stax-ex:jar:1.7.8
            

            See also: Using JAXB in Java 9+

            Show
            ferstl Stefan Ferstl added a comment - The plugin works when you add a JAXB-Implementation and its dependencies to JENKINS_HOME/war/WEB-INF/lib . These are the libraries of the implementation that formerly was part of the JDK (jaxb-runtime and its dependencies): org.glassfish.jaxb:jaxb-runtime:jar:2.3.0 org.glassfish.jaxb:jaxb-core:jar:2.3.0 javax.xml.bind:jaxb-api:jar:2.3.0 org.glassfish.jaxb:txw2:jar:2.3.0 com.sun.istack:istack-commons-runtime:jar:3.0.5 org.jvnet.staxex:stax-ex:jar:1.7.8 See also: Using JAXB in Java 9+
            Hide
            benbrummer Benjamin Brummer added a comment -

            Stefan Ferstl thank you for this workaround. On our side only four of them are needed txw2 is already there ( txw2-20110809.jar), stax-ex was not used.

            org.glassfish.jaxb:jaxb-runtime:jar:2.3.3
            org.glassfish.jaxb:jaxb-core:jar:2.3.0.1 or 3.0.0-M4
            javax.xml.bind:jaxb-api:jar:2.3.1 or 2.4.0-b180830.0359
            com.sun.istack:istack-commons-runtime:jar:3.0.11 or 4.0.0-M3
            
            Show
            benbrummer Benjamin Brummer added a comment - Stefan Ferstl thank you for this workaround. On our side only four of them are needed txw2 is already there ( txw2-20110809.jar), stax-ex was not used. org.glassfish.jaxb:jaxb-runtime:jar:2.3.3 org.glassfish.jaxb:jaxb-core:jar:2.3.0.1 or 3.0.0-M4 javax.xml.bind:jaxb-api:jar:2.3.1 or 2.4.0-b180830.0359 com.sun.istack:istack-commons-runtime:jar:3.0.11 or 4.0.0-M3
            Hide
            mbidewel Mark added a comment -

            Been running some tests and figured I would post the results.  Similarly to the previous comments, linking the libraries shipped in the JAXB Plugin into the Jenkins webroot directory (/var/cache/jenkins/war for an RPM install) allows the crowd2 plugin to function.  This implies that rebuilding the plugin with an explicit dependency on the JAXB Plugin should resolve the issue, however this does not seem to be the case in my testing.

             

             

            Show
            mbidewel Mark added a comment - Been running some tests and figured I would post the results.  Similarly to the previous comments, linking the libraries shipped in the JAXB Plugin into the Jenkins webroot directory (/var/cache/jenkins/war for an RPM install) allows the crowd2 plugin to function.  This implies that rebuilding the plugin with an explicit dependency on the JAXB Plugin should resolve the issue, however this does not seem to be the case in my testing.    
            Hide
            rifffi Thomas added a comment -

            Here is my solution to the problem.

            https://github.com/jenkinsci/crowd2-plugin/pull/40

             

            Show
            rifffi Thomas added a comment - Here is my solution to the problem. https://github.com/jenkinsci/crowd2-plugin/pull/40  

              People

              Assignee:
              pingunaut Martin Spielmann
              Reporter:
              jonesbusy Valentin Delaye
              Votes:
              13 Vote for this issue
              Watchers:
              25 Start watching this issue

                Dates

                Created:
                Updated: