考虑一个简单的servlet:

// MyServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
    UtilClass.doSomething(getServletContext().getRealPath(SOME_FILE));
}


实用程序类会对文件执行以下操作:

// UtilClass.java
public String doSomething(String filePath)
{
    File f = new File(filePath);
    String s = readWhateverFrom(f);
    return s;
}


我现在将doSomething()函数移植到在Tomcat和Axis2下运行的Web服务。我将如何移植它以便仍然可以访问上下文并获得对servlet下文件的访问?

最佳答案

您应该了解(jax-ws)MessageContext。这取决于您的配置,但也许使用

@Resource
private WebServiceContext wsCtx;


并在您的方法中:

MessageContext messageContext = wsCtx.getMessageContext()

ServletContext ctx = (ServletContext)
           messageContext.getProperty(MessageContext.SERVLET_CONTEXT);


编辑:好像Axis2(以及Axis)支持以下内容:

HttpServlet servlet = (HttpServlet)
    MessageContext.getCurrentContext().getProperty(HTTPConstants.MC_HTTP_SERVLET);
ServletContext ctx = servlet.getServletContext();


具有以下导入:

import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;

10-08 10:57