2015-12-24 26 views
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'沒有聲明。「

回答