JAXB 在错误的大小写中编组了 xml 输出并且缺少一些元素
JAXB marshalled xml output in wrong case and missing some elements
使用 JAXB 3.0,Java1.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 的一部分 class 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 罐子并保留了 jakarta 罐子 jakarta.xml.bind-api-3.0.0 并重新导入语句
导入jakarta.xml.bind.*;
并更新了 jaxb.properties
jakarta.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory
使用 JAXB 3.0,Java1.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 的一部分 class 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 罐子并保留了 jakarta 罐子 jakarta.xml.bind-api-3.0.0 并重新导入语句
导入jakarta.xml.bind.*;
并更新了 jaxb.properties
jakarta.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory