You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:52:03