Значение атрибута JAXB по умолчанию - PullRequest
10 голосов
/ 27 октября 2011

Я использую аннотации JAXB для генерации схемы xsd из моих классов.

Аннотация @XmlElement с параметром defaultValue устанавливает значение по умолчанию для элемента. Можно ли установить значение по умолчанию для @XmlAttribute?

P.S. Я проверил, что синтаксис xsd допускает значения по умолчанию для атрибутов

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

Могу ли я проверить это: Поддерживает ли JAXB значения схемы по умолчанию?

Если честно, я понятия не имею, почему в стандартном JAXB нет опции атрибута по умолчанию.

1 голос
/ 05 апреля 2016

Для атрибутов XML значение по умолчанию входит в метод получения.

Например,

customer.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="Customer">
        <complexType>
            <sequence>
                <element name="element" type="string" maxOccurs="1" minOccurs="0" default="defaultElementName"></element>
            </sequence>
            <attribute name="attribute" type="string" default="defaultAttributeValue"></attribute>
        </complexType>
    </element>
</schema>

Это создаст класс, как показано ниже.

@XmlRootElement(name = "Customer")
public class Customer {

    @XmlElement(required = true, defaultValue = "defaultElementName")
    protected String element;
    @XmlAttribute(name = "attribute")
    protected String attribute;

    ......

    public String getAttribute() {
        //here the default value is set.
        if (attribute == null) {
            return "defaultAttributeValue";
        } else {
            return attribute;
        }
    }

Создан образец XML для чтения

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><element/></Customer>

, когда мы пишем логику в Marshall в нашем основном классе.

File file = new File("...src/com/testdefault/xsd/CustomerRead.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
            System.out.println(customer.getElement());
            System.out.println(customer.getAttribute());

Он будет печататься в консоли.defaultElementName defaultAttributeValue

PS -: чтобы получить значение по умолчанию для элементов, вам нужно иметь чистую копию элемента в xml, который маршалируется.

1 голос
/ 02 июля 2014

Когда вы генерируете классы из xsd, где вы определяете атрибут со значением по умолчанию, тогда jaxb сгенерирует предложение if, где проверит нулевое значение и, если так, вернет значение по умолчанию.

...