-
Notifications
You must be signed in to change notification settings - Fork 49
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
ClassNotFoundException with newer jaxb-versions and java 17 #73
Comments
Die JAXB-Implementierung wurde - wenn ich mich recht erinnere - in Java 17 entfernt.
Allerdings nur die API. Dort muss jetzt wohl auch die Implementierung explizit hinzugefügt werden. |
Genau, ab Java 11 wurde JAXB entfernt. |
Der Grund ist ein etwas anderer. GlassFish war bereits ein Projekt von SUN, als sie noch eigenständig waren, lange bevor sie von Oracle übernommen wurden. Oracle hat dann 2018 die Entwicklung von Java EE und GlassFish eingestellt und den kompletten Code der Eclipse Foundation übereignet (u.a. ist Java EE deswegen auch nicht mehr im JDK). Da die Java-Namensrechte aber weiterhin bei Oracle liegen, wurde aus Java EE bei Eclipse dann Jakarta EE. Um eine Weiterentwicklung zu gewährleisten, wurde bei der Umstellung von Jakarta EE 8 auf Jakarta EE 9 entschieden, die Namensräume von |
Hallo Uhle, |
Vermutlich wird mehr als nur die Ersetzung der Namensräume notwendig sein, auch wenn es wohl Tools gibt, die einen zumindest bei der Umstellung auf Jakarta EE 9 unterstützen. Aber gerade nach einer so umfassenden Änderung muß ja alles ausgiebig getestet werden. Was die Updates bzgl. Jakarta EE 8 betrifft, so ist die angesprochene Version 2.3.7 von JAXB-RI erst im letzten Oktober erschienen. Aber ja, wer kann schon in die Zukunft sehen und vorhersagen, wie lange es solche Updates noch geben wird. |
Die Umstellung auf Jakarta EE geht auch deshalb nicht "mal eben so", weil HBCI4Java nicht nur von Hibiscus verwendet wird sondern auch von einer unüberschaubaren Anzahl von Programmen - oft solche, die gar nicht öffentlich bekannt sind sondern irgendwo in den Integrationen von Zahlungsanbindungen bei Firmen stecken. |
Man sollte das in einer neuen Major Version starten, denn mehr und mehr
wird das gebraucht.
Bei 3.x dann irgendwann nur noch bugs beheben. 4.x als neue major version
mit Jakarta EE weiter entwickeln.
Das fände ich gut.
Gruß
Janning
Am 7. Februar 2023 07:47:09 schrieb Olaf Willuhn ***@***.***>:
… Die Umstellung auf Jakarta EE geht auch deshalb nicht "mal eben so", weil
HBCI4Java nicht nur von Hibiscus verwendet wird sondern auch von einer
unüberschaubaren Anzahl von Programmen - oft solche, die gar nicht
öffentlich bekannt sind sondern irgendwo in den Integrationen von
Zahlungsanbindungen bei Firmen stecken.
Mit einer unkoordinierten Umstellung würde man eine Menge Integrationen
kaputt machen.
--
Reply to this email directly or view it on GitHub:
#73 (comment)
You are receiving this because you are subscribed to this thread.
Message ID: ***@***.***>
|
Gute Idee. Die Entwicklung für 4.x sollte dann aber erstmal in einem neuen Branch "4.0" neben "master" geschehen. Ich nehme pern PRs entgegen. |
Das Vorgehen finde ich gut.
|
Die beiden Vorgehensweisen schließen sich nicht wirklich aus. In beiden Fällen gibt es zwei separate Entwicklungszweige. Ob auf dem neuen dann "jakarta", "4.0", "next" o.ä. steht (ich hab schon so viele Varianten gesehen), ist nun wirklich nicht so wichtig. Es ist nur ein Name. Und ob auf master (Version 3.1.x) nur noch Bugfixes oder auch mal eine andere Änderung eingepflegt wird, kann vermutlich auch dann entschieden werden, wenn es dazu kommen sollte. |
Oben ein Pull-Request, der auf die Version jaxb 4.0 aufsetzt und mit jakarta packages arbeitet. |
Hab den PR #75 in einen neuen Branch "4.0" gemerged. |
Super, vielen Dank :) |
@willuhn Ist es möglich für den Branch 4.0 einen Build zu machen und ins Maven-Repo zu pushen? |
Ich habe ehrlich gesagt keine Ahnung, wie ich es hinkriege, einen abweichenden Branch unter einer anderen artifactId zu publishen. Hat das jemand schonmal gemacht? |
Bleibt die Frage, ob die |
Die artifact-id müsste in der pom.xml der Eintrag hier sein: In der Wildnis habe ich beide Varianten gefunden. Einige fügen -jakarta- im Namen ein, die anderen machen bei Version x einen harten Schnitt hin zu jakarta. |
Das weiss ich. Die Frage ist: Reicht die Änderung dort und wird das vom Repo so direkt akzeptiert oder muss das noch irgendwo registriert werden? Und kann ich ein "man release:prepare && mvn release:perform" direkt auf dem Branch machen oder muss der Branch in der pom.xml nochmal explizit angegeben werden?
Einfach mit der nächsten Major-Version auf jakarte zu wechseln, brigt das Risiko, unnötig Integrationen zu brechen, da bei den Usern mit Java < 17 plötzlich zusätzliche Abhängigkeiten nötig sind, die vorher nicht erforderlich waren. |
Ich fände es wie folgt am besten:
- Neue Version 4.x
- Keine Änderung der artifactId
- Umstellung auf jakarta und JDK17
So macht das im Moment zb auch Spring Boot und andere. Die Zeit ist
jetzt richtig.
Wenn Du jakarta im Namen hast, wirst Du das nie wieder los.
Gruß
Janning
Am 10.03.23 um 08:52 schrieb Olaf Willuhn:
… Die artifact-id müsste in der pom.xml der Eintrag hier sein:
hbci4j-core Der Eintrag kann in Branch 4 angepasst werden.
Das weiss ich. Die Frage ist: Reicht die Änderung dort und wird das vom
Repo so direkt akzeptiert oder muss das noch irgendwo registriert
werden? Und kann ich ein "man release:prepare && mvn release:perform"
direkt auf dem Branch machen oder muss der Branch in der pom.xml nochmal
explizit angegeben werden?
In der Wildnis habe ich beide Varianten gefunden. Einige fügen
-jakarta- im Namen ein, die anderen machen bei Version x einen
harten Schnitt hin zu jakarta.
Einfach mit der nächsten Major-Version auf jakarte zu wechseln, brigt
das Risiko, unnötig Integrationen zu brechen, da bei den Usern mit Java
< 17 plötzlich zusätzliche Abhängigkeiten nötig sind, die vorher nicht
erforderlich waren.
—
Reply to this email directly, view it on GitHub
<#73 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AARJBJMIOXHMU33RGLHQIXTW3LMUNANCNFSM56HOMB7Q>.
You are receiving this because you commented.Message ID:
***@***.***>
|
Ich halte das auch für die bessere Lösung.
Das sehe ich persönlich genauso.
Das wird sich ohnehin nicht komplett vermeiden lassen, wie der ursprüngliche Problembericht hier (#73) zeigt, zumal Java EE (und damit auch JAXB) bereits seit Java 11 nicht mehr im JDK integriert ist. Ich glaube, es gibt keinen idealen Weg, um Nutzer vor eventuellen Problemen bei unbedarften Updates zu bewahren, da die Situation mit der unterschiedlichen Handhabung bei der Umstellung der einzelnen Bibliotheken auf Jakarta EE nun einmal so ist, wie sie's ist. Entweder ist es die eine oder andere Bibliotheksversion, die ggf. zu neu und damit unpassend zu den anderen ist. Vielleicht ist es sinnvoll, auf die Umstellung von Java EE auf Jakarta EE bei der Verwendung der Bibliotheken JAXB API und JAXB Runtime in Version 4.0 von HBCI4Java zusätzlich auch in |
Version 4.0.0 (jakarta.* und 3.1.67 (javax.*) sind online: https://oss.sonatype.org/#nexus-search;gav~com.github.hbci4j~hbci4j-core~~~~kw,versionexpand |
Super, vielen Dank! :) |
Wow! Ich hatte gerade alles andere bei uns auf jakarta umgestellt und wollte mich jetzt hier nützlich machen. Danke, Olaf! |
Hello,
we upgraded to Java 17 and new jaxb libraries.
We now get the following exception:
2022-08-11T09:31:52.119+02:00 ERROR InvoiceDownloadServlet: 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: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 javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662) ~[jaxb-api-2.3.1.jar:2.3.0]
at org.kapott.hbci.GV.generators.AbstractSEPAGenerator.marshal(AbstractSEPAGenerator.java:43) ~[hbci4j-core-3.1.37.jar:3.1.37]
at org.kapott.hbci.GV.generators.GenLastSEPA00800302.generate(GenLastSEPA00800302.java:161) ~[hbci4j-core-3.1.37.jar:3.1.37]
at org.kapott.hbci.GV.generators.GenLastSEPA00800302.generate(GenLastSEPA00800302.java:56) ~[hbci4j-core-3.1.37.jar:3.1.37]
at com.xxxxx.downloadSepaXml(InvoiceDownloadServlet.java:200) [classes/:?]
....
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1444) ~[catalina.jar:10.0.18]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252) ~[catalina.jar:10.0.18]
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]
The jar file jaxb-impl-2.3.6.jar does contain the package com.sun.xml but the newer versions like 3.x or 4.x doesn't.
It seems the old sun implementation is somewhere references and not the new glassfish impl.
Any help would be appreciated how to fix this reference.
Thanks a lot!
The text was updated successfully, but these errors were encountered: