我正在使用 glassfish 3.1.2.2,但无法为 Web 服务请求获取客户端 IP。
我有以下成员声明:
@Resource
WebServiceContext mWebserviceCtx;
但是已经调用了这个:
MessageContext msgCtx = mWebserviceCtx.getMessageContext();
给我一个 NullPointerException:
java.lang.NullPointerException:
at org.glassfish.webservices.WebServiceContextImpl.getMessageContext(WebServiceContextImpl.java:86)
大多数询问此主题的人都会在下一步从消息上下文中读取 NullPointerException 时抱怨,但我什至没有在这里得到一个……我做错了什么?
编辑:屁股要求,我将我的代码简化为一个小例子,一个非常小的示例项目,从本教程构建并稍作修改: http ://docs.oracle.com/cd/E19226-01/820-7627/giqaa/index .html
我仍然使用此示例代码准确地重现了此错误。
package helloWorld;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
@Stateless
@Path("helloworld")
public class HelloWorld {
@Resource
WebServiceContext mWebserviceCtx;
public HelloWorld() {
}
@GET
@Produces("text/html")
public String getHtml() {
try {
MessageContext msgCtx = mWebserviceCtx.getMessageContext();
} catch (Exception ex) {
ex.printStackTrace();
}
return "<html><body><h1>Hello, World!!</body></h1></html>";
}
}
EDIT2:正如我在回答中所指出的,这不是 Web 服务,而是 REST 服务,这是我困惑的一部分(我认为框架在这方面会以类似的方式处理两者,但事实并非如此)。