4 * License : The MIT License
5 * Copyright(c) 2009 olyutorskii
8 package jp.sfjp.jindolf.dxchg;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import java.net.URISyntaxException;
13 import javax.xml.XMLConstants;
14 import javax.xml.parsers.DocumentBuilder;
15 import javax.xml.parsers.DocumentBuilderFactory;
16 import javax.xml.parsers.ParserConfigurationException;
17 import javax.xml.transform.stream.StreamSource;
18 import javax.xml.validation.Schema;
19 import javax.xml.validation.SchemaFactory;
20 import jp.sourceforge.jindolf.corelib.XmlResource;
21 import org.w3c.dom.ls.LSResourceResolver;
22 import org.xml.sax.EntityResolver;
23 import org.xml.sax.ErrorHandler;
24 import org.xml.sax.SAXException;
25 import org.xml.sax.SAXParseException;
30 public final class XmlUtils{
32 private static final ErrorHandler STRICT_HANDLER = new StrictHandler();
33 private static final XmlResourceResolver RESOLVER =
34 new XmlResourceResolver();
48 * 共通スキーマによるバリデーションを行うためのDocumentBuilderを生成する。
50 * @throws URISyntaxException URIが不正
51 * @throws IOException 入出力エラー
52 * @throws ParserConfigurationException パーサ準備失敗
53 * @throws SAXException スキーマが変
55 public static DocumentBuilder createDocumentBuilder()
58 ParserConfigurationException,
60 Schema xsdSchema = createCoreSchema(RESOLVER);
61 DocumentBuilder builder = createBuilder(xsdSchema, RESOLVER);
68 * このスキーマはLSResourceResolverによるリダイレクトをサポートする。
69 * @param resolver リゾルバ
71 * @throws URISyntaxException URIが不正
72 * @throws IOException 入出力エラー
73 * @throws SAXException スキーマが変
75 public static Schema createCoreSchema(LSResourceResolver resolver)
76 throws URISyntaxException,
79 SchemaFactory xsdSchemaFactory =
80 SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
81 xsdSchemaFactory.setResourceResolver(resolver);
82 xsdSchemaFactory.setErrorHandler(STRICT_HANDLER);
84 InputStream is = XmlResource.I_URL_COREXML.openStream();
85 StreamSource source = new StreamSource(is);
86 Schema schema = xsdSchemaFactory.newSchema(source);
92 * スキーマによる妥当性検証を兼用するDocumentBuilderを生成する。
94 * @param resolver リゾルバ
96 * @throws ParserConfigurationException パーサ準備失敗
98 public static DocumentBuilder createBuilder(Schema schema,
99 EntityResolver resolver)
100 throws ParserConfigurationException{
101 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
102 factory.setNamespaceAware(true);
103 factory.setValidating(false);
104 factory.setSchema(schema);
106 DocumentBuilder builder = factory.newDocumentBuilder();
107 builder.setErrorHandler(STRICT_HANDLER);
108 builder.setEntityResolver(resolver);
114 * スキーマ検証用の厳密なエラーハンドラ。
116 public static class StrictHandler implements ErrorHandler{
121 public StrictHandler(){
128 * @param e {@inheritDoc} エラー情報
129 * @throws org.xml.sax.SAXException {@inheritDoc} 引数と同じ物
132 public void error(SAXParseException e) throws SAXException{
138 * @param e {@inheritDoc} エラー情報
139 * @throws org.xml.sax.SAXException {@inheritDoc} 引数と同じ物
142 public void fatalError(SAXParseException e) throws SAXException{
148 * @param e {@inheritDoc} エラー情報
149 * @throws org.xml.sax.SAXException {@inheritDoc} 引数と同じ物
152 public void warning(SAXParseException e) throws SAXException{