Я использую JAXB для привязки XML к Java для приложения, которое я пишу. У меня есть элемент с именем measure , который содержит два элемента amount с именами amount и maxAmount , с помощью которых я хочу смоделировать меньшее и верхнее предельное значение. amount и maxAmount в остальном идентичны, и я хотел бы, чтобы они были реализованы с одним и тем же классом при демонтаже в Java.
Ниже приводится выдержка из схемы XML, которую я передаю в JAXB:
<xsd:attributeGroup name="AmountAttributes">
<xsd:attribute name="quantity" type="xsd:decimal"/>
<xsd:attribute name="numerator" type="xsd:nonNegativeInteger"/>
<xsd:attribute name="denominator" type="xsd:positiveInteger"/>
</xsd:attributeGroup>
<xsd:element name="measure">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="amount">
<xsd:complexType>
<xsd:attributeGroup ref="mpr:AmountAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="maxAmount">
<xsd:complexType>
<xsd:attributeGroup ref="mpr:AmountAttributes"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
JAXB создает из этого более сложную версию следующего:
public class Measure {
protected Measure.Amount amount;
protected Measure.MaxAmount maxAmount;
public static class Measure.Amount {}
public static class Measure.MaxAmount {}
}
Measure.Amount и Measure.MaxAmount идентичны, за исключением их имен, но - конечно - в том, что касается Java, они имеют мало общего друг с другом.
Есть ли способ заставить JAXB использовать один и тот же класс для количества и maxAmount ?
Просто чтобы быть полностью чистым ;-) Я должен упомянуть, что я генерирую схему XML из RNC, используя Trang. Если ответ на вопрос «изменить схему XML», у меня возникает дополнительный вопрос «как изменить RNC для создания этой схемы XML?». Мой RNC выглядит так:
AmountAttributes =
QuantityAttribute?
& attribute numerator { xsd:nonNegativeInteger }?
& attribute denominator { xsd:positiveInteger }?
QuantityAttribute = attribute quantity { xsd:decimal }
Measure =
element measure {
element amount { AmountAttributes }?,
element maxAmount { AmountAttributes }?
}+
Я использую RNC, потому что мне проще это понять, но если решение моей проблемы означает просто использование XML-схемы, пусть будет так.
Steve