对last question的后续行动进行排序。我从Unofficial JAXB Guide - Mapping interfaces — Project Kenai创建了一个简单的XML,并从* .java文件中生成了一个带有schemagen
的模式。这些类使用interface
,但架构不会验证XML。这应该很简单,但我想我不理解它生成的XmlAnyElement
注释和生成的xs:any
模式元素。这是一个简单的示例代码:
@XmlRootElement
class Zoo {
@XmlAnyElement
public List<Animal> animals;
}
interface Animal {}
@XmlRootElement
class Dog implements Animal {}
@XmlRootElement
class Cat implements Animal {}
我的JABContext.newInstance()和属性:
JAXBContext ctx = JAXBContext.newInstance(Zoo.class, Dog.class, Cat.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "schema1.xsd");
marshaller.marshal(zoo, writer);
生成的XML:
<zoo xsi:noNamespaceSchemaLocation="schema1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><cat/><dog/><dog/><cat/><dog/><dog/></zoo>
再次由schemagen生成架构:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cat" type="cat"/>
<xs:element name="dog" type="dog"/>
<xs:element name="zoo" type="zoo"/>
<xs:complexType name="cat">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="dog">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="zoo">
<xs:sequence>
<xs:any processContents="skip" namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
我得到的错误来自Eclipse(Jboss开发者工作室9.1.0Beta1):
cvc-complex-type.2.4.a: Invalid content was found starting with element 'cat'. One of '{WC[##other:""]}' is expected.
我正在试图弄清楚要做什么,但我希望我不必手动做任何事情。我可以使用jaxb-maven-plugin
生成架构,但它是相同的。任何帮助赞赏。希望这不是Eclipse错误。我首先生成模式的一个重要原因是摆脱了Eclipse中的验证错误。