# Packr -> Implementation of JAXB-API has not been found



## sascha-sphw (16. Mrz 2020)

Hallo zusammen,

ich sehe den Wald vor lauter Bäumen nicht mehr. Ich habe eine openjfx Applikation mit JDK 11 erstellt welche mit JAXB XML Dateien liest und schreibt.
Mit Packr erstelle ich einen Windows Wrapper und hier bekomme ich die Fehlermeldung, dass die JAXB Implementierung nicht gefunden wird.


```
de.sphw.testtool.dao.xml.JaxbDaoBase->getRecentFiles:L27 - Implementation of JAXB-API has not been found on module path or classpath.
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:232) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:375) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    at de.sphw.testtool.dao.xml.JaxbDaoBase.load(JaxbDaoBase.java:21) ~[testtool.jar:?]
    at de.sphw.testtool.dao.xml.RecentFilesDaoXmlImpl.getRecentFiles(RecentFilesDaoXmlImpl.java:24) ~[testtool.jar:?]
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source) [?:?]
    at java.util.concurrent.CompletableFuture$AsyncSupply.exec(Unknown Source) [?:?]
    at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) [?:?]
    at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source) [?:?]
    at java.util.concurrent.ForkJoinPool.scan(Unknown Source) [?:?]
    at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) [?:?]
    at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) [?:?]
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
    at jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) ~[?:?]
    at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) ~[?:?]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
    at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:92) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:125) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:230) ~[jakarta.xml.bind-api-2.3.2.jar:2.3.2]
    ... 12 more
```

Wenn ich die Applikation über die mit Jlink gebaute custom jre laufen lasse, funktioniert alles ohne Fehler.

```
custom_jre\bin\java.exe -jar testtool.jar
```

Die Implementierung liegt ja im lib Ordner und alle anderen libs werden auch gefunden.
Ich verwende die glassfish Referenzimplementierung.

```
<!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.2</version>
        </dependency>
```

Den Wrapper habe ich mit folgendem Befehl gebaut.

```
java -jar ${PACKR_HOME}\\packr.jar --platform windows64 --jdk \"${WORKSPACE}\\custom_jre\" --executable TestTool --classpath testtool.jar --mainclass de.sphw.testtool.TestToolStarter --verbose --resources lib --vmargs \"add-opens java.base/java.lang=ALL-UNNAMED\" --output \"${WORKSPACE}\\target\"
```

Habt ihr eine Ahnung warum er die Implementierung nicht findet?
Danke im voraus
Sascha


----------

