Java 在jar文件中引用XSD模式

Java 在jar文件中引用XSD模式,java,jar,xsd,Java,Jar,Xsd,我有两个模式文件,一个是从另一个导入的。当在Eclipse模式中执行代码时,会找到模式,但当从jar模式文件中执行代码时,则找不到模式 这是密码 SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(false); SchemaFactory schemaFactory =

我有两个模式文件,一个是从另一个导入的。当在Eclipse模式中执行代码时,会找到模式,但当从jar模式文件中执行代码时,则找不到模式

这是密码

SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
        factory.setValidating(false);

        SchemaFactory schemaFactory = SchemaFactory
                .newInstance("http://www.w3.org/2001/XMLSchema");
        try {
            factory.setSchema(schemaFactory.newSchema(new Source[] {
                    new StreamSource(getClass().getResource("Liso.xsd")
                            .getFile()),
                    new StreamSource(getClass().getResource("LisoXml.xsd")
                            .getFile()) }));
                this.saxParser = factory.newSAXParser();
        } catch (SAXException se) {
            System.out.println("SCHEMA : " + se.getMessage()); // problem in the XSD itself
        }
这是我得到的错误

SCHEMA : schema_reference.4: Failed to read schema document 'file:/C:/Tools/lib/LisoTools.jar!/com/xerox/liso/xml/Liso.xsd', because 1) could not find the do
cument; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
SCHEMA:SCHEMA\u reference.4:读取架构文档文件失败:/C:/Tools/lib/LisoTools.jar/com/xerox/liso/xml/liso.xsd',因为1)找不到do
文件;2) 文件无法读取;3) 文档的根元素不是。

谢谢

如果
Liso.xsd
正在导入
LisoXml.xsd
,那么只需将
Liso.xsd
定义到模式工厂即可,如下所示。api足够聪明地加载导入/包含的架构


我验证了这在1.5和1.6上都有效。在1.6上,如果使用DOM,您可能也会遇到类似的问题。

我记得两年前我遇到过一个类似的问题:getResource()使用java 1.4.2,但不使用java 1.6…请验证jar是否包含
/com/xerox/liso/xml/liso.xsd
,并且它看起来像xsd:)以上两个链接都已失效:-(你好,Aravind,我遇到了同样的问题。pI get
java.lang.IllegalArgumentException:URI在java.base/java.io.File.(File.java:420)中没有层次结构。
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema")
Schema compiledSchema = schemaFactory.newSchema(getClass().getClassLoader().getResource("Liso.xsd"))