无法在 JAXB 解组中映射字段,字段填充为 null
Not able to map field in JAXB unmarshalling, fields getting populated as null
我有一个 XML,我想使用 JAXB 将其转换为 POJO,但我无法做到,父 class 中的所有元素都被填充为 null
.
输入XML:
<Response>
<parameters>
<Id>101</Id>
<Status>SUCCESS</Status>
</parameters>
</Response>
FileWriterService.writeMethod()
JAXBContext context = JAXBContext.newInstance(Response.class);
Response response = (Response) context.createUnmarshaller().unmarshal(new
StringReader(inputXml));
System.out.println("response: " + response);
输出:
response: ClassPojo [parameters = ClassPojo [Id = null, Status = null]]
Response.java
@XmlRootElement(name="Response")
public class Response {
private Parameters parameters;
public Parameters getParameters() {
return parameters;
}
public void setParameters(Parameters parameters) {
this.parameters = parameters;
}
@Override
public String toString() {
return "ClassPojo [parameters = " + parameters + "]";
}
}
Parameters.java
public class Parameters {
private String Id;
private String Status;
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
public String getStatus() {
return Status;
}
public void setStatus(String Status) {
this.Status = Status;
}
@Override
public String toString() {
return "ClassPojo [Id = " + Id + ", Status = " + Status + "]";
}
}
尝试使用@XmlElement 注释,此注释将字段映射到 xml 元素
Response.java
@XmlElement
private Parameters parameters;
Parameters.java
@XmlElement
private String Id;
@XmlElement
private String Status;
感谢Lakshan 指点。实施您的解决方案后,原始问题得到解决,但出现相关错误 com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
除了您的更改之外,我还必须添加 XmlAccessorType
:
@XmlRootElement(name = "Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {
我有一个 XML,我想使用 JAXB 将其转换为 POJO,但我无法做到,父 class 中的所有元素都被填充为 null
.
输入XML:
<Response>
<parameters>
<Id>101</Id>
<Status>SUCCESS</Status>
</parameters>
</Response>
FileWriterService.writeMethod()
JAXBContext context = JAXBContext.newInstance(Response.class);
Response response = (Response) context.createUnmarshaller().unmarshal(new
StringReader(inputXml));
System.out.println("response: " + response);
输出:
response: ClassPojo [parameters = ClassPojo [Id = null, Status = null]]
Response.java
@XmlRootElement(name="Response")
public class Response {
private Parameters parameters;
public Parameters getParameters() {
return parameters;
}
public void setParameters(Parameters parameters) {
this.parameters = parameters;
}
@Override
public String toString() {
return "ClassPojo [parameters = " + parameters + "]";
}
}
Parameters.java
public class Parameters {
private String Id;
private String Status;
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
public String getStatus() {
return Status;
}
public void setStatus(String Status) {
this.Status = Status;
}
@Override
public String toString() {
return "ClassPojo [Id = " + Id + ", Status = " + Status + "]";
}
}
尝试使用@XmlElement 注释,此注释将字段映射到 xml 元素
Response.java
@XmlElement
private Parameters parameters;
Parameters.java
@XmlElement
private String Id;
@XmlElement
private String Status;
感谢Lakshan 指点。实施您的解决方案后,原始问题得到解决,但出现相关错误 com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
除了您的更改之外,我还必须添加 XmlAccessorType
:
@XmlRootElement(name = "Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {