我知道如何在JUnit中使用以下方法执行此操作:

String xsdPathname = getClass.getResource("/META-INF/xsd/my.xsd").getFile();
Schema schema = sf.newSchema(new File(pathname));
Validator validator = schema.newValidator();
validator.validate(source);


但是据我所知,当xsd打包在jar中时,这是不可用的。

是否有其他“ schema”构建方法可以接受“ InputStream”而不是“ File”?

最佳答案

您可以使用SchemaFactory#newSchema(Source),并提供StreamSource。因此,您的代码看起来像

    InputStream xsdInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/META-INF/xsd/my.xsd");
    Schema schema = sf.newSchema(new StreamSource(xsdInputStream));
    Validator validator = schema.newValidator();
    validator.validate(source);

关于java - 如何使用标准javax.xml.validation.Validator在运行时(而非JUnit)检查xml文件是否对xsd有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50609127/

10-13 03:57