Java JAXB在xml中不使用xsi:type而是使用实际的具体类名来解组具体类
我想知道是否有人可以帮助我解决JAXB问题 如果我有一个包含两个具体实现的抽象类:例如(为了简洁起见,我省略了大部分标记/xml): 有没有办法让下面的xml正确地解组到相应的具体类Java JAXB在xml中不使用xsi:type而是使用实际的具体类名来解组具体类,java,xml,jaxb,Java,Xml,Jaxb,我想知道是否有人可以帮助我解决JAXB问题 如果我有一个包含两个具体实现的抽象类:例如(为了简洁起见,我省略了大部分标记/xml): 有没有办法让下面的xml正确地解组到相应的具体类 <request> <car>...</car> </request> ... 而不是以下内容: <request> <vehicle xsi:type="car"></vehicle> </request>
<request>
<car>...</car>
</request>
...
而不是以下内容:
<request>
<vehicle xsi:type="car"></vehicle>
</request>
我之所以需要它,是为了与我们已经发布的API向后兼容
提前感谢。您可以使用注释并对具体实现进行注释。在本例中,汽车或货车上方的@XmlType()。这样,您将保持xml的通用性。您可以使用注释并注释具体实现。在本例中,汽车或货车上方的@XmlType()。这样,您将保持xml的通用性。我刚刚在俄语社区回答了类似的问题。也许你在寻找这样的东西:
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public List<Vehicle> getVehicles() {
return vehicles;
}
UPD:
评论后更新。对于单个条目,只要删除列表即可:
@XmlRootElement(name = "request")
class Request {
private Vehicle vehicles;
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public Vehicle getVehicles() {
return vehicles;
}
public void setVehicles(Vehicle vehicles) {
this.vehicles = vehicles;
}
}
希望这会有所帮助。我刚刚在俄语社区回答了类似的问题。也许你在寻找这样的东西:
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public List<Vehicle> getVehicles() {
return vehicles;
}
UPD:
评论后更新。对于单个条目,只要删除列表即可:
@XmlRootElement(name = "request")
class Request {
private Vehicle vehicles;
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public Vehicle getVehicles() {
return vehicles;
}
public void setVehicles(Vehicle vehicles) {
this.vehicles = vehicles;
}
}
希望这会有所帮助。您可以使用注释并对具体实现进行注释。在本例中,Car或van上面的@XmlType()可以使用注释并注释具体实现。在本例中,Car或VANT上方的@XmlType()感谢您的回复。我没有名单。我需要xml为“”或“”,并让JAXB分别将其解组到请求对象中的“Car”或“Van”。@Osramadus它无论如何都能工作。这是一个通用的解决方案。刚刚用单个条目更新了答案。=)非常感谢你。成功了。感谢所有回应的人。非常感谢。谢谢您的回复。我没有名单。我需要xml为“”或“”,并让JAXB分别将其解组到请求对象中的“Car”或“Van”。@Osramadus它无论如何都能工作。这是一个通用的解决方案。刚刚用单个条目更新了答案。=)非常感谢你。成功了。感谢所有回应的人。非常感谢。
@XmlRootElement(name = "request")
class Request {
private Vehicle vehicles;
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public Vehicle getVehicles() {
return vehicles;
}
public void setVehicles(Vehicle vehicles) {
this.vehicles = vehicles;
}
}