【问题标题】:How to access a xsd file inside webcontent folder from normal java class?如何从普通 java 类访问 webcontent 文件夹中的 xsd 文件?
【发布时间】:2018-02-15 22:14:18
【问题描述】:

我有一个部署在 tomcat 服务器上的 war 文件。这场战争的 xsd 文件位于 webcontent -> WEB-INF -> 资源 -> 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 的所有字段都是空的。结果在 factory.newSchema(schemaFile) 点引发异常。

谁能告诉我我做错了什么以及我应该做哪些更改才能加载我的 .xsd 文件?

【问题讨论】:

    标签: java xml tomcat xsd


    【解决方案1】:

    你有两种选择:

    1. 通过将 XSD 放在 WEB-INF/classes 目录中,将您的 XSD 放在类路径中,然后使用以下命令加载它:

      getClass().getClassLoader() .getResourceAsStream("/HumanActivitySchema.xsd")

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

    2. 通过ServletContext#getResourceAsStrem(String path) 方法读取XSD。在您的情况下,路径将是

      /HumanActivitySchema.xsd

    【讨论】:

    • 非常感谢您的解决方案。我使用了您的第一个解决方案,并且如上所述将 xsd 文件放在 WEB-INF/classes 目录中。它对我有用。非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2012-04-09
    • 2014-02-20
    • 2023-03-13
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多