0

我正在使用 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 服务,这是我困惑的一部分(我认为框架在这方面会以类似的方式处理两者,但事实并非如此)。

4

1 回答 1

2

好的,看来我发现了问题。

看来我不应该使用 WebServiceContext 因为我所做的不是 Web 服务而是 REST 服务。所以这对我来说是不好的术语。

相反,我应该使用

@Context HttpServletRequest mRequest;

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

于 2013-07-25T07:28:54.340 回答