View Javadoc

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