У меня есть следующие 2 класса:JAXB поколение XSD производства 2 * .xsd-х
@XmlRootElement(namespace = "namespaceX")
@XmlSeeAlso({SubClass.class})
public class BaseClass {
private String baseProp;
@XmlAttribute
public String getBaseProp() {
return baseProp;
}
public void setBaseProp(String baseProp) {
this.baseProp = baseProp;
}
}
@XmlRootElement(namespace = "namespaceX")
public class SubClass extends BaseClass {
private String extraProp;
@XmlElement
public String getExtraProp() {
return extraProp;
}
public void setExtraProp(String extraProp) {
this.extraProp = extraProp;
}
}
и им пытаются генерировать * .xsd из них:
JAXBContext context = JAXBContext.newInstance(BaseClass.class);
final List<DOMResult> results = new ArrayList<DOMResult>();
context.generateSchema(new SchemaOutputResolver() {
@Override public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
// save the schema to the list
DOMResult result = new DOMResult();
result.setSystemId(suggestedFileName);
results.add(result);
return result;
}
});
for (DOMResult domResult : results) {
Document doc = (Document) domResult.getNode();
OutputFormat format = new OutputFormat(doc);
format.setIndenting(true);
StringWriter writer = new StringWriter();
XMLSerializer serializer = new XMLSerializer(writer, format);
serializer.serialize(doc);
String xsd = writer.toString();
System.err.println("xsd "+domResult.getSystemId()+":");
System.err.println(xsd);
}
-им ожидая увидеть единый xsd-таргетинг на «namespaceX». вместо этого получение 2:
xsd schema1.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="namespaceX" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="schema2.xsd"/>
<xs:element name="baseClass" type="baseClass"/>
<xs:element name="subClass" type="subClass"/>
</xs:schema>
xsd schema2.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="baseClass">
<xs:sequence/>
<xs:attribute name="baseProp" type="xs:string"/>
</xs:complexType>
<xs:complexType name="subClass">
<xs:complexContent>
<xs:extension base="baseClass">
<xs:sequence>
<xs:element minOccurs="0" name="extraProp" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
что я делаю неправильно?