Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB在xml中不使用xsi:type而是使用实际的具体类名来解组具体类_Java_Xml_Jaxb - Fatal编程技术网

Java JAXB在xml中不使用xsi:type而是使用实际的具体类名来解组具体类

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>

我想知道是否有人可以帮助我解决JAXB问题

如果我有一个包含两个具体实现的抽象类:例如(为了简洁起见,我省略了大部分标记/xml):

有没有办法让下面的xml正确地解组到相应的具体类

<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;
    }
}