4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.model.xml;
10 import java.io.IOException;
11 import jp.sfjp.mikutoga.pmd.model.PmdModel;
12 import jp.sfjp.mikutoga.xml.TogaXmlException;
13 import org.xml.sax.InputSource;
14 import org.xml.sax.SAXException;
15 import org.xml.sax.XMLReader;
18 * XMLモデルファイルを読み込むためのローダ。
20 public class XmlPmdLoader {
22 private static final String SAXFEATURES_NAMESPACES =
23 "http://xml.org/sax/features/namespaces";
25 private final XMLReader reader;
31 * <p>XMLリーダは名前空間をサポートしていなければならない。
33 * @param reader XMLリーダ
34 * @throws NullPointerException 引数がnull
35 * @throws SAXException 機能不足のXMLリーダが渡された
37 public XmlPmdLoader(XMLReader reader)
38 throws NullPointerException, SAXException {
41 if(reader == null) throw new NullPointerException();
42 if( ! reader.getFeature(SAXFEATURES_NAMESPACES) ){
43 throw new SAXException();
57 * @throws SAXException 構文エラー
58 * @throws IOException 入力エラー
59 * @throws TogaXmlException 構文エラー
61 public PmdModel parse(InputSource source)
62 throws SAXException, IOException, TogaXmlException{
63 XmlHandler saxHandler = new XmlHandler();
64 this.reader.setContentHandler(saxHandler);
67 this.reader.parse(source);
68 }catch(SAXException e){
69 Throwable cause = e.getCause();
70 if(cause instanceof TogaXmlException){
71 throw (TogaXmlException) cause;
76 return saxHandler.getPmdModel();