0
我知道還有關於這個話題的另一個討論 xsd validation to allow unexpected elements如果在JAVA中使用XSD驗證,是否可以允許有意義的負載元素?
但我加了,它仍然不起作用。
這是我的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>123456789</cardNumber>
</card>
</member>
驗證工作;然而,如果我通過
<member>
<card>
<cardNumber>123456789</cardNumber>
<memberType>??</memberType>
</card>
</member>
這讓我異常
「org.xml.sax.SAXParseException;行號:1;得到columnnumber:75; CVC-複雜type.2.4.c:匹配通配符是嚴格的,但是對元素'memberType'沒有聲明。「