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

Illegal us of internal JDK package #116

Open
burberius opened this issue Aug 20, 2019 · 10 comments
Open

Illegal us of internal JDK package #116

burberius opened this issue Aug 20, 2019 · 10 comments

Comments

@burberius
Copy link

burberius commented Aug 20, 2019

I got the following errors when trying to run a test with openJDK 12. I guess the com.sun.xml package was removed.

Aug. 20, 2019 9:48:27 VORM. de.jollyday.util.XMLUtil unmarshallConfiguration
WARNUNG: Could not create JAXB context using the current threads context classloader. Falling back to ObjectFactory class classloader.

java.lang.IllegalStateException: Cannot instantiate configuration from URL 'jar:file:/home/me/.m2/repository/de/jollyday/jollyday/0.5.7/jollyday-0.5.7.jar!/holidays/Holidays_de.xml'.

	at de.jollyday.datasource.impl.XmlFileDataSource.getConfiguration(XmlFileDataSource.java:43)
	at de.jollyday.impl.DefaultHolidayManager.doInit(DefaultHolidayManager.java:209)
	at de.jollyday.HolidayManager.init(HolidayManager.java:319)
	at de.jollyday.caching.HolidayManagerValueHandler.createValue(HolidayManagerValueHandler.java:44)
	at de.jollyday.caching.HolidayManagerValueHandler.createValue(HolidayManagerValueHandler.java:13)
	at de.jollyday.util.Cache.lambda$get$0(Cache.java:43)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
	at de.jollyday.util.Cache.get(Cache.java:43)
	at de.jollyday.HolidayManager.createManager(HolidayManager.java:166)
	at de.jollyday.HolidayManager.getInstance(HolidayManager.java:146)
[...]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.IllegalStateException: Cannot parse holidays XML file.
	at de.jollyday.util.XMLUtil.unmarshallConfiguration(XMLUtil.java:75)
	at de.jollyday.datasource.impl.XmlFileDataSource.getConfiguration(XmlFileDataSource.java:41)
	... 39 more
Caused by: 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.internal.bind.v2.ContextFactory]
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:177)
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:364)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:508)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:465)
	at de.jollyday.util.XMLUtil$JAXBContextCreator.create(XMLUtil.java:121)
	at de.jollyday.util.XMLUtil.unmarshallConfiguration(XMLUtil.java:68)
	... 40 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	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:174)
	... 45 more

This could be related to #72

@svendiedrichsen
Copy link
Owner

Thanks for the hint. I'm working on modularizing jollyday to allow for different XML parsing framworks to be used. Please be patient as I'm doing this in my spare time.

@burberius
Copy link
Author

Why do you want to modularize it? For Android and normal systems? You can also use jackson-databind on Android, according so several posts I found.
The JXB annotated class could be generated (at compile time) with xjc as described in the article I mentioned and then use those classes with Jackson Databind.

@svendiedrichsen
Copy link
Owner

I have had several different opinions on the usage of different frameworks for parsing XML.

Some cannot use JAXB classes (like on Android) or they don't want to add JAXB dependencies (for JDK >= 11). For those I think there should be an alternative without JAXB. This includes the generated classes as they carry JAXB annotations.

Some already have JAXB on their classpath and don't want additional dependencies like Jackson and its transitives to blow up their deployment size and/or have dependency collisions.

So to allow anyone to choose I think it is best to extract the XML parsing and allow each of it.

@burberius
Copy link
Author

I would suggest not to generate the classes at all but code them, I guess they will change rarely. So you don't have the JAXB annotations and are neutral for the binding implementation.

Then increase the JDK version to 9 and use Java modules for the implementation, as described here: https://labs.consol.de/development/2017/02/13/getting-started-with-java9-modules.html

So you have one maven module jollyday-base that defines an interface for a XML parser and also uses an implementation on the classpath to parse the XML data.
And then for example a module jollyday-jackson that uses jackson-databind to implement the interface.
Although it could be difficult to test the code then or at least it's a lot of work to change the tests accordingly.

Just shout when you need any help!

@svendiedrichsen
Copy link
Owner

thanks for your offer. i'll get back to you if i need some help then.

@hakan42
Copy link
Contributor

hakan42 commented Sep 24, 2019

Then increase the JDK version to 9 and use Java modules for the implementation

I know we are a little bit behind the update schedule, but OpenHAB (as a consument of this library) still depends on Java 8...

@svendiedrichsen
Copy link
Owner

I'll keep it Java 8 compatible.

@AlexBroadbent
Copy link

@svendiedrichsen Is there any movement on this? I get the same error now while running 0.5.10 on JDK 12.

@svendiedrichsen
Copy link
Owner

svendiedrichsen commented Feb 19, 2020

@AlexBroadbent No, no progress so far. I haven't found time to do it.

@keyroii
Copy link

keyroii commented Aug 17, 2022

Adding "back"

<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.2.3-1</version>
</dependency>

Seems to have fixed it for me

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

5 participants