在IBM Websphere 8.5 JAX-RS应用程序中使用@Context获取null ServletContext

时间:2014-02-13 13:14:20

标签: servlets nullpointerexception jax-rs websphere-8

我正在开发部署到IBM Websphere 8.5的JAX-RS服务。我试图通过使用以下代码注入ServletContext(当前在类中的字段级别,但我也尝试作为服务方法中的参数传入,但我得到相同的问题)。

@Context
private ServletContext servletContext = null;

当我调用my service方法时,servletContext变量为null。

我的web.xml文件设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
    <servlet-name>MyServices</servlet-name>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.mycompany.ApplicationConfig</param-value>
    </init-param>
            <init-param>
        <param-name>myParam</param-name>
        <param-value>myValue</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyServices</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

然后在代码中我使用servletContext来获取init-param,例如:

String myParam = servletContext.getInitParameter("myParam");

我提供了IBM提供的j2ee.jar文件(对于正在运行的Java 6)作为WAR文件附带的依赖项。

所以我的问题是,这是Websphere的JAX-RS实现的错误,还是我在这里遗漏了什么?

我找到了几个关于如何为Websphere编写JAX-RS应用程序的指南,但没有一个提到注入ServletContext。在IBM Websphere 8.5信息中心(我至少可以看到)中没有关于如何执行此操作的参考。

1 个答案:

答案 0 :(得分:1)

首先,您应该避免使用带有JAX-RS的版本2.4的过时servlet规范。即使版本2.5也存在一些与向JAX-RS bean注入依赖关系相关的令人讨厌的限制。

由于您使用的是WAS 8.5,我建议您通过更新web.xml来切换到Servlets 3.0。