首先我想补充的是,我可能已经尝试了关于这个问题的每一个建议的解决方案,但仍然不能使它工作。
这就是我的问题……
我有一个解析XML文件的应用程序。我选择一个xml文件(源文件),并根据xsd(这是JAR中我无法访问的文件)验证它。在我的IDE中运行代码可以正常工作:xsd = new File(getClass().getResourceAsStream("xsds/2014/schema.xsd").getFile());
System.out.println(xsd.getAbsolutePath());
//returns: C:UsersxxxDesktopDocumentsNetBeansProjectsJavaXMLValidatorbuildclassesappxsds2014schema.xsd
但是当我通过应用程序构建JAR文件并运行它时,我无法获得对该文件的引用。当我从我的JAR中运行应用程序时,我得到这个:
//returns: C:UsersxxxDesktopDocumentsNetBeansProjectsJavaXMLValidatordistfile:C:UsersxxxDesktopDocumentsNetBeansProjectsJavaXMLValidatordistJavaXMLValidator.jar!appxsds2014schema.xsd
路径看起来不错(我认为),但我不能在代码中得到对我的文件的正确引用:
Source schemaFile = new StreamSource(xsd);
Schema schema = null;
try {
schema = factory.newSchema(schemaFile);
} catch (SAXException ex) {
JOptionPane.showMessageDialog(null, "Invalid XML Schema Selected!!!n Exception: "+this.getStackTraceString(ex," "));
return;
}
我得到了异常:
SAXParseException: schema_reference.4: Failed to read schema document
'C:UsersxxxDesktopDocumentsNetBeansProjectsJavaXMLValidatordistfile:C:UsersxxxDesktopDocumentsNetBeansProjectsJavaXMLValidatordistJavaXMLValidator.jar!appxsds2014schema.xsd',
because 1)could not find the document;
2)the document could not be read;
3)the root element of the document is not <xsd:schema>
........
谁能建议一种方法,我可以有一个正确的引用JAR中的xsd文件?非常感谢您的帮助
正如MadProgrammer所说,使用URL
:
URL xsd = getClass().getResource("xsds/2014/schema.xsd");
Schema schema = null;
try {
schema = factory.newSchema(xsd);
} catch (SAXException ex) {
JOptionPane.showMessageDialog(null, "Invalid XML Schema Selected!!!n Exception: "+this.getStackTraceString(ex," "));
return;
}
例如,有一个项目具有这样的结构:
testproject
xsdfolder
schema.xsd
javaclassfolder
SomeClass.java
public static class SomeClass {
public static URL getLocalXsd() throws MalformedURLException {
URL baseUrl = SomeClass.class.getResource(SomeClass.class.getSimpleName() + ".class");
return new URL(baseUrl, "../xsdfolder/schema.xsd");
}
}