在 servlet 中加载 XML 文件时,Java Properties 类抛出 NPE?

标签 java servlets nullpointerexception

全部,

我决定在我的 servlet 中采用 java.util.Properties 类,以便于更轻松地维护配置。

我正在使用 poperties 类函数 loadFromXML 来获取包含变性(符合 XML 的)SQL 查询的 XML 文件,然后我的 servlet 将执行该查询。

使用此代码在普通 CLI Java 应用程序中运行良好:

// retrieve all queries from xml from classpath
    queries = new Properties();
    try
    {
        String path = getServletContext().getRealPath("/WEB-INF");
        System.out.println(path + "/queries.xml");
        queries.loadFromXML(MyServlet.class.getResourceAsStream(path + "/queries.xml"));
    }
    catch (IOException io)
    {
        io.printStackTrace();
    }

输出是 loadFromXML 方法抛出的 NULL 指针异常

java.lang.NullPointerException at java.util.Properties.loadFromXML(Properties.java:851)

该文件存在于 Web 服务器日志中的系统输出消息中。

CORE3282: stdout: /u02/SunONE61060/testserver/myservlet/WEB-INF/queries.xml

我尝试将 XML 文件移动到 Servlet 类所在的基目录并从那里调用它,但仍然是相同的 NPE。

有什么想法吗?

最佳答案

您的问题在这里:

MyServlet.class.getResourceAsStream(path + "/queries.xml")

这将返回null.getResourceAsStream() 只能从类路径加载(例如,/com/foo/myclass/MyResource.xml)。

由于您拥有资源的绝对路径,因此只需使用标准的 FileInputStream 即可。

另外:完成后关闭您的信息流。现在你不知道:你有资源泄漏。请参阅 Closeable 的 javadoc。

关于在 servlet 中加载 XML 文件时,Java Properties 类抛出 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22038117/

相关文章:

java - java中如何获取特定长度的字符串

java - 在类中找不到 Social_Security_Number 的 setter /字段

android - 启动时 PreferenceManager.getDefaultSharedPreferences 出现 NullPointerException

java - Java中不使用libpcap进行网络数据包捕获

java - Java 中是否有 TimeZone.getTimeZone() 的替代方案?

java - 如何阻止 Spring 重定向 url 被编码

android - com.android.volley.VolleyError : java. lang.NullPointerException

java - 创建一个工作线程并从 servlet 或 Spring Controller 运行

java - 使用 DispatcherServlet 刷新页面后停止提交表单

javascript - 三元运算符未按预期工作