2 * XML-validation task
\r
4 * Copyright(c) 2008 olyutorskii
\r
7 package jp.sourceforge.jindolf.archiver;
\r
9 import java.io.IOException;
\r
10 import java.io.PipedReader;
\r
11 import java.io.PipedWriter;
\r
12 import java.io.Reader;
\r
13 import java.io.Writer;
\r
14 import javax.xml.XMLConstants;
\r
15 import javax.xml.transform.Source;
\r
16 import javax.xml.transform.stream.StreamSource;
\r
17 import javax.xml.validation.Schema;
\r
18 import javax.xml.validation.SchemaFactory;
\r
19 import javax.xml.validation.Validator;
\r
20 import org.xml.sax.SAXException;
\r
25 public class ValidateTask implements Runnable{
\r
27 private static final SchemaFactory FACTORY =
\r
28 SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
\r
30 private final Validator validator;
\r
31 private final Source source;
\r
35 * @param reader 文字入力
\r
36 * @throws SAXException 内部エラー
\r
38 protected ValidateTask(Reader reader) throws SAXException{
\r
40 Schema schema = FACTORY.newSchema();
\r
41 this.validator = schema.newValidator();
\r
42 this.source = new StreamSource(reader);
\r
52 this.validator.validate(this.source);
\r
53 }catch(Throwable e){
\r
54 e.printStackTrace(System.err);
\r
55 System.err.println("XML検証に失敗しました。");
\r
62 * 文字出力を横取りしバックグラウンドで検証を行うWriterを生成する。
\r
66 public static Writer wrapValidator(Writer writer){
\r
67 PipedReader reader = new PipedReader();
\r
70 pipeWriter = new PipedWriter(reader);
\r
71 }catch(IOException e){
\r
72 e.printStackTrace(System.err);
\r
73 System.err.println("処理を続行できません。");
\r
78 MultiPlexer mtplx = new MultiPlexer();
\r
79 mtplx.addWriter(writer);
\r
80 mtplx.addWriter(pipeWriter);
\r
84 task = new ValidateTask(reader);
\r
85 }catch(SAXException e){
\r
86 e.printStackTrace(System.err);
\r
87 System.err.println("処理を続行できません。");
\r
91 Thread th = new Thread(task);
\r
92 th.setDaemon(false);
\r