Uploaded image for project: 'Build'
  1. Build
  2. BUILD-462

JAXBException when using Java 11

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Neutral
    • BOM 6.2.9
    • BOM 6.2.8
    • None
    • Yes
    • Maintenance 56
    • 1

    Description

      Steps to reproduce

      1.  Start Magnolia 6.2.8 using Java 11
      2.  Call the rest endpoint: http://<localhost:8080>/magnoliaAuthor/.rest/nodes/v1/website/sportstation

      Expected results

      The Rest endpoint is correctly called and response is shown in the browser

      Actual results

      There's an error:

      ERROR info.magnolia.rest.RestExceptionMapper            : Exception thrown executing REST endpoint, returning 500
      javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
      	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278) ~[jaxb-api-2.3.1.jar:2.3.0]
      	at javax.xml.bind.ContextFinder.find(ContextFinder.java:421) ~[jaxb-api-2.3.1.jar:2.3.0]
      	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721) ~[jaxb-api-2.3.1.jar:2.3.0]
      	at org.jboss.resteasy.plugins.providers.jaxb.JAXBContextWrapper.<init>(JAXBContextWrapper.java:112) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.JAXBContextWrapper.<init>(JAXBContextWrapper.java:175) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.XmlJAXBContextFinder.createContextObject(XmlJAXBContextFinder.java:52) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBContextFinder.createContext(AbstractJAXBContextFinder.java:173) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.XmlJAXBContextFinder.findCachedContext(XmlJAXBContextFinder.java:41) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.findJAXBContext(AbstractJAXBProvider.java:84) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:174) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.writeTo(AbstractJAXBProvider.java:150) ~[resteasy-jaxb-provider-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.messagebody.AsyncBufferedMessageBodyWriter.asyncWriteTo(AsyncBufferedMessageBodyWriter.java:24) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.ServerWriterInterceptorContext.writeTo(ServerWriterInterceptorContext.java:87) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.AbstractWriterInterceptorContext.asyncProceed(AbstractWriterInterceptorContext.java:203) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.AbstractWriterInterceptorContext.getStarted(AbstractWriterInterceptorContext.java:166) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.ServerWriterInterceptorContext.lambda$getStarted$0(ServerWriterInterceptorContext.java:73) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.ServerWriterInterceptorContext.aroundWriteTo(ServerWriterInterceptorContext.java:93) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.ServerWriterInterceptorContext.getStarted(ServerWriterInterceptorContext.java:73) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.ServerResponseWriter.lambda$writeNomapResponse$3(ServerResponseWriter.java:163) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.ContainerResponseContextImpl.filter(ContainerResponseContextImpl.java:404) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.ServerResponseWriter.executeFilters(ServerResponseWriter.java:252) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:101) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:74) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:594) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161) ~[resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364) [resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164) [resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247) [resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:249) [resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:60) [resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-core-4.5.8.Final.jar:4.5.8.Final]
      	...
      Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
      	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364) ~[catalina.jar:9.0.43]
      	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187) ~[catalina.jar:9.0.43]
      	at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) ~[jaxb-api-2.3.1.jar:2.3.0]
      	at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) ~[jaxb-api-2.3.1.jar:2.3.0]
      	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276) ~[jaxb-api-2.3.1.jar:2.3.0]
      	... 148 more
       

      Workaround

      As a workaround before 6.2.9 release, one could override jaxb-runtime version in their project pom, e.g.

      <dependency>
            <groupId>info.magnolia.bundle</groupId>
            <artifactId>magnolia-community-webapp</artifactId>
            <type>war</type>
          </dependency>
          <dependency>
            <groupId>info.magnolia.bundle</groupId>
            <artifactId>magnolia-community-webapp</artifactId>
            <type>pom</type>
          </dependency>
          <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3-b02</version>
            <exclusions>
              <exclusion>
                <groupId>javax.activation</groupId>
                <artifactId>javax.activation-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
      
      • Alternatively, use Java 8

      Development notes

      This is happening due to the update of jaxb-runtime to 3.0.0 in Magnolia 6.2.8 when using java 11. If using java 8 it works (see https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception)

      In Magnolia 6.2.7 there's no error. 

      The issue was caused by Tika update to version 1.26 which pulled in jaxb-runtime 3.0.0 
      Fix will consist in excluding jaxb-runtime from Tika parsers, as we do already for other jaxb libraries and let RESTEasy manage those dependencies.

      Checklists

        Acceptance criteria

        Attachments

          Issue Links

            Activity

              People

                fgrilli Federico Grilli
                jayala Jonathan Ayala
                Votes:
                0 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: