我在用JAXB
使用以下命令生成将 xml 解组为 java 实体的代码xsd
原理图文件。问题是生成的代码不会生成name
of an organization
在以下 xml 中指定:
<organization>
<name>Some organization's name goes here</name>
</organization>
这是 xsd 的定义Organization
数据类型:
<xs:complexType name="Organization">
<xs:sequence>
<xs:element name="name" type="ON" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="classCode" type="EntityClassOrganization" use="optional" fixed="ORG"/>
</xs:complexType>
这里是xsd
的定义ON
数据类型:
<xs:complexType name="ON" mixed="true">
<xs:annotation>
<xs:documentation>
A name for an organization. A sequence of name parts.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="delimiter" type="en.delimiter"/>
<xs:element name="prefix" type="en.prefix"/>
<xs:element name="suffix" type="en.suffix"/>
</xs:sequence>
<xs:attribute name="use" use="optional" type="set_EntityNameUse">
<xs:annotation>
<xs:documentation>
A set of codes advising a system or user which name
in a set of like names to select for a given purpose.
A name without specific use code might be a default
name useful for any purpose, but a name with a specific
use code would be preferred for that respective purpose.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
这是由以下命令创建的结果java代码JAXB
:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ON", propOrder = {"content"})
public class ON {
@XmlElementRefs({
@XmlElementRef(name = "delimiter", namespace = "urn:something", type = JAXBElement.class),
@XmlElementRef(name = "prefix", namespace = "urn:something", type = JAXBElement.class),
@XmlElementRef(name = "suffix", namespace = "urn:something", type = JAXBElement.class)
})
@XmlMixed
protected List<Serializable> content;
@XmlAttribute(name = "use")
protected List<String> use;
public List<Serializable> getContent() {
if (content == null) {content = new ArrayList<Serializable>();}
return this.content;
}
public List<String> getUse() {
if (use == null) {use = new ArrayList<String>();}
return this.use;
}
}
这个生成的 java 类存在几个问题。首先,它创建了List<Serializable> content;
而不是创建单独的属性delimiter
, prefix
, and suffix
。同样重要的是,它也无法让我访问name
顶部 xml 中的标签。当我删除mixed="true"
来自ON
xsd 文件中的定义,内容列表被替换为单独的属性delimiter
, prefix
, and suffix
,但我仍然无法获取文本内容name
元素。我犹豫要不要删除mixed=true
因为我读到 mix=true 指定了complextype
可以包含elements
, attributes
, and text
.
我如何更改上面的代码,以便生成一个用于检索文本的方法name
元素除了为每个其他元素/属性生成单独的方法之外?