我正在开发部署到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信息中心(我至少可以看到)中没有关于如何执行此操作的参考。
答案 0 :(得分:1)
首先,您应该避免使用带有JAX-RS的版本2.4的过时servlet规范。即使版本2.5也存在一些与向JAX-RS bean注入依赖关系相关的令人讨厌的限制。
由于您使用的是WAS 8.5,我建议您通过更新web.xml来切换到Servlets 3.0。