使用jaxb来生成多层嵌套xml

news/2024/11/17 4:41:48/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

问题

需要生成多层嵌套xml,类似如下内容:

xml"><A><B><C><!-- C类的字段 --></C><C><!-- 另一个C类的字段 --></C></B>
</A>

解决

C.java

import jakarta.xml.bind.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@XmlAccessorType(XmlAccessType.FIELD)
public class C {@XmlElement(nillable = true)private String field1;@XmlElement(nillable = true)private String field2;
}

这里使用到了lombok。注意这里需要设置@XmlAccessorType(XmlAccessType.FIELD)不然会出现:JAXB IllegalAnnotationException is thrown during parsing XML错误。

B.java

import jakarta.xml.bind.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@XmlAccessorType(XmlAccessType.FIELD)
public class B {@XmlElement(name = "C")  // 指定 XML 标签名称private List<C> cList;
}

这里设置了一个数组标签。

A.java

import jakarta.xml.bind.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class A {@XmlElement(name = "B")  // 指定 XML 标签名称private B b;
}

这里是根xml,所以,这里需要设置@XmlRootElement注解。

使用

	...StringWriter xmlWriter = new StringWriter();marshaller.marshal(uniteWorkReq, new StreamResult(xmlWriter));String xml = xmlWriter.toString();...

配置,依旧是如下方式注入:

@Beanpublic Jaxb2Marshaller marshaller() {Jaxb2Marshaller marshaller = new Jaxb2Marshaller();// this package must match the package in the <generatePackage> specified in// pom.xml
//        marshaller.setContextPath("com.cmdi.system.wsdl");marshaller.setPackagesToScan("com.xxx.xxxx.wsdl");return marshaller;}

参考

  • JAXB IllegalAnnotationException is thrown during parsing XML

http://www.ppmy.cn/news/1531267.html

相关文章

【机器学习】决策树算法

目录 算法引入 基尼系数&#xff1a; 决策树算法概述 决策树的关键概念 决策树的构建 代码实现 1. 定义决策树节点 2. 计算信息增益 3. 选择最佳分割特征 4. 构建决策树 5. 决策树预测 决策树的评估指标&#xff1a; 决策树的优缺点 优点&#xff1a; 缺点&…

JavaScript开发网页中不常用但很重要的用法

一、Proxy对象 基本概念 Proxy是JavaScript中的一个元编程特性&#xff0c;它允许创建一个代理对象&#xff0c;该代理对象可以拦截并自定义对目标对象的基本操作&#xff08;如属性查找、赋值、函数调用等&#xff09;。例如&#xff0c;创建一个简单的Proxy对象来拦截对目标对…

Python中的数据处理与分析:从基础到高级

在数据科学和数据分析领域&#xff0c;Python凭借其丰富的库和强大的生态系统&#xff0c;成为了最受欢迎的语言之一。本文将从基础到高级&#xff0c;详细介绍如何使用Python进行数据处理和分析&#xff0c;涵盖数据清洗、数据转换、数据可视化等多个方面。 1. 数据导入与导出…

跨游戏引擎的H5渲染解决方案(腾讯)

本文是腾讯的一篇H5 跨引擎解决方案的精炼。 介绍 本文通过实现基于精简版的HTML5&#xff08;HyperText Mark Language 5&#xff09;来屏蔽不同引擎&#xff0c;平台底层的差异。 好处&#xff1a; 采用H5的开发方式&#xff0c;可以将开发和运营分离&#xff0c;运营部门自…

心理教育辅导系统的设计与Spring Boot实现

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

声波定位技术在地下管道中如何应用

随着城市化进程的加速&#xff0c;地下管道作为城市基础设施的重要组成部分&#xff0c;其安全、高效的维护与管理显得尤为重要。声波定位技术作为一种非破坏性探测手段&#xff0c;在地下管道中的应用日益广泛&#xff0c;成为提升管道维护和管理水平的重要工具。接下来给大家…

python dict函数介绍

在 Python 中,dict() 是用来创建字典对象的内置函数。字典(dictionary)是一个无序的可变容器,存储键-值对。dict() 函数有多种使用方式,能够接受不同的参数形式来创建字典。 dict() 函数的语法: dict(**kwargs) dict(mapping, **kwargs) dict(iterable, **kwargs)参数说…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 7 推送卡片刷新消息

场景介绍 如今衣食住行娱乐影音应用占据了大多数人的手机&#xff0c;一部手机可以满足日常大多需求&#xff0c;但对需要经常查看或进行简单操作的应用来说&#xff0c;总需要用户点开应用体验较繁琐。针对此种场景&#xff0c;HarmonyOS提供了Form Kit&#xff08;卡片开发服…