开发者

Why JAXB (jaxb2-maven-plugin) skips this attribute?

开发者 https://www.devze.com 2023-03-23 01:27 出处:网络
jaxb2-maven-plugin 1.3skips an attribute from an object. I cannot modify the XSD. In the XSD (fragment):

jaxb2-maven-plugin 1.3 skips an attribute from an object. I cannot modify the XSD. In the XSD (fragment):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="classA" type="classA" substitutionGroup="classSubA"/>

    <xs:complexType name="complexClassA" mixed="true">

    <xs:attribute name="attA">
        <xs:annotation>
            <xs:appinfo>
                <moProperty value="classA:attA"/>
                <label value="Attribute A" default="true"/>
                <externA开发者_如何学Goccess value="readWrite"/>
            <description value="NO COMMENTS"/>
        </xs:appinfo>
    </xs:annotation>
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="off"/>
            <xs:enumeration value="on"/>
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>

<xs:attribute name="id" type="xs:unsignedInt">
    <xs:annotation>
        <xs:appinfo>
            <moProperty value="myClassB:id"/>
            <label value="Id" default="true"/>
            <externAccess value="readWrite"/>
            <description value="NO COMMENTS"/>
        </xs:appinfo>
    </xs:annotation>
</xs:attribute>
</xs:schema>

The Resulting Java Object (fragment):

public class ComplexClassA {
    @XmlSchemaType(name = "unsignedInt")
    protected Long id;
}

Why it is not generating the attA member?

Might it be cause the inline enumeration?

Thank you.

Udo.


Can you provide a complete XML schema that demonstrates the problem? Below the line is what I have tried and everything appears to work as expected.


When I run XJC on the following XML schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/Foo" xmlns="http://www.example.org/Foo" 
    elementFormDefault="qualified">

    <xs:complexType name="complexClassA" mixed="true">

        <xs:attribute name="attA">
            <xs:annotation>
                <xs:appinfo>
                    <moProperty value="classA:attA"/>
                    <label value="Attribute A" default="true"/>
                    <externAccess value="readWrite"/>
                    <description value="NO COMMENTS"/>
                </xs:appinfo>
            </xs:annotation>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                <xs:enumeration value="off"/>
                <xs:enumeration value="on"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>

        <xs:attribute name="id" type="xs:unsignedInt">
            <xs:annotation>
                <xs:appinfo>
                    <moProperty value="myClassB:id"/>
                    <label value="Id" default="true"/>
                    <externAccess value="readWrite"/>
                    <description value="NO COMMENTS"/>
                </xs:appinfo>
            </xs:annotation>
        </xs:attribute>

    </xs:complexType>

</xs:schema>

I get the following class as expected:

package org.example.foo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "complexClassA", propOrder = {
    "content"
})
public class ComplexClassA {

    @XmlValue
    protected String content;
    @XmlAttribute
    protected String attA;
    @XmlAttribute
    @XmlSchemaType(name = "unsignedInt")
    protected Long id;

    public String getContent() {
        return content;
    }

    public void setContent(String value) {
        this.content = value;
    }

    public String getAttA() {
        return attA;
    }

    public void setAttA(String value) {
        this.attA = value;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long value) {
        this.id = value;
    }

}


After going to

org.jvnet.jaxb2.maven2 maven-jaxb2-plugin

Everything is working fine.

Thank you for your time.


What JAXB version are you using? The inline Enumeration should be turned into an Java enum correctly.

You could try to define the simpleType outside the Attribute definition, that would help probably.

0

精彩评论

暂无评论...
验证码 换一张
取 消