Why JAXB (jaxb2-maven-plugin) skips this attribute?
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.
精彩评论