Java jaxb列表中的默认元素命名
假设我有以下两个类,我希望使用jaxb来处理它们Java jaxb列表中的默认元素命名,java,jaxb,Java,Jaxb,假设我有以下两个类,我希望使用jaxb来处理它们 @XmlRootElement(name = "VirtualizationData") public class VirtualizationData { @XmlElement(name = "VirtualOrganization") public List<VirtualOrganization> Organizations = new ArrayList<VirtualOrganization>(
@XmlRootElement(name = "VirtualizationData")
public class VirtualizationData
{
@XmlElement(name = "VirtualOrganization")
public List<VirtualOrganization> Organizations = new ArrayList<VirtualOrganization>();
}
下面是一个编组xml的示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VirtualizationData>
<VirtualOrganization Name="localhost" Id="555"/>
</VirtualizationData>
我有两个问题-
在lexicore的回答之后,我想进一步澄清我的问题。困扰我的是这些注释的冗长,以及我在不同的地方会有相同的字符串和注释。提出这个问题的目的是希望找到一个超越配置风格的解决方案的约定。有没有办法在jaxb中创建这样的约定 简短回答:不,没有注释就没有(简单的)方法来改变它,因为注释是改变它的(简单的)方法 长答覆:
虚拟化数据
,虚拟化数据
都有意义。但默认情况下必须选择一种方法。如果它是,就像你建议的那样,VirtualizationData
,你总是可以问-为什么不VirtualizationData
VirtualOrganization
是列表的泛型类型参数。在编译模式时,您可以很容易地获得类似于List
的内容,但是Serializables
作为元素名并没有什么意义。所以我们可以得出结论,集合项类的名称不一定为属性提供有意义的名称。我认为您无法在VirtualOrganization
上定义默认的集合元素名称(如果这是您所要求的)我在上面说过,没有(简单的)方法可以改变这一点。但这是可行的。您可以编写和配置自己的注释读取器,该读取器将实现不同的默认命名。不过,我绝对不建议这样做。只需使用注释进行自定义。我认为您需要对您的案例进行更详细的阐述,或许可以添加示例。您知道可以在注释中使用字符串常量,对吗?如果您有相同的注释结构,是否可以重构Java类?如果没有看到代码,很难说。@lexicore-你说的“如果你有相同的注释结构,有可能重构Java类吗?”是什么意思?例如,如果你在许多类中有
name
和value
属性,那么将这些属性提取到一个超类中可能是有意义的。或聚合到聚合类中。@lexicore-确实如此,并且这些属性已经存在于超类中。然而,每次我有一个带有这个超类的列表时,我都需要在XmlElements属性中指定所有可能的内在类,并在添加新的列表时修改所有列表……对不起,理论上讲这有点太难了。如果你能给出具体的例子?那就更容易给出具体的答案了。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VirtualizationData>
<VirtualOrganization Name="localhost" Id="555"/>
</VirtualizationData>