2017-08-17 62 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

相關問題