无法获取Java EE Web服务(EDIT:REST)请求的客户端IP

时间:2013-07-24 14:53:23

标签: java-ee glassfish jax-rs

我正在使用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服务,这是我困惑的一部分(我假设框架将以类似的方式处理这两者)并且结果并非如此)。

1 个答案:

答案 0 :(得分:2)

好吧,好像我发现了问题。

似乎我不应该使用WebServiceContext,因为我所做的不是Web服务而是REST服务。所以这是我不好的术语。

相反,我应该使用

@Context HttpServletRequest mRequest;

然后mRequest.getRemoteAddr(),这似乎工作......