使用jaxb来生成多层嵌套xml

devtools/2024/9/29 14:08:37/
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/devtools/118721.html

相关文章

FPGA实现PCIE视频采集转HDMI输出,基于XDMA中断架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存Native视频时序生成RGB转HDMI输出模块Windows版本XDMA驱动安装Linux版本XDMA驱动安装工程源…

C++ Qt 之 QPushButton 好看的样式效果实践

文章目录 1.前序2.效果演示3.代码如下 1.前序 启发于 edge 更新 web 页面&#xff0c;觉得人家做的体验挺好 决定在Qt实现&#xff0c;方便以后使用 2.效果演示 特性介绍&#xff1a; 默认蓝色鼠标移入 渐变色&#xff0c;鼠标变为小手鼠标移出 恢复蓝色&#xff0c;鼠标恢…

WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源

WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源 1、嵌入资源读取 当文件属性的生成操作设置为嵌入资源时&#xff0c;读取方式如下&#xff1a; string name System.Reflection.Assembly.GetExecutingAssembly().GetName().Name "Resource\testproject\test.pn…

Python 多进程解析:Multiprocessing 高效并行处理的奥秘

Python 多进程解析&#xff1a;Multiprocessing 高效并行处理的奥秘 文章目录 Python 多进程解析&#xff1a;Multiprocessing 高效并行处理的奥秘一 多进程1 导入进程标准模块2 定义调用函数3 创建和启动进程 二 存储进程结果 Queue三 threading & multiprocessing 对比1 …

Java多线程在单体、微服务、服务网格与云原生架构中的理解与线程安全保障:总结与对比

1. 引言 多线程在现代软件开发中的应用广泛&#xff0c;从单体应用到微服务、服务网格以及云原生架构&#xff0c;不同架构下对多线程的理解和线程安全保障存在差异。本文将分别分析这四种架构下的多线程机制&#xff0c;提取其共性与区别&#xff0c;帮助开发者在不同场景下合…

计算机的软件知识

1.4 软件知识 1.4.1 软件及其分类 软件是计算机系统中不可或缺的一部分&#xff0c;它是指计算机程序及其相关文档的集合&#xff0c;是交付给客户的一整套解决方案。软件不仅仅是程序代码&#xff0c;还包括了用自然语言描述的软件功能需求、设计文档、项目计划、用户手册等…

docker简单熟悉

‌Docker 容器和‌虚拟机区别‌ Docker容器与虚拟机的主要区别在于虚拟化层次和资源占用&#xff1a; ‌虚拟化层次‌&#xff1a;Docker容器在操作系统级别进行虚拟化&#xff0c;共享宿主机的内核&#xff1b;而虚拟机在硬件级别进行虚拟化&#xff0c;每个虚拟机都拥有独立…

大数据毕业设计选题推荐-起点小说数据分析与可视化平台-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…