要求云主机、带宽、云硬盘配置的元素名称都为itemConfig,并且能根据对应的类生成正确的元素 。
使用@XmlMixed 和 @XmlElementRefs 可实现
//订单选项配置
@XmlTransient
public class OrderItemConfig {
}
//订单云主机配置
@XmlRootElement(name = "itemConfig")
public class VMCItemConfig extends OrderItemConfig{
private String memSize;
private String cpuNum;
private String name;
}
//订单带宽配置
@XmlRootElement(name = "itemConfig")
public class NETWORKItemConfig extends OrderItemConfig{
private String type;
private String name;
private String regionId;
}
//订单云硬盘配置
@XmlRootElement(name = "itemConfig")
public class EBSCItemConfig extends OrderItemConfig {
private String volumeType;
}
public class OrderItem {
private String master;
private OrderItemConfig itemConfig;
@XmlMixed
@XmlElementRefs({
@XmlElementRef(type=NETWORKItemConfig.class),
@XmlElementRef(type=VMCItemConfig.class),
@XmlElementRef(type=EBSCItemConfig.class)})
public void setItemConfig(OrderItemConfig itemConfig) {
this.itemConfig = itemConfig;
}
}
<items>
<itemConfig>
<cpuNum>1</cpuNum>
<memSize>4</memSize>
<name>pc-1</name>
</itemConfig>
<resourceType>VMC</resourceType>
</items>
<items>
<itemConfig>
<volumeType>SATA</volumeType>
</itemConfig>
<resourceType>EBSC</resourceType>
</items>
<items>
<itemConfig>
<name>bandwith-001</name>
<regionId>gz-t</regionId>
<type>standalone</type>
</itemConfig>
<resourceType>NETWORK</resourceType>
</items>