需求:
1. 对XML中的某些节点和属性进行特殊的检查;
> 简单的检查: 不依赖XML上下文;
> 复杂的检查1: 依赖XML中的前序内容(先声明再使用);
> 复杂的检查2: 依赖XML中的后序内容(先使用再声明);
2. 友好的错误信息
> 错误信息支持中文;
> 至少需要将出错点定位到行号;
3. 检查整个XML, 最后统一将错误信息收集成一个XML
分析:
1. 简单属性或节点的检查: 需要参与节点和属性的检查过程;
2. 复杂查检1: 需要在参与节点和属性检查的过程中, 记录相应的上下文信息, 供后面的检查使用;
3. 复杂检查2 + 错误定位到哪行: 需要在参与节点和属性检查的过程中, 获取当前的位置信息, 并存储下来, 供检查时出错处理;
4. 错误提示中文: 需要使用中文的properties文件, 需要修改获取message常量使用中文格式.
实现的XML Schema Validator的工具:
1. MSV: SUN实现的一套工具.
2. Xerces-2
最终决定基于MSV进行扩展.
MSV的扩展
1. 根据schema文件创建一个Verifier
VerifierFactory factory = new com.sun.msv.verifier.jarv.TheFactoryImpl();
Verifier verifier = factory.newVerifier(CustomErrorReporter.class.getResourceAsStream(SCHEMA));
2. 定制错误处理
verifier.setErrorHandler(new ReportErrorHandler(){
public void error(SAXParseException arg0) throws SAXException {
System.out.println("line: " + arg0.getLineNumber() + "; column: " + arg0.getColumnNumber() + "; message: " + arg0.getMessage());
}
public void fatalError(SAXParseException arg0) throws SAXException {
System.out.println("line: " + arg0.getLineNumber() + "; column: " + arg0.getColumnNumber() + "; message: " + arg0.getMessage());
}
});
3. 深入检查的各个阶段(通过SAX pipe line来实现)
// create a SAX parser
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
XMLReader reader = parserFactory.newSAXParser().getXMLReader();
// then setup the SAX pipe line as follows:
//
// parser ==> interceptor ==> verifier
//
// "interceptor" works as a SAX filter.
Interceptor interceptor = new Interceptor();
interceptor.setParent(reader);
interceptor.setContentHandler(verifier.getVerifierHandler());
其中, Interceptor就是我们可以定制特殊处理的点. 它的定义如下:
private static class Interceptor extends XMLFilterImpl {
private Locator locator = null;
public void setDocumentLocator (Locator locator)
{
this.locator = locator;
super.setDocumentLocator(locator);
}
public void startElement(String ns, String local, String qname,
Attributes atts) throws SAXException {
super.startElement(ns, local, qname, atts);
}
public void endElement(String ns, String local, String qname)
throws SAXException {
super.endElement(ns, local, qname);
}
public void characters(char[] buf, int start, int len)
throws SAXException {
super.characters(buf, start, len);
}
}
4. 检查XML
interceptor.parse(new InputSource(CustomErrorReporter.class.getResourceAsStream(DATA)));
5. 错误提示使用中文
可以使用Locale.setDefault(Locale.CHINA)来设置默认的Locale
同时在这个类的同一个包中增加Message_zh_CN.properties文件, 这个文件将中文变成unicode. 可以使用jdk下的工具native2ascii来实现.
分享到:
相关推荐
`xmlschema-core-2.0.3.jar` 是一个Java库,专门用于解析和操作XML Schema文档,它支持XML Schema 1.1标准。 在Spring Web服务中,XML Schema Core库扮演着关键角色。Spring Web Service框架是基于合同优先...
xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar
赠送jar包:xmlschema-core-2.1.0.jar; 赠送原API文档:xmlschema-core-2.1.0-javadoc.jar; 赠送源代码:xmlschema-core-2.1.0-sources.jar; 赠送Maven依赖信息文件:xmlschema-core-2.1.0.pom; 包含翻译后的API...
如果是maven依赖,可以在pom.xml中引入以下配置 <groupId>org.apache.ws.xmlschema <artifactId>xmlschema-core <version>2.2.1 </dependency>
json-schema-validator-2.2.3.jar
XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar
cxf jar xmlschema-core-2.0.jar
`XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...
好不容易找到的XmlSchema-1.4.7 jar包,需要的同学速度下载吧。不黑心,只要1分~~~
xmlschema-core-2.0.1.jar
XmlSchema-1.1.jar XmlSchema-1.1.jar
3. **扩展支持**:`json-schema-validator`支持多种JSON Schema扩展,如`format`关键字,用于验证日期、时间、URI等特殊格式。 4. **与其他框架的集成**:库可以方便地与Spring、Jackson、Gson等Java JSON处理框架...
XmlSchema-1.4.7.jar 是一个Java库,它实现了W3C的XML Schema标准,用于处理XML Schema文档。这个版本(1.4.7)可能是该库的一个稳定版本,提供给用户免费使用。XML Schema是XML的一种规范,定义了如何验证XML文档的...
标题中的"Python库 | election_results_xml_validator-0.9.0.1.tar.gz"表明这是一个针对Python编程语言的库,具体来说是名为`election_results_xml_validator`的版本0.9.0.1的软件包。这个库的主要功能是验证XML格式...
xmlschema-core-2.1.0.jar
mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=6.2.2 -Dfile=/root/kafka-schema-registry-client-6.2.2.jar -Dpackaging=jar 官网下载地址 packages....
`election_results_xml_validator`可能会包含一套特定的XML Schema,用于选举结果数据的验证。通过与Schema进行比对,库可以检查XML文档中的元素、属性和数据类型是否合规。 2. **错误检测与报告**:当XML文档不...
1、以下四个类调用了XmlSchema-1.1.jar包 因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11....