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