`

Validate Xml

 
阅读更多
根据自己理解写的。
写完之后发现有注释更为详细的,地址为http://blog.csdn.net/fenglibing/article/details/4150642

利用XMLReader的parse方法来validate。
需要设定XMLReader的ContentHandler(内容处理器)
ContentHandler采用sun的msv方式


简化流程为:
得到XMLReader实例
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
XMLReader reader = parserFactory.newSAXParser().getXMLReader();

得到校验者verifier
VerifierFactory factory = new com.sun.msv.verifier.jarv.TheFactoryImpl();
Verifier verifier = factory.newVerifier(fileSchema);

设定reader的内容处理器ContentHandler

reader.setContentHandler(verifier.getVerifierHandler());

解析xml
reader.parse(new InputSource(new StringReader(xmlSource)));



以下为源码。

package com.bull.iris.portal.common;

import java.io.File;
import java.io.InputStream;
import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import org.apache.log4j.Logger;
import org.iso_relax.verifier.Verifier;
import org.iso_relax.verifier.VerifierFactory;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;

import com.sun.msv.verifier.jarv.TheFactoryImpl;

public class ValidateXml {
private static Logger logger = org.apache.log4j.Logger.getLogger(ValidateXml.class);
public static boolean validate(String xmlSource, File fileSchema) {
logger.debug("enter ValidateXml class");

        //if schema file is null, then return;
        if (fileSchema == null) {
        logger.debug("file not found");
            return false;
        }
        logger.debug("enter ValidateXml class step 1");
        try {
            VerifierFactory factory = new TheFactoryImpl();
            Verifier verifier = factory.newVerifier(fileSchema);
            logger.debug("enter ValidateXml class step 2");

            SAXParserFactory parserFactory = SAXParserFactory.newInstance();
            parserFactory.setNamespaceAware(true);
            XMLReader reader = parserFactory.newSAXParser().getXMLReader();
            reader.setContentHandler(verifier.getVerifierHandler());
            logger.debug("enter ValidateXml class step 3");
//实现自己的错误处理。不写也可。有默认实现。
            verifier.setErrorHandler(new ErrorHandler() {
                public void error(SAXParseException e) {
                e.printStackTrace();
                logger.debug("error 1" + e.getMessage());
                    throw new RecieveValidationException(e.getLineNumber(), e
                            .getMessage());
                }

                public void fatalError(SAXParseException e) {
                e.printStackTrace();
                logger.debug("error 2" + e.getMessage());
                    throw new RecieveValidationException(e.getLineNumber(), e
                            .getMessage());
                }

                public void warning(SAXParseException e) {
                e.printStackTrace();
                logger.debug("error 3" + e.getMessage());
                }
            });

            logger.debug("enter ValidateXml class step 4");
            reader.parse(new InputSource(new StringReader(xmlSource)));
            logger.debug("enter ValidateXml class step 5");
        } catch (RecieveValidationException e) {
        e.printStackTrace();
        logger.debug("error 4" + e.getMessage());
            //throw e;
        return false;
        } catch (Exception e) {
        e.printStackTrace();
        logger.debug("error 5" + e.getMessage());
            //throw new RuntimeException(e);
        return false;
        }
        return true;
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics