ソースコードは変更していないにもかかわらず、JAXBを使用してXMLデータをパースしているコードでJAXBクラスが見つからないことを示すエラーが発生した
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(); }
調べたところ、JAXBAPIはJavaEE APIと見なされるためJava SE 9からデフォルトのクラスパスには含まれなくなり、Java11ではJDKから完全に削除されている模様
確かに、Java 8にしていたものをJava 11でビルドしていたのでこれが原因だった
解決策としては別途モジュールをmaven依存関係に追加するとのこと
<!-- API, java.xml.bind module --> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>2.3.2</version> </dependency> <!-- Runtime, com.sun.xml.bind module --> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.2</version> </dependency>