[英]JAXB: The attribute name is undefined for the annotation type XmlElement
[英]JAXB variable attribute name, is it possible?
我必须生产这样的东西:
<Doc p1="something">
<Ext code="one"/>
<Ext name="two"/>
</Doc>
我知道如何用我的Doc类做这部分,“代码”和“名称”只是Doc的属性,所以我打算创建一个包装类Ext来产生该元素,但是我不确定如何在一种情况下,将“代码”用作属性,在另一种情况下,将“ name”用作属性。 我总是可以创建两个不同的包装器类,但是我想知道是否有一种更简单的方法,例如某种方式设置变量的@XmlAttribute(name =)。
您无法做您想做的事情-正如LINEMAN78所说,变量属性名称不是有效的XSD品牌。 如果您知道候选属性列表由什么组成(例如,Exts可以具有Code,Name,Foo,Bar和Baz),则可以使用@XmlAttribute
来定义它们; 默认情况下,不需要XmlAttribute
并且如果Java对象的值为null
,则不会在编组输出中显示。
变量属性名称对于xml模式定义无效,但是您可以为元素进行选择,因此可以是:
<Doc p1="something">
<Code>one</Code>
<Name>two</Name>
</Doc>
为此,您将使用JaxbElement,并且不需要包装类。 xsd看起来像这样:
<complexType name="Doc">
<sequence>
<choice maxOccurs="unbounded">
<element name="Code" type="string" />
<element name="Name" type="string" />
</choice>
</sequence>
<attribute name="p1" type="string" />
</complexType>
这将导致以下代码:
@XmlElementRefs({
@XmlElementRef(name = "Code", type = JAXBElement.class, required = false),
@XmlElementRef(name = "Name", type = JAXBElement.class, required = false)
})
protected List<JAXBElement<String>> codeOrName;
JaxbElement的用法如下:
new JAXBElement<String>(new QName( "", "Name" ), String.class, Doc.class, value);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.