Wyjątek: „Brakujące pole wskaźnika klasy z wiersza bazy danych [UnmarshalRecordImpl ()].” Podczas odmrażania XML za pomocą EclipseLink JAXB (MOXy)
Czy jest to jakikolwiek sposób na unmarshalling za pomocą adnotacji @ XmlDescriminatorNode / @ XmlDescrimintatorValue następnego XML lub jakiegokolwiek obejścia:
<assets>
<asset type="full">
<data_file role="source">
<locale name="ru-RU"/>
</data_file>
<data_file role="extension">
<locale name="ru-RU"/>
</data_file>
<data_file>
<locale name="ru-RU"/>
</data_file>
</asset>
</assets>
Moje klasy mapowania:
@XmlRootElement(name="data_file")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlDiscriminatorNode("@role")
public abstract class BaseDataFile implements Serializable {
@XmlPath("@role")
@XmlAttribute(name = "role")
private String role;
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
@XmlRootElement(name="data_file")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlDiscriminatorValue("source")
public class SourceDataFile extends BaseDataFile {
}
@XmlRootElement(name="data_file")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlDiscriminatorValue("source")
public class SourceDataFile extends BaseDataFile {
}
@XmlRootElement(name="data_file")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlDiscriminatorValue("extension")
public class SourceDataFile extends BaseDataFile {
}
@XmlRootElement(name="asset")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlDiscriminatorNode("@type")
public abstract class BaseAsset implements Serializable {
@XmlPath("@type")
@XmlAttribute(name = "type")
private String type;
@XmlPath("data_file")
private List<BaseDataFile> dataFiles;
public List<BaseDataFile> getDataFiles() {
return dataFiles;
}
public void setDataFiles(List<BaseDataFile> dataFiles) {
this.dataFiles = dataFiles;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
Błąd występuje, jeśli XML zawiera element jak poniżej, bez"rodzaj" atrybut:
<data_file>
<locale name="ru-RU"/>
</data_file>
Z góry dziękuję