本文主要是介绍JAXB 不同子类使用相同的元素名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要求云主机、带宽、云硬盘配置的元素名称都为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>
参考:https://stackoverflow.com/questions/10940267/jaxb-xmlmixed-usage-for-reading-xmlvalue-and-xmlelement/11099303#11099303
这篇关于JAXB 不同子类使用相同的元素名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!