JAXB默认属性值

时间:2011-10-26 21:51:41

标签: java xml xsd jaxb

我正在使用JAXB注释从我的类生成xsd架构。

带参数defaultValue的注释@XmlElement设置element的默认值。 是否可以为@XmlAttribute设置默认值?

P.S。我检查了xsd语法是否允许属性的默认值

3 个答案:

答案 0 :(得分:4)

可能要检查一下:Does JAXB support default schema values?

说实话,我不知道为什么标准JAXB中没有属性默认选项。

答案 1 :(得分:1)

当您从xsd生成具有默认值的属性的类时,jaxb将生成一个if子句,它将检查空值,如果是,则返回默认值。

答案 2 :(得分:1)

对于XML属性,默认值在getter方法中。

例如,

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>

当我们在主要课堂上编写逻辑以进行编组时。

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

P.S - :获取元素的默认值,您需要将元素的空白副本放入正在编组的xml中。