Вы можете использовать внешний файл привязок для настройки имени вашего свойства.Чтобы JAXB распознал метод как свойство, он должен следовать соглашению, начиная с get
или is
для логических типов.
schema.xsd
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="root">
<xs:attribute name="is-buy-now" type="xs:boolean"/>
</xs:complexType>
</xs:schema>
bindings.xml
В приведенном ниже файле привязок мы указали имя свойства для атрибута XML с именем is-buy-now
:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="is.xsd">
<jxb:bindings node="//xs:complexType[@name='root']/xs:attribute[@name='is-buy-now']">
<jxb:property name="buyNow"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Вызов XJC
Параметр -b
используется для указания файла привязок:
xjc -d out -b bindings.xml schema.xsd
Root
В результатеследующий класс будет создан с помощью методов: isBuyNow
и setBuyNow
:
<code>//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.02.03 at 05:18:59 AM EST
//
package generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for root complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="root">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <attribute name="is-buy-now" type="{http://www.w3.org/2001/XMLSchema}boolean" />
* </restriction>
* </complexContent>
* </complexType>
*
* * * / @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "root") открытый класс Root {@XmlAttribute (name = "is-buy-now") защищенный логический buyNow;/ ** * Получает значение свойства buyNow.* * @return * возможным объектом является * {@link Boolean} * * / public Boolean isBuyNow () {return buyNow;} / ** * Устанавливает значение свойства buyNow.* * @param value * допустимым объектом является * {@link Boolean} * * / public void setBuyNow (Boolean value) {this.buyNow = value;}}
ОБНОВЛЕНИЕ
Если вы начинаете с классов Java, вы можете указать @XmlAccessorType(XmlAccessType.FIELD)
для сопоставления с полями и назвать ваши методы по своему выбору:
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlAttribute(name="has-buy-now")
private boolean buyNow;
public boolean hasBuyNow() {
return buyNow;
}
}