Öğeler ve öznitelikler için varsayılan değerleri tanımlayan bir şema var. Bu şemaya dayanarak JAXB kullanarak bir belgeyi ayrıştırmaya çalışıyorum ancak JAXB varsayılan değerleri ayarlamıyor. JAXB'nin şemadan varsayılan değerleri nasıl kazanacağına dair herhangi bir fikir var mı?JAXB varsayılan şema değerlerini destekliyor mu?
example.xsd:
<?xml version="1.0" encoding="UTF-8"?><xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/example"
xmlns:tns="http://www.example.org/example">
<xs:element name="root" type="tns:rootType"/>
<xs:complexType name="rootType">
<xs:sequence>
<xs:element name="child" type="tns:childType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="childType">
<xs:sequence>
<xs:element name="childVal" type="xs:string" default="defaultElVal"/>
</xs:sequence>
<xs:attribute name="attr" type="xs:string" default="defaultAttrVal"/>
</xs:complexType>
example1.xml
<?xml version="1.0" encoding="UTF-8"?>
<tns:root xmlns:tns="http://www.example.org/example" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/example example.xsd ">
<child>
<childVal/>
</child>
</tns:root>
TestParser.java
package test;
import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
public class TestParser {
public static void main(String[] pArgs) {
try {
JAXBContext context = JAXBContext.newInstance(RootElement.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
SchemaFactory schemaFac = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema sysConfigSchema = schemaFac.newSchema(
new File("example.xsd"));
unmarshaller.setSchema(sysConfigSchema);
RootElement root = (RootElement)unmarshaller.unmarshal(
new File("example1.xml"));
System.out.println("Child Val: " + root.getChild().getChildVal());
System.out.println("Child Attr: " + root.getChild().getAttr());
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
RootElement.java
package test;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="root", namespace="http://www.example.org/example")
public class RootElement {
private ChildEl child;
public RootElement() {}
public ChildEl getChild() {
return child;
}
public void setChild(ChildEl pChild) {
this.child = pChild;
}
}
ChildEl.java
package test;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="child")
public class ChildEl {
private String attr;
private String childVal;
public ChildEl() {};
@XmlAttribute
public String getAttr() {
return attr;
}
public void setAttr(String pAttr) {
this.attr = pAttr;
}
public String getChildVal() {
return childVal;
}
public void setChildVal(String pVal) {
this.childVal = pVal;
}
}