Schema不会使用接口示例验证java

时间:2016-02-03 20:20:22

标签: java xml eclipse jaxb

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中的验证错误。

0 个答案:

没有答案