我提供了我的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)
我以为我确实知道你需要把它作为资源阅读,当它被装在一个罐子里但是现实告诉我我似乎做错了什么。
我缺少什么提示?
答案 0 :(得分:4)
您无法将其作为文件获取,因为它不是文件。它是jar文件中的一个条目。文件是操作系统对象,从OS的角度来看,jar文件是文件。虽然您可以通过InputStream
获得ClassLoader
,但您可以通过此InputStream阅读其内容。
Schema xsdSchema = sf.newSchema( new StreamSource(ClassLoader.getSystemResourceAsStream("shema.xsd")));