我知道有关于这个主题的另一个讨论 xsd validation to allow unexpected elements
但我添加了它仍然无效。
这是我的XSD:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="member">
<xs:complexType>
<xs:sequence>
<xs:element name="card">
<xs:complexType>
<xs:sequence>
<xs:element name="cardNumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="16"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这是我在拦截器中运行验证的代码(使用CXF)
final File xsd;
final Schema closeSchema;
try {
closeSchema = SchemaFactory.newInstance(xsdAnnotation.schemaLanguage()).newSchema(xsd);
} catch (final SAXException e) {
throw new IllegalStateException(e);
}
// get the payload in the request body
final String payload = (String) context.getParameters()[i];
closeSchema.newValidator().validate(new StreamSource(new StringReader(payload)));
好吧,我删除了一些其他不相关的逻辑,但验证过程正常工作
如果我通过
<member>
<card>
<cardNumber>1234567890123456</cardNumber>
</card>
</member>
验证工作;但是,如果我通过
<member>
<card>
<cardNumber>1234567890123456</cardNumber>
<memberType>??</memberType>
</card>
</member>
它给了我例外
“org.xml.sax.SAXParseException; lineNumber:1; columnNumber:75; cvc-complex-type.2.4.c:匹配的通配符是strict,但是找不到元素'memberType'的声明。”
答案 0 :(得分:0)
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>