针对XSD的Java XML验证在特定情况下不会引发错误
我一直在寻找这个问题的答案,但我还没有找到任何解决这个问题的方法 因此,我想使用JavaXML验证验证器根据XSD模式文件验证XML文件。它已经起作用了。但是,在特定情况下,验证器似乎会忽略XML文件中的错误 例如,如果在xml文件的以下位中,“strasse”标记拼写错误为“strass”,验证程序将抛出错误 但是如果我将标记“hausnummer”更改为“hausnumme”,则验证不会显示任何错误针对XSD的Java XML验证在特定情况下不会引发错误,java,xml,validation,xsd,Java,Xml,Validation,Xsd,我一直在寻找这个问题的答案,但我还没有找到任何解决这个问题的方法 因此,我想使用JavaXML验证验证器根据XSD模式文件验证XML文件。它已经起作用了。但是,在特定情况下,验证器似乎会忽略XML文件中的错误 例如,如果在xml文件的以下位中,“strasse”标记拼写错误为“strass”,验证程序将抛出错误 但是如果我将标记“hausnummer”更改为“hausnumme”,则验证不会显示任何错误 <adresse> &l
<adresse>
<strasse>Finsterwalderstraße</strasse>
<hausnummer>7</hausnummer>
<hausnummerzusatz></hausnummerzusatz>
<plz>83026999</plz>
<ort>Rosenheim</ort>
</adresse>
ErrorHandler的实现
@Override
public void error(SAXParseException e) throws SAXException {
Message message = addMessage(e, MessageSeverity.ERROR);
LOGGER.error(message.toString());
}
警告和致命错误也是如此
以及验证方法本身
public List<Message> validate() throws IOException {
try {
validator.validate(jaxbSource);
}
catch (SAXException ex) {
...
}
return Collections.unmodifiableList(validationMessages);
}
public List validate()引发IOException{
试一试{
validator.validate(jaxbSource);
}
捕获(SAXEx异常){
...
}
返回集合。不可修改列表(validationMessages);
}
如果在解组时使用解组器的setSchema()方法验证XML,则会出现错误。但我不想使用解组器进行验证
有没有人也遇到过这个问题,或者有没有办法告诉验证器在验证时要更加严格
编辑:整个XSD有点太大,无法在这里发布,所以我只发布与上述示例相关的部分
标题:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ka="http://www.g-fit.de/ngs/kundenauftrag" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:voi="http://www.g-fit.de/ngs/kundenauftrag/voice" xmlns:ip="http://www.g-fit.de/ngs/kundenauftrag/ip_nga" targetNamespace="http://www.g-fit.de/ngs/kundenauftrag" elementFormDefault="qualified" attributeFormDefault="unqualified" jxb:version="2.0">
ADRESE类型的定义:
<xs:complexType name="adresse">
<xs:sequence>
<xs:element name="strasse" type="xs:string"/>
<xs:element name="hausnummer" type="ka:hausnummer"/>
<xs:element name="hausnummerzusatz" type="xs:string" minOccurs="0"/>
<xs:element name="plz" type="ka:plz"/>
<xs:element name="ort" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Camn在没有看到您的XSD之前无法回答此问题。好的,我添加了XSD中与我发布的示例相关的部分。无法解释这一点。试着发布一个复制,这样我们就可以自己尝试了。
<xs:complexType name="adresse">
<xs:sequence>
<xs:element name="strasse" type="xs:string"/>
<xs:element name="hausnummer" type="ka:hausnummer"/>
<xs:element name="hausnummerzusatz" type="xs:string" minOccurs="0"/>
<xs:element name="plz" type="ka:plz"/>
<xs:element name="ort" type="xs:string"/>
</xs:sequence>
</xs:complexType>