4 * License : The MIT License
5 * Copyright(c) 2008 olyutorskii
8 package jp.sourceforge.jindolf.archiver;
10 import java.io.IOException;
11 import java.io.PipedReader;
12 import java.io.PipedWriter;
13 import java.io.Reader;
14 import java.io.Writer;
15 import javax.xml.transform.Source;
16 import javax.xml.transform.stream.StreamSource;
17 import javax.xml.validation.Validator;
18 import org.xml.sax.SAXException;
23 public class ValidateTask implements Runnable{
25 private final Validator validator;
26 private final Source source;
31 * @throws SAXException 内部エラー
33 protected ValidateTask(Reader reader) throws SAXException{
35 this.validator = XmlUtils.createValidator();
36 this.source = new StreamSource(reader);
48 this.validator.validate(this.source);
50 }catch(IOException e){
51 e.printStackTrace(System.err);
52 System.err.println("XML検証に失敗しました。");
53 }catch(SAXException e){
54 e.printStackTrace(System.err);
55 System.err.println("XML検証に失敗しました。");
57 if( ! done ) System.exit(1);
64 * 文字出力を横取りしバックグラウンドで検証を行うWriterを生成する。
68 public static Writer wrapValidator(Writer writer){
69 PipedReader reader = new PipedReader();
72 pipeWriter = new PipedWriter(reader);
73 }catch(IOException e){
74 e.printStackTrace(System.err);
75 System.err.println("処理を続行できません。");
80 MultiPlexer mtplx = new MultiPlexer();
81 mtplx.addWriter(writer);
82 mtplx.addWriter(pipeWriter);
86 task = new ValidateTask(reader);
87 }catch(SAXException e){
88 e.printStackTrace(System.err);
89 System.err.println("処理を続行できません。");
93 Thread th = new Thread(task);