Я использую xjc для генерации классов Java из схемы XML, и ниже приводится выдержка из XSD.
<xs:element name="NameInfo">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="UnstructuredName"/> <!-- This line -->
<xs:sequence>
<xs:element ref="StructuredName"/>
<xs:element ref="UnstructuredName" minOccurs="0"/> <!-- and this line! -->
</xs:sequence>
</xs:choice>
<xs:element ref="SomethingElse" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
По большей части сгенерированные классы хороши, но для приведенного выше блока я бы получил что-то вроде:
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
со следующим комментарием над ним:
* You are getting this "catch-all" property because of the following reason:
* The field name "UnstructuredName" is used by two different parts of a schema. See:
* line XXXX of file:FILE.xsd
* line XXXX of file:FILE.xsd
* To get rid of this property, apply a property customization to one
* of both of the following declarations to change their names:
* Gets the value of the content property.
Я поместил комментарий в конце рассматриваемой строки.
В настоящее время я не думаю, что будет легко изменить схему, поскольку это было решено между поставщиками, и я не хотел бы идти по этому пути (если это возможно), поскольку это немного замедлит прогресс.
Я искал и нашел эту страницу , это внешняя настройка, что я хочу сделать? Я в основном работал с сгенерированными классами, поэтому я не совсем знаком с процессом, который генерирует эти классы. Простой пример «настройки свойств» был бы великолепен! Альтернативный метод генерации классов Java будет в порядке, если схема все еще может использоваться.
РЕДАКТИРОВАТЬ: Я должен уточнить, что два UnstructuredName
действительно один и тот же элемент.