在我的 jar 中,我提供了我的 xsd 架构文件,即以下结构:
\n\nmyjar\n - myschema.xsd\nRun Code Online (Sandbox Code Playgroud)\n\n当我解压缩该文件时,我可以验证该文件是否存在于 JAR 内的根级别。
\n\n我通过以下方式将 xsd 架构添加到 SchemaFactory:
\n\npublic void loadXSDSchema() throws InitializationException {\n SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);\n try {\n xsdSchema = sf.newSchema(new File(getClass().getClassLoader().getResource(XSD_SCHEMA_FILE).getFile()));\n } catch (SAXException e) {\n throw new InitializationException(ApiExceptionId.INIT_XSD_SCHEMA, e);\n }\nRun Code Online (Sandbox Code Playgroud)\n\n不幸的是,它在生成的 JAR 文件中不起作用 - 我收到 FileNotFoundException:
\n\nCaused by: java.io.FileNotFoundException: D:\\dev\\myjar.jar!\\myschema.xsd (Die Syntax f\xe2\x96\x92r den Dateinamen, Verzeichnisnamen oder die Datentr\xe2\x96\x92gerbezeichnung ist falsch)\nRun Code Online (Sandbox Code Playgroud)\n\n我以为我确实知道当它打包在罐子里时你需要将其作为资源来读取,但现实告诉我我似乎做错了一些事情。
\n\n关于我缺少什么的任何提示吗?
\n小智 5
您无法将其作为文件获取,因为它不是文件。它是您的 jar 文件中的一个条目。文件是操作系统对象,从操作系统的角度来看,jar 文件就是文件。虽然你可以获得一个InputStreamvia ClassLoader ,并且可以通过这个InputStream读取它的内容。
Schema xsdSchema = sf.newSchema( new StreamSource(ClassLoader.getSystemResourceAsStream("shema.xsd")));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3340 次 |
| 最近记录: |