The Java Architecture for XML Binding (JAXB) framework is used to easily convert between XML and Java class instances. You just have to define some annotations on the Java classes and properties and the framework uses those definitions to convert between them. But is also heavily used within the Java EE specification Java API for XML Web Services (JAX-WS) that implements the support for SOAP messages within Java Enterprise.
JAXB was integrated within the JVM itself, so you didn't need to add any code dependency to have the functionality within your application. But with the modularization performed in JDK 9, it was removed as the maintainers wanted to have a smaller JDK distribution that only contains the core concepts. That is also the reason why JavaFX was removed.
But what does that mean for your application if it uses JAXB and you want to run it on JDK 11? In this blog, we see the simple change you need to perform with the Payara Platform products to upgrade the application from JDK 8 to JDK 11.
JSON is the preferred format in some cases but XML certainly has a lot of benefits in some cases and thus JAXB is still important in today's development. So what do you need to run JAXB on JDK 11?
JAXB with JDK 11
As mentioned before, you didn't need any additional dependencies for your application when you were using JDK 8 to compile your project. Annotations like javax.xml.bind.annotation.XmlRootElement and XmlRootElement are resolved from within the JDK classes themselves.
When you switch to JDK 11 for the compilation, you will see that you encounter an error that the package could not be found. Adding this as a dependency to your maven project, for example, solves this problem.
Those JAXB annotations are available in this way and your application compiles again smoothly.
JAXB and Payara
As you can see in the above snippet, we have defined the dependency with the scope provided. So it will not be packaged within the WAR or EAR file together with your application. We have included them already for you within the Payara Products. And the reason is simple, JAX-WS is part of the Java EE and Jakarta EE full profile, so it should be simple for all our users to use any of the Enterprise specifications.
Now that the next LTS release of Java is around the corner, September 2021 with JDK 17, it is time to move away from the Java 8 version if you haven't done it yet. The removal of JAXB from the core Java platform isn't a large problem if you are using it in your application, directly or as part of JAX-WS for the SOAP support. You only need an additional dependency when you compile and package the project. At runtime, Payara already covers the removal of those classes for you.