-
Improvement
-
Resolution: Fixed
-
Major
-
None
As described in Dependencies and Class Loading:
Java defines a Thread.getContextClassLoader(). Jenkins does not use this much; it will normally be set by the servlet container to the Jenkins core loader.
Unfortunately, JAXB has a design flaw in that JAXBContext#newInstance expects JAXB to be available in the thread's context class loader. With JAXB being detached to a separate plugin as of recent Java 11 changes, JAXB is no longer available in the Jenkins core loader. This causes a failure to load JAXB.
This plugin has been identified as containing such a call to JAXBContext#newInstance The suggested solution is to wrap calls to JAXBContext#newInstance with a try/finally block to set the thread's context class loader to that of the plugin, which (by virtue of a plugin-to-plugin dependency on JAXB API plugin) enables JAXB to be loaded. See the following PR for an example:
- is duplicated by
-
JENKINS-55620 SloccountPublisher fails on Java 11 without --add-modules java.xml.bind
-
- Resolved
-
- links to
https://github.com/jenkinsci/sloccount-plugin/blob/e3edcd2d5d01f0000bc33c16d6ca736bd8349913/src/main/java/hudson/plugins/sloccount/model/cloc/ClocReport.java#L57-L68= needs to be wrapped to set the thread's context classloader.