Java 如何使用oracle.XML.parser.v2.DOMParser使用XSD InputStream验证XML

Java 如何使用oracle.XML.parser.v2.DOMParser使用XSD InputStream验证XML,java,xml,parsing,xsd,Java,Xml,Parsing,Xsd,我试图根据XSD文档验证XML文件。我用两种方法来做 XML和XSD都是文件 XML是一个文件,XSD是一个流 如果XML和XSD是文件 validateXML(xmlFile, xsdFile) { m_domParser = new DOMParser(); String url = "file:" + new File(xml).getAbsolutePath(); String xsdUrl = "file:" + new File

我试图根据XSD文档验证XML文件。我用两种方法来做

  • XML和XSD都是文件

  • XML是一个文件,XSD是一个流

  • 如果XML和XSD是文件

      validateXML(xmlFile, xsdFile)
    {
    
        m_domParser = new DOMParser();
    
        String url       = "file:" + new File(xml).getAbsolutePath();
        String xsdUrl       = "file:" + new File(xsd).getAbsolutePath();
             try
             {
                 m_domParser.setValidationMode(XMLParser.SCHEMA_VALIDATION);
                 m_domParser.setXMLSchema(xsd);
    
                 Validator handler = new Validator();
    
                 m_domParser.setErrorHandler(handler);
                 m_domParser.parse(url);
    
                 m_xmlDoc = m_domParser.getDocument();
                 //determine what kinda utility requested
    
             }
    
    }
    
    它工作正常,验证正确。下面是我为使用XSD信息作为流进行验证而编写的代码

    import org.xml.sax.InputSource;
    import oracle.xml.parser.v2.DOMParser;
    
    validateXML(String xmlFile, InputStream is)
        Reader reader;
          try {
                m_domParser = new DOMParser();
                m_domParser.setValidationMode(XMLParser.SCHEMA_VALIDATION);
    
                //get the XMLSchema from the input stream
                XSDBuilder builder = null;
                XMLSchema schema   = null;
                builder = new XSDBuilder();
                Reader reader = new InputStreamReader(is,"UTF-8");
                InputSource iSource = new InputSource(reader);
    
                if(iSource != null) {
                  iSource.setEncoding("UTF-8");
                  schema = builder.build(iSource);  //NOTE         
                 }
    
                m_domParser.setXMLSchema(schema);
    
                Validator handler = new Validator();
    
                m_domParser.setErrorHandler(handler);
    
                //get the url for the xml file
                String url       = "file:" + new File(xmlFile).getAbsolutePath();
                m_domParser.parse(url);
    
    
            }
    
    但是在构建过程中的注释注释(schema=builder.build(isoource);)中,它抛出了一个异常“从基类型的无效派生”缺少派生

    XSD流是从同一个XSD文件生成的,为什么它会失败呢?在构建XMLSchema时,说“从基类型派生无效”是什么意思


    请帮助我理解第二种情况中出现的错误。非常感谢您的快速回复。

    关于创建临时文件和传递itI,我不允许在应用程序中写入临时文件。关于创建临时文件和传递itI,我不允许在应用程序中写入临时文件。