Validate xml

package testSchema;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultNamespace;

import org.iso_relax.verifier.Schema;
import org.iso_relax.verifier.Verifier;
import org.iso_relax.verifier.VerifierConfigurationException;
import org.iso_relax.verifier.VerifierFactory;
import org.iso_relax.verifier.VerifierFilter;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

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

public class ValidateXML {
   
    public Document validate(InputStream stream, String xsdName) throws IOException{
   
    Document result = null;
    InputStream xmlStream = stream;
    InputStream schemaStream = this.getClass().getResourceAsStream(xsdName);
    SAXReader reader;
    try {
        reader = createSAXReader(schemaStream);
        result = reader.read(xmlStream);
        xmlStream.close();
        schemaStream.close();
    } catch (DocumentException e) {
        System.out.println("Validate failed !");
        e.printStackTrace();           
    } catch(IOException e) {
        System.out.println("Xsd file does not exist !");
        e.printStackTrace();           
    }
    catch (Exception e) {
        System.out.println("Xsd file format error !");
        e.printStackTrace();
    }
   
    return result;
}

private SAXReader createSAXReader(InputStream xsdStream) throws VerifierConfigurationException, SAXException, IOException {
    VerifierFactory factory = new TheFactoryImpl();
Schema schema = factory.compileSchema(xsdStream);

Verifier verifier = schema.newVerifier();
verifier.setErrorHandler(new ErrorHandler() {
    public void error(SAXParseException e) {
    System.out.println("ERROR: " + e);
    }

    public void fatalError(SAXParseException e) {
    System.out.println("FATAL: " + e);
    }

    public void warning(SAXParseException e) {
    System.out.println("WARNING: " + e);
    }
});

// now install the verifying filter
VerifierFilter filter = verifier.getVerifierFilter();
SAXReader reader = new SAXReader();
reader.setXMLFilter(filter);
return reader;
}


public static void main(String[] args) throws IOException {
    ValidateXML validateXML = new ValidateXML();
//    InputStream schemaStream = validateXML.getClass().getResourceAsStream("Response.xml");
//    validateXML.validate(schemaStream, "BAK-Response.xsd");
    validateXML.validateByDtd("hibernate-configuration-3.0.dtd", "src\\testSchema\\hibernate.cfg.xml");
}

public Document validateByDtd(String dtdFile, String xmlFile) {
    List errors = new ArrayList();
    SAXReader saxReader = new SAXReader();
    saxReader.setEntityResolver(new DTDEntityResolver(dtdFile));
    saxReader.setErrorHandler(new ErrorLogger(xmlFile, errors));
    saxReader.setValidation(true);
    Document doc = null;
    try {
    doc = saxReader.read(xmlFile);
    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
   
    return doc;
}

public static class ErrorLogger implements ErrorHandler {
    private String file;
    private List errors;
    ErrorLogger(String file, List errors) {
        this.file=file;
        this.errors = errors;
    }
    public void error(SAXParseException error) {
        System.err.println( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
        errors.add(error);
    }
    public void fatalError(SAXParseException error) {
        System.err.println(error);
    }
    public void warning(SAXParseException warn) {
        System.err.println( "Warning parsing XML: " + file + '(' + warn.getLineNumber() + ") " + warn.getMessage() );
    }
}


public static class DTDEntityResolver implements EntityResolver, Serializable {

    private static final Log log = LogFactory.getLog( DTDEntityResolver.class );

   
    private String dtdFile;
    public DTDEntityResolver(String dtdFile) {
        this.dtdFile = dtdFile;
    }
    public InputSource resolveEntity(String publicId, String systemId) {
        if ( systemId != null ) {
            InputStream dtdStream = this.getClass().getResourceAsStream(dtdFile);
            InputSource source = new InputSource( dtdStream );
            source.setPublicId( publicId );
            source.setSystemId( systemId );
                   
            return source;
        }
        // use default behavior
        return null;
    }

}

}

posted on 2007-08-08 09:53 Sheldon Sun 阅读(565) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(3)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜