`
hechengrong
  • 浏览: 29494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展XML Schema Validator--MSV

阅读更多

需求:

      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来实现.

 

 

  • src.rar (6.2 KB)
  • 下载次数: 25
分享到:
评论

相关推荐

    xmlschema-core-2.0.3的jar

    `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;xmlschema-core-2.0.3.jar

    xmlschema-core-2.1.0-API文档-中文版.zip

    赠送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...

    xmlschema-core-2.2.1.jar

    如果是maven依赖,可以在pom.xml中引入以下配置 <groupId>org.apache.ws.xmlschema <artifactId>xmlschema-core <version>2.2.1 </dependency>

    json-schema-validator-2.2.3.jar

    json-schema-validator-2.2.3.jar

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    xmlschema-core-2.0.jar

    cxf jar xmlschema-core-2.0.jar

    XmlSchema-1.4.6.jar

    `XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...

    XmlSchema-1.4.7 jar包

    好不容易找到的XmlSchema-1.4.7 jar包,需要的同学速度下载吧。不黑心,只要1分~~~

    xmlschema-core-2.0.1.jar

    xmlschema-core-2.0.1.jar

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

    JSON Schema 校验库——json-schema-validator(java版本).rar

    3. **扩展支持**:`json-schema-validator`支持多种JSON Schema扩展,如`format`关键字,用于验证日期、时间、URI等特殊格式。 4. **与其他框架的集成**:库可以方便地与Spring、Jackson、Gson等Java JSON处理框架...

    XmlSchema-1.4.7.jar

    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.tar.gz"表明这是一个针对Python编程语言的库,具体来说是名为`election_results_xml_validator`的版本0.9.0.1的软件包。这个库的主要功能是验证XML格式...

    xmlschema-core-2.1.0.jar

    xmlschema-core-2.1.0.jar

    kafka-schema-registry-client-6.2.2.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....

    Python库 | election_results_xml_validator-0.2.2.tar.gz

    `election_results_xml_validator`可能会包含一套特定的XML Schema,用于选举结果数据的验证。通过与Schema进行比对,库可以检查XML文档中的元素、属性和数据类型是否合规。 2. **错误检测与报告**:当XML文档不...

    xfire与cxf包冲突解决方法

    1、以下四个类调用了XmlSchema-1.1.jar包 因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11....

Global site tag (gtag.js) - Google Analytics