OSDN Git Service

CVS最新版の全ファイルを追加
[spring-ext/ozacc-mail.git] / src / java / com / ozacc / mail / impl / DTDEntityResolver.java
1 package com.ozacc.mail.impl;\r
2 \r
3 import java.io.IOException;\r
4 import java.io.InputStream;\r
5 \r
6 import org.apache.commons.logging.Log;\r
7 import org.apache.commons.logging.LogFactory;\r
8 import org.xml.sax.EntityResolver;\r
9 import org.xml.sax.InputSource;\r
10 import org.xml.sax.SAXException;\r
11 \r
12 /**\r
13  * ozacc-mail libraryのDTDファイルをクラスパス上から検出するEntityResolver実装。\r
14  * \r
15  * @since 1.1\r
16  * \r
17  * @author Tomohiro Otsuka\r
18  * @version $Id: DTDEntityResolver.java,v 1.1.2.2 2004/11/25 08:01:07 otsuka Exp $\r
19  */\r
20 public class DTDEntityResolver implements EntityResolver {\r
21 \r
22         private static Log log = LogFactory.getLog(DTDEntityResolver.class);\r
23 \r
24         private static final String URL = "http://www.ozacc.com/library/dtd/";\r
25 \r
26         /**\r
27          * クラスパス「com/ozacc/mail」上で、指定されたsystemIdのファイル名と同じファイルを検出します。\r
28          * もしも検出できなければnullを返します。(必ず検出できるはずです。)\r
29          * \r
30          * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String, java.lang.String)\r
31          */\r
32         public InputSource resolveEntity(String publicId, String systemId) throws SAXException,\r
33                                                                                                                                                 IOException {\r
34                 if (systemId != null && systemId.startsWith(URL)) {\r
35                         log.debug("クラスパス[com/ozacc/mail/]上で'" + systemId + "'の取得を試みます。");\r
36 \r
37                         // Search for DTD\r
38                         ClassLoader classLoader = this.getClass().getClassLoader();\r
39                         InputStream dtdStream = classLoader.getResourceAsStream("com/ozacc/mail/"\r
40                                         + systemId.substring(URL.length()));\r
41 \r
42                         if (dtdStream == null) {\r
43                                 log.debug("'" + systemId + "'はクラスパス上に見つかりませんでした。");\r
44                                 return null;\r
45                         } else {\r
46                                 log.debug("'" + systemId + "'をクラスパス上で取得しました。");\r
47                                 InputSource source = new InputSource(dtdStream);\r
48                                 source.setPublicId(publicId);\r
49                                 source.setSystemId(systemId);\r
50                                 return source;\r
51                         }\r
52                 } else {\r
53                         // use the default behaviour\r
54                         return null;\r
55                 }\r
56         }\r
57 \r
58 }