Kompatibilitätsprobleme mit neueren Java-Versionen
Die verwendete Jaxb-Bibliothek funktioniert nicht mehr ohne weiteres auf neueren Java-Versionen, es gibt z. B. folgende Stacktraces unter java 17:
java.lang.NullPointerException: Cannot invoke "java.lang.reflect.Method.invoke(Object, Object[])" because "com.sun.xml.bind.v2.runtime.reflect.opt.Injector.defineClass" is null
at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:311)
at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:97)
at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:87)
at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:179)
at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:285)
at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:94)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:181)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:514)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:331)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:139)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1156)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:165)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:289)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:217)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:175)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:353)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:508)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:465)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:366)
Zur Korrektur scheint es sinnvoll zu sein, die Abhängigkeiten auf aktuelle Versionen zu erhöhen:
implementation group: 'jakarta.xml.bind', name: 'jakarta.xml.bind-api', version: '4.0.1'
implementation group: 'com.sun.xml.bind', name: 'jaxb-core', version: '4.0.4'
implementation group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '4.0.4'
implementation group: 'com.sun.xml.bind', name: 'jaxb-xjc', version: '4.0.4'
implementation group: 'jakarta.xml.ws', name: 'jakarta.xml.ws-api', version: '4.0.1'
implementation group: 'com.sun.xml.ws', name: 'jaxws-rt', version: '4.0.2'
implementation group: 'com.sun.xml.ws', name: 'rt', version: '4.0.2'
implementation group: 'com.sun.xml.ws', name: 'jaxws-ri', version: '4.0.2', ext: 'pom'
Außerdem müssen im Code einige javax
in package-namen durch jakarta
ersetzt werden. (Plugins von Drittparteien werden inkompatibel und müssen ähnliche Anpassungen machen!)
Edited by Jonathan Haas