读取jar包中的xsd并对xml校验

来源:互联网 发布:p2p运营模式数据图表 编辑:程序博客网 时间:2024/06/05 02:29
/*** 校验xml文档内容格式是否正确** @param xmlContent* @throws WorkFlowException*/public void checkProcessDef(InputStream xmlContent) throws WorkFlowException {// String xsdFileName = USER_DIR + File.separator + "src" + File.separator + "main" +File.separator + "resources"// + File.separator + "config" + File.separator + "process.xsd";//获取资源路径try {URL path = this.getClass().getClassLoader().getResource("config/process.xsd");SchemaFactory schemaFactory =SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");Schema compiledSchema = schemaFactory.newSchema(path);SAXParserFactory factory = SAXParserFactory.newInstance();factory.setNamespaceAware(true);factory.setValidating(false);factory.setSchema(compiledSchema);Validator validator = compiledSchema.newValidator();Source sc = new StreamSource(xmlContent);validator.validate(sc);if (log.isInfoEnabled()) {log.info("流程定义文件校验通过!");}// String xsdFileName = path.getPath();//// //创建默认的XML错误处理器// XMLErrorHandler errorHandler = new XMLErrorHandler();// //获取基于 SAX 的解析器的实例// SAXParserFactory factory = SAXParserFactory.newInstance();// //解析器在解析时验证 XML 内容。// factory.setValidating(true);// //指定由此代码生成的解析器将提供对 XML 名称空间的支持。// factory.setNamespaceAware(true);// //使用当前配置的工厂参数创建 SAXParser 的一个新实例。// SAXParser parser = factory.newSAXParser();// //创建一个读取工具// SAXReader xmlReader = new SAXReader();// //获取要校验xml文档实例// Document xmlDocument = (Document) xmlReader.read(xmlContent);// //设置 XMLReader 的基础实现中的特定属性。核心功能和属性列表可以在[url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。// parser.setProperty(SCHEMA_LANGUAGE, SCHEMA_VALUE);// parser.setProperty(SCHEMA_SOURCE, "jar:file:" + xsdFileName);// //创建一个SAXValidator校验工具,并设置校验工具的属性// SAXValidator validator = new SAXValidator(parser.getXMLReader());// //设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。// validator.setErrorHandler(errorHandler);// //校验// validator.validate(xmlDocument);//// XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());// //如果错误信息不为空,说明校验失败,打印错误信息// if (errorHandler.getErrors().hasContent()) {// writer.write(errorHandler.getErrors());// log.error("checkProcessDef error" + errorHandler.getErrors().getStringValue());// throw new WorkFlowException("validate xml file fail by the xsd file");// } else {// if (log.isInfoEnabled()) {// log.info("good,validate success!");// }// }} catch (Exception e) {log.error("流程定义文件校验失败!!!");throw new WorkFlowException(e.getMessage());}}

0 0
原创粉丝点击