首页 > 解决方案 > InputStream 验证后为空 - javax.xml.validation.Validator;

问题描述

我不明白为什么 InputStream 参数在下面的源代码中的验证指令之后为空。

    public boolean validateXMLSchema(InputStream xmlStream) {
        try {
            XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream);

            reader = new StreamReaderDelegate(reader) {
                public int next() throws XMLStreamException {
                    int n = super.next();
                    return n;
                }
            };

            SchemaFactory factory =
                    SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new StreamSource(getClass().getResourceAsStream("/xsd_example.xsd")));
            Validator validator = schema.newValidator(); 
            validator.validate(new StAXSource(reader));  //InputStream empty after this instruction
        } catch (SAXException | IOException | XMLStreamException e) {
            throw new RuntimeException("Error message...", e);

        }
        return true;
    }

有人可以帮我吗?

提前致谢, 米卡

标签: java

解决方案


可能您的验证器会读取 InputStream

来自 https://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stax/StAXSource.html

StAXSources 在处理过程中被消耗并且不可重用。


推荐阅读