如何在使用Java Web Services时访问HttpServletRequest对象

Ste*_*eod 14 java annotations web-services servlets

我正在使用Java 6,Tomcat 6和Metro.我使用WebService和WebMethod注释来公开我的Web服务.我想获得有关请求的信息.我尝试了以下代码,但wsCtxt始终为null.我必须采取什么步骤,为WebServiceContext得到空.

换句话说:如何执行以下行来获取wsCtxt的非null值?

MessageContext msgCtxt = wsCtxt.getMessageContext();

@WebService
public class MyService{

  @Resource
  WebServiceContext wsCtxt;

  @WebMethod
  public void myWebMethod(){
    MessageContext msgCtxt = wsCtxt.getMessageContext();
    HttpServletRequest req = (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST);
    String clientIP = req.getRemoteAddr();
  }
Run Code Online (Sandbox Code Playgroud)

Jam*_*son 11

我建议您将变量从wsCtxt重命名为wsContext,或者将name属性指定给@Resource注释.@Resource上J2ee教程表明变量的名称用作查找的一部分.我在Glassfish注入不同类型的资源时使用资源注入遇到了同样的问题.

虽然您的正确名称可能不是wsContext.我正在关注这个java技巧.如果您喜欢变量名称wsCtxt,那么在变量声明中使用name属性:

@Resource(name="wsContext") WebServiceContext wsCtxt;