java - 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;
}
有人可以帮我吗?
提前致谢, 米卡
解决方案
可能您的验证器会读取 InputStream
来自 https://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stax/StAXSource.html
StAXSources 在处理过程中被消耗并且不可重用。