我通过Validator类验证我的jaxb对象。下面是我用来验证jaxb对象的代码。但在验证它时,我收到了这个错误。
jc = JAXBContext.newInstance(obj.getClass());
source = new JAXBSource(jc, obj);
Schema schema = schemaInjector.getSchema();
Validator validator = schema.newValidator();
validator.validate(source);
错误(SAXParseException):cvc-complex-type.2.4.a:找到以元素' ProcessDesc'开头的无效内容。 ProcessName的一个预期
我不明白我在xsd中做错了什么导致了这个错误。我的xsd文件中定义的元素在下面,我收到错误。
<xs:schema xmlns:cc="http://www.ms.com/cm.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ms.com/cm.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Process">
<xs:sequence>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
请帮我解决这个问题。谢谢。
答案 0 :(得分:20)
XML Sehema代码
<xs:complexType name="Process">
<xs:sequence>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
描述了一些应该看起来像
的XML<proc> <!-- of type Process -->
<ProcessId>123</ProcessId>
<ProcessName>procA</ProcessName>
<ProcessDesc>A funny process</ProcessDesc> <!-- this could be omitted -->
<proc>
但您的XML数据看起来像
<proc> <!-- of type Process -->
<ProcessId>123</ProcessId>
<ProcessDesc>A funny process</ProcessDesc>
<!-- ... don't know what follows -->
如果您不关心Id,Name,Desc的顺序,则必须更改XML架构。否则你将不得不修复XML(这更容易)。
如果您认为“任何元素顺序”是个好主意,请使用:
<xs:complexType name="Process">
<xs:all>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:all>
</xs:complexType>
答案 1 :(得分:4)
这类错误是由于以下原因之一
元素名称输入错误。
尝试使用架构中未描述的元素。
元素的顺序不正确。
在根标记或父标记中声明的命名空间定义 元素不匹配中使用的前缀(或没有前缀) 元件。
答案 2 :(得分:1)
答案 3 :(得分:1)
这是一个简单的XSD验证错误... w3c
答案 4 :(得分:0)
另一个选项是违反约束,当您根据需要设置字段时,它是记录中的NULL
。检查您的XSD
的{{1}}元素属性。
答案 5 :(得分:0)