could someone help me how should my Java class look like when I would like to unmarshall this xml?
<content>
<status>NACK</status>
<securitiesFinancingTrade>
<id version="1" type="originalDealId">999999</id>
</securitiesFinancingTrade>
<schemaVersion>Schema1</schemaVersion>
<error>
<type>MalformedXML</type>
<message>Message 1</message>
</error>
<error>
<type>MalformedXML</type>
<message>Message 2</message>
</error>
</content>
Currently I have it like this:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "content", propOrder = {
"status",
"securitiesFinancingTrade",
"schemaVersion",
"error"
})
public class Content implements Serializable {
private final static long serialVersionUID = -1L;
protected ContentStatusEnumType status;
protected SecuritiesFinancingTrade securitiesFinancingTrade;
protected String schemaVersion;
protected List<Error> error;
public ContentStatusEnumType getStatus() {
return status;
}
public void setStatus(ContentStatusEnumType status) {
this.status = status;
}
public SecuritiesFinancingTrade getSecuritiesFinancingTrade() {
return securitiesFinancingTrade;
}
public void setSecuritiesFinancingTrade(SecuritiesFinancingTrade securitiesFinancingTrade) {
this.securitiesFinancingTrade = securitiesFinancingTrade;
}
public String getSchemaVersion() {
return schemaVersion;
}
public void setSchemaVersion(String schemaVersion) {
this.schemaVersion = schemaVersion;
}
public List<Error> getError() {
return error;
}
public void setError(List<Error> error) {
this.error = error;
}
}
and the Error class looks like this:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "error", propOrder = {
"type",
"message"
})
public class Error implements Serializable {
private final static long serialVersionUID = -1L;
@XmlAttribute(name = "type", required = true)
protected String type;
@XmlAttribute(name = "message", required = true)
protected String message;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
I do not receive any unmarshalling error from JAXB, it even puts two errors in the list as expected, but the type and message there are null.
CodePudding user response:
In your class Error
you have annoated the properties
type
and message
with @XmlAttribute
.
That means, you can handle XML input with XML attributes, like this:
<error type="MalformedXML" message="Message"></error>
But actually you have input with XML elements, like this:
<error>
<type>MalformedXML</type>
<message>Message 1</message>
</error>
So, in your class Error
you need to replace @XmlAttribute
by
@XmlElement
, or just omit it altogether.
After doing this, the <error>
parts of your XML input
will be unmarshalled correctly.