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;
30 * <p>XMLリーダは名前空間をサポートしていなければならない。
31 * @param reader XMLリーダ
32 * @throws NullPointerException 引数がnull
33 * @throws SAXException 機能不足のXMLリーダが渡された
35 public XmlPmdLoader(XMLReader reader)
36 throws NullPointerException, SAXException {
39 if(reader == null) throw new NullPointerException();
40 if( ! reader.getFeature(SAXFEATURES_NAMESPACES) ){
41 throw new SAXException();
54 * @throws SAXException 構文エラー
55 * @throws IOException 入力エラー
56 * @throws TogaXmlException 構文エラー
58 public PmdModel parse(InputSource source)
59 throws SAXException, IOException, TogaXmlException{
60 XmlHandler saxHandler = new XmlHandler();
61 this.reader.setContentHandler(saxHandler);
64 this.reader.parse(source);
65 }catch(SAXException e){
66 Throwable cause = e.getCause();
67 if(cause instanceof TogaXmlException){
68 throw (TogaXmlException) cause;
73 return saxHandler.getPmdModel();