使用资源在JAR中加载XSD架构失败

时间:2017-08-17 07:21:51

标签: java jar xsd

在我的jar中

我提供了我的xsd Schema文件,即以下结构:

myjar
 - myschema.xsd

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

我将以下列方式将xsd Schema添加到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)

我以为我确实知道你需要把它作为资源阅读,当它被装在一个罐子里但是现实告诉我我似乎做错了什么。

我缺少什么提示?

1 个答案:

答案 0 :(得分:4)

您无法将其作为文件获取,因为它不是文件。它是jar文件中的一个条目。文件是操作系统对象,从OS的角度来看,jar文件是文件。虽然您可以通过InputStream获得ClassLoader,但您可以通过此InputStream阅读其内容。

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