如何从普通java类访问webcontent文件夹中的xsd文件?

如何从普通java类访问webcontent文件夹中的xsd文件?,java,xml,tomcat,xsd,Java,Xml,Tomcat,Xsd,我有一个war文件,它部署在tomcat服务器上。此war的xsd文件位于webcontent->WEB-INF->resources->HumanActivitySchema.xsd位置 我有一个java类,它试图加载模式以验证输入xml结构。这个java类是war文件部署的一部分 我的java代码函数如下所示: public boolean validateXMLSchema(String iActivity){ Source schemaFile = new StreamSou

我有一个war文件,它部署在tomcat服务器上。此war的xsd文件位于webcontent->WEB-INF->resources->HumanActivitySchema.xsd位置

我有一个java类,它试图加载模式以验证输入xml结构。这个java类是war文件部署的一部分

我的java代码函数如下所示:

public boolean validateXMLSchema(String iActivity){


    Source schemaFile = new StreamSource(getClass().getClassLoader()
            .getResourceAsStream("HumanActivitySchema.xsd"));

    try {
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = factory.newSchema(schemaFile);
        Validator validator = schema.newValidator();
        validator.validate(new StreamSource(new StringReader(iActivity)));
    }
    catch (IOException | SAXException e) {
        if(DBG){
            System.out.println("Error Message while validating activity : " + e.getMessage());
        }
        return false;
    }
    return true;
}
但这段代码的问题是,它找不到xsd文件。所以schemaFile的所有字段都是空的。因此,异常会在工厂.newSchema(schemaFile)点抛出


有人能告诉我我做错了什么,我应该做什么更改才能加载.xsd文件吗?

您有两种选择:

  • 通过将XSD放在WEB-INF/classes目录中,将其放入类路径中,并使用以下内容加载:

    getClass().getClassLoader() .getResourceAsStream(“/HumanActivitySchema.xsd”)

    请注意前面的斜杠(“/”)。您还可以将其放置在与Java类的包名匹配的文件夹中,并省略前面的“/”

  • 通过该方法读取XSD。在您的情况下,路径是

    /HumanActivitySchema.xsd


  • 非常感谢您的解决方案。我使用了您的第一个解决方案,如前所述,将xsd文件放在WEB-INF/classes目录中。这对我很有效。非常感谢!:)