JAXB 不同子类使用相同的元素名称

本文探讨了如何使用XML与JAXB技术在云资源(如云主机、带宽和云硬盘)配置中进行数据交换。通过定义特定的Java类并使用@XmlRootElement和@XmlElementRefs注解,实现了不同类型云资源的灵活配置与解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求云主机、带宽、云硬盘配置的元素名称都为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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值