I'm trying to deserialize XML data into a Java content tree using JAXB, validating the XML data as it is unmarshalled:
try {
JAXBContext context = JAXBContext.newInstance("com.acme.foo");
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);
FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));
} catch (UnmarshalException ex) {
ex.printStackTrace();
} catch (JAXBException ex) {
ex.printStackTrace();
}
When I build the project with Java 8 it's fine, but building it with Java 11 fails with a compilation error:
package javax.xml.bind does not exist
How do I fix the issue?
解决方案
According to the release-notes, Java 11 removed the Java EE modules:
java.xml.bind (JAXB) - REMOVED
Java 8 - OK
Java 9 - DEPRECATED
Java 10 - DEPRECATED
Java 11 -
REMOVED
See JEP 320 for more info.
You can fix the issue by using alternate versions of the Java EE technologies. Simply add Maven dependencies that contain the classes you need:
javax.xml.bind
jaxb-api
2.3.0
com.sun.xml.bind
jaxb-core
2.3.0
com.sun.xml.bind
jaxb-impl
2.3.0