我需要使用 XStream 将受 XSD 约束的 XML 映射到 Java 对象。 XSD 有 4 个复杂类型元素,它们是“选择”元素,这 4 个中的任何一个都可以出现在根标记下的 XML 中。
我一直在研究 XStream,但在我看来,要映射这样一个 XML,我需要 8 个类。如何?这是...
例如,我的根元素是 VEHICLE,XML 中的每个复杂类型是 a) CAR b) BIKE c) TRUCK d) TRACTOR。它们中的每一个都具有不同的属性。要将其映射到 Xstream 并使 XML(由 XStream 生成)兼容 XSD,我们需要 8 个类,即。 VehicleCarWrapper ->(有)Car,VehicleTruckWrapper ->(有)Truck,VehicleBikeWrapper ->(拥有)自行车和VehicleTractorWrapper ->(拥有)拖拉机。
除了破旧的解决方案之外,还有人有其他建议吗? Xstream 中有没有一种方法可以映射 XML 根的这种“选择”元素?因此,所有 4 个(即卡车、汽车、自行车、拖拉机)都可以作为关联实体进入包装器,但 XStream 始终忽略除一个关联之外的所有关联,因此创建了一个符合 XSD 的 XML。
希望我的问题很清楚。
非常感谢!
最佳答案
解决方法如下:
车辆类别:
公共(public)类车辆{ @XStreamAlias("vehicleAttribute") 字符串车辆属性;
汽车类:
@XStreamAlias("car")
public class Car extends Vehicle {
@XStreamAlias("carattribute")
String carAttribute;
}
自行车类:
@XStreamAlias("bike")
public class Bike extends Vehicle {
@XStreamAlias("vehicleattribute")
String bikeAttribute;
}
然后是一些 XStream 配置:
XStream xstream = new XStream();
xstream.processAnnotations(Car.class);
xstream.processAnnotations(Bike.class);
xstream.processAnnotations(Vehicle.class);
创建一些车辆并告诉 XStream 给 XML'em。
System.out.println(xstream.toXML(v1));
System.out.println(xstream.toXML(v2));
这是你想要的输出:
<car>
<carattribute>my car</carattribute>
</car>
<bike>
<vehicleattribute>my bike</vehicleattribute>
</bike>
关于java - Xstream 映射 XML 的 "choice"元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735254/