JAXB 默认属性值

发布于 2024-12-12 09:00:19 字数 143 浏览 0 评论 0原文

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

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

PS 我检查了 xsd 语法是否允许属性的默认值

I'm using JAXB annotations to generate xsd schema from my classes.

Annotation @XmlElement with parameter defaultValue sets default value for element.
Is it possible to set default value for @XmlAttribute?

P.S. I checked that xsd syntax allow default values for attributes

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

徒留西风 2024-12-19 09:00:19

可能想检查一下:JAXB 支持默认架构值吗?

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

Might wanna check this: Does JAXB support default schema values?

To be honest, I don't have a clue why there isn't an attribute default option in standard JAXB.

疾风者 2024-12-19 09:00:19

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

When you generate classes from an xsd where you define an attribute with a default value then jaxb will generate a if clause where it will check the null value and if so, will return the default value.

月亮坠入山谷 2024-12-19 09:00:19

对于 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 version="1.0" encoding="UTF-8" standalone="yes"?><Customer><element/></Customer>

创建了示例 XML,以便在我们将逻辑写入主类中的编组时

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());

。它将在控制台中打印。
默认元素名称
defaultAttributeValue

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

For XML attributes default value goes inside getter method.

for Example,

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>

It will generate class like below.

@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;
        }
    }

Created Sample XML to read

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

when we write logic to marshall in our main class.

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());

It will print, in console.
defaultElementName
defaultAttributeValue

P.S -: to get default value of elements you need to have a blank copy of element into xml which is being marshalled.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文