我正在使用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服务,这是我困惑的一部分(我假设框架将以类似的方式处理这两者)并且结果并非如此)。
答案 0 :(得分:2)
似乎我不应该使用WebServiceContext,因为我所做的不是Web服务而是REST服务。所以这是我不好的术语。
相反,我应该使用
@Context HttpServletRequest mRequest;
然后mRequest.getRemoteAddr(),这似乎工作......