java - 使用资源在 JAR 中加载 XSD 模式失败

标签 java jar xsd

在我的 jar 中,我提供了我的 xsd 架构文件,即以下结构:

myjar
 - myschema.xsd

当我解压缩文件时,我可以验证该文件是否存在于 JAR 中的根级别。

我通过以下方式将 xsd 模式添加到 SchemaFactory:

public void loadXSDSchema() throws InitializationException {
    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    try {
        xsdSchema = sf.newSchema(new File(getClass().getClassLoader().getResource(XSD_SCHEMA_FILE).getFile()));
    } catch (SAXException e) {
        throw new InitializationException(ApiExceptionId.INIT_XSD_SCHEMA, e);
    }

不幸的是,它在生成的 JAR 文件中不起作用 - 我收到 FileNotFoundException:

Caused by: java.io.FileNotFoundException: D:\dev\myjar.jar!\myschema.xsd (Die Syntax f▒r den Dateinamen, Verzeichnisnamen oder die Datentr▒gerbezeichnung ist falsch)

我以为我确实知道当它被打包在一个 jar 里时你需要将它作为一个资源来阅读,但现实告诉我我似乎做错了什么。

有什么关于我遗漏的提示吗?

最佳答案

您不能将其作为文件获取,因为它不是文件。它是您的 jar 文件中的一个条目。文件是操作系统对象,从操作系统的角度来看,jar 文件就是文件。虽然你可以通过 ClassLoader 得到一个 InputStream 并且你可以通过这个 InputStream 读取它的内容。

Schema xsdSchema = sf.newSchema( new StreamSource(ClassLoader.getSystemResourceAsStream("shema.xsd")));

关于java - 使用资源在 JAR 中加载 XSD 模式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45728908/

相关文章:

java - 从单个源文件夹 Gradle 多个 jar

文件上的 Android Studio 锁图标

java - Neo4j 2.3.1 服务器在保存具有多个关系的 SDN4 实体时死机

Java 应用程序返回码

java - 相同的代码在两种不同的包装上表现不同

java - 无法找到命名空间 http ://www. 的 NamespaceHandler mulesoft.org/schema/mule/jersey

xml - 在 XSD 元素中声明命名空间属性

java - 如何减少 mybatis-spring xml 文件扫描时间?

java - 为什么我当前的日期时间不始终与系统时钟同步?

xml - 如何在 XSD 中为具有子元素序列的元素添加属性声明?