xml - JAXB 在错误的情况下编组 xml 输出并缺少一些元素
问题描述
使用 JAXB 3.0、Java 1.11、Eclipse 2019-12。xml 对象中的值是使用 setter 方法设置的,当输出 xml 时,它看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<USERID>xxxxxxxxxxxx</USERID>
<clientIp>122.3.3</clientIp>
<revision>1</revision>
<sourceId>xxxxxxxxxx</sourceId>
代替
<?xml version="1.0" encoding="UTF-8"?>
<TrackFieldRequest USERID="xxxxxxxxxxx">
<Revision>1</Revision>
<ClientIp>122.3.3</ClientIp>
<SourceId>xxxxxxxxxx</SourceId>
<TrackID ID="xxxxxxxxxxxxxxxxxxxxxx"/>
<TrackID ID="xxxxxxxxxxxxxxxxxxxxxx"/>
</TrackFieldRequest>
这是元帅代码的片段
TrackFieldRequest request = tracker.buildRequest();
try {
javax.xml.bind.JAXBContext jaxbContext = javax.xml.bind.JAXBContext.newInstance(TrackFieldRequest.class);
//Create Marshaller
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
//Required formatting??
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
//Print XML String to Console
StringWriter sw = new StringWriter();
//Write XML to StringWriter
jaxbMarshaller.marshal(request, sw);
//Verify XML Content
String xmlContent = sw.toString();
System.out.println( xmlContent );
这是带注释的 jaxb 类 TrackFieldRequest 的一部分
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TrackFieldRequest", propOrder = {
"Revision",
"ClientIp",
"SourceId",
"TrackID"
})
@XmlRootElement(name = "TrackFieldRequest")
public class TrackFieldRequest {
@XmlElement(name = "Revision", required = true)
protected BigInteger Revision;
@XmlElement(name = "ClientIp", required = true)
protected String ClientIp;
@XmlElement(name = "SourceId", required = true)
protected String SourceId;
@XmlElement(name = "TrackID", required = true)
protected List<TrackFieldRequest.TrackID> TrackID;
@XmlAttribute(name = "USERID")
protected String userid;
:
:
public static class TrackID {
@XmlAttribute(name = "ID")
protected String id;
仔细检查了两个跟踪 ID 的内容,它们存在 System.out.println(request.getTrackID().get(0).getID()); System.out.println(request.getTrackID().get(1).getID());
任何想法为什么缺少多次出现的跟踪 id、缺少根元素以及元素名称的大小写不正确?
解决方案
去雅加达工作。摆脱了所有的 jaxb jar 并保留了 jakarta jar jakarta.xml.bind-api-3.0.0 并重新编写了导入语句
导入 jakarta.xml.bind.*;
并更新了 jaxb.properties
jakarta.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory
推荐阅读
- amazon-web-services - Amazon Location CalculateRoute API 是否支持返回多个路由,以便您可以使用返回的结果找到最短路径?
- sql - 在主打开查询选择语句中使用 where sub select
- c# - IdentityServer4 (v3.1.x) 实体框架 - 会话不持久
- javascript - 在这个确切的函数中 if 子句下面的“return”的工作是什么?还请用文字解释这个功能是如何工作的
- json - 如何从go中的大json获取数据
- java - 如何在 Java Unirest POST 请求的字段中转义引号
- go - 从 GO WebAssembly 调用 JavaScript 事件
- kubernetes - Gitlab-ci Kubernetes 集群未创建命名空间(作业失败:未找到命名空间)
- android - 如何在 Android 相机 hal 中检索位置数据?
- r - 优化两个变量中的函数,创建一个向量作为输出?