PIPE icon indicating copy to clipboard operation
PIPE copied to clipboard

pom.xml: Add JAXB dependency

Open obgm opened this issue 4 years ago • 3 comments

Since JDK9, JAXB is deprecated and was entirely removed in JDK11. This change adds version 2.3.0 (used in JDK9) as an explicit dependency to instruct maven to include it in the generated archive.

obgm avatar Jan 26 '21 15:01 obgm

Dear maintainers (@sarahtattersall and @sjdayday ... right?) it would be great if this PR was merged! It is very limited in scope but allows for PIPE to be useful beyond Java 8. Thanks!

fkleedorfer avatar Apr 27 '21 07:04 fkleedorfer

Wait... this PR is not enough, it only adds the JAXB-API, but no implementation. Saving a petri net in PIPE-gui still fails, complaining about the missing JAXB implementation:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Failed to write!
        at pipe.controllers.application.PipeApplicationController.saveAsCurrentPetriNet(PipeApplicationController.java:192)
        at pipe.actions.gui.AbstractSaveAction.saveNet(AbstractSaveAction.java:65)
        at pipe.actions.gui.AbstractSaveAction.saveAsOperation(AbstractSaveAction.java:53)
        at pipe.actions.gui.SaveAction.actionPerformed(SaveAction.java:41)
        at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
        at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
        at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
        at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
        at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:369)
        at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1012)
        at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1056)
        at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
        at java.desktop/java.awt.Component.processMouseEvent(Component.java:6614)
        at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
        at java.desktop/java.awt.Component.processEvent(Component.java:6379)
        at java.desktop/java.awt.Container.processEvent(Container.java:2263)
        at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
        at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
        at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
        at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
        at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
        at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
        at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
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:278)
        at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
        at uk.ac.imperial.pipe.io.PetriNetIOImpl.<init>(PetriNetIOImpl.java:73)
        at uk.ac.imperial.pipe.io.PetriNetIOImpl.<init>(PetriNetIOImpl.java:90)
        at uk.ac.imperial.pipe.models.manager.PetriNetManagerImpl.savePetriNet(PetriNetManagerImpl.java:112)
        at pipe.controllers.application.PipeApplicationController.saveAsCurrentPetriNet(PipeApplicationController.java:190)
        ... 41 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        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)

Adding the jaxb implementation dependency fixes this. I'll prepare a PR to that effect.

fkleedorfer avatar Apr 27 '21 08:04 fkleedorfer

Should not be merged before https://github.com/obgm/PIPE/pull/1

fkleedorfer avatar Apr 27 '21 11:04 fkleedorfer