【发布时间】:2011-03-27 00:31:40
【问题描述】:
实际上我有一个从特定 XML 文件中读取数据的 java 程序。 现在我想为该程序创建一个 jar 文件,并在其中包含相应的 DTD,以便任何使用我的 JAR 的人都可以根据该 DTD 检查其 XML。
请帮忙,提前谢谢!
【问题讨论】:
实际上我有一个从特定 XML 文件中读取数据的 java 程序。 现在我想为该程序创建一个 jar 文件,并在其中包含相应的 DTD,以便任何使用我的 JAR 的人都可以根据该 DTD 检查其 XML。
请帮忙,提前谢谢!
【问题讨论】:
您需要创建一个 Resolver 类,它将您的 DTD 的公共 ID 或系统 ID 解析为您打包到 jar 中的 DTD 的副本。
DocumentBuilderFactory factory = xmlFactories.newDocumentBuilderFactory();
factory.setNamespaceAware(true);
factory.setValidating(false);
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
documentBuilder.setEntityResolver(new EntityManager());
......
public class EntityManager implements EntityResolver {
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
/* code goes here to return contents of DTD */
}
}
【讨论】:
这将允许您在 .jar 中存储任意文件类型并在以后检索它。打包 .jar 时,明确包含 DTD 文件。例如:
jar cvfm myClass.jar manifest.mf *.class relative\path\to\file.dtd
注意操作系统的(反)斜线方向。然后,要检索该资源以在您的代码中使用,请使用:
getClass().getResource("relative/path/to/file.dtd")
【讨论】: