2017-08-17 74 views
0

我的罐子内我提供我的XSD模式文件,即以下结构:加载XSD架构JAR内通过使用资源失败

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中时,你需要将它作为Resource来读取,但事实表明,我似乎在做错某些事情。

任何提示我缺少什么?

回答

1

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

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

好吧,现在我明白了。我只知道关于资源的事情,但是,这是非常有道理的,谢谢! – Stefan