从Java对象生成XML时遇JAXB-API实现未找到错误,请求协助解决
解决JAXB-API实现未找到的错误
问题场景
尝试通过Java对象生成XML时,遇到错误:
Implementation of JAXB-API has not been found on module path or classpath.
相关转换代码:
@RequestMapping(value = "/writeToFile",method = RequestMethod.POST) public String writeFileXML(@RequestBody Customer customer) { try { File file=new File("D:\\vendorfile\\customer.xml"); FileWriter fileWriter=new FileWriter(file); JAXBContext jaxbContext=JAXBContext.newInstance(Customer.class); Marshaller marshaller=jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(customer, fileWriter); return "Marshaller successfull"; }catch(IOException ioException) { return ioException.getMessage(); }catch(Exception ex) { return ex.getMessage(); } }
当前使用的Maven依赖:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency>
错误原因
仅引入JAXB的API依赖(jaxb-api)不足以运行,因为JAXB API只是定义了接口规范,需要具体的实现类来完成XML序列化逻辑。从Java 9开始,JAXB被移出JDK核心包,必须手动添加实现依赖。
解决方案
在pom.xml中补充以下JAXB实现相关依赖:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.0</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
依赖说明
jaxb-impl:JAXB的核心实现,提供Marshaller、Unmarshaller的具体执行逻辑jaxb-core:辅助核心实现的基础工具类activation:JAXB依赖的Java激活框架,Java 9及以上版本需手动引入
额外注意事项
确保Customer类已正确配置JAXB注解,否则无法正常序列化:
@XmlRootElement public class Customer { private String name; private int age; // 必须提供无参构造函数(JAXB反射实例化需要) public Customer() {} // 标准getter/setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
更新依赖后重新构建项目,运行接口即可正常生成XML文件。
内容的提问来源于stack exchange,提问作者Jaydeep Acharjee
相关产品推荐
相关产品推荐

