将servlet移植到Web服务 - 访问上下文?

时间:2009-12-25 21:00:47

标签: java web-services tomcat axis

考虑一个简单的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下的文件?

2 个答案:

答案 0 :(得分:2)

你应该得到你的(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;

答案 1 :(得分:0)

听起来像Servlet FilterThreadLocal的工作。 Axis也在Servlet Context中运行。因此,您所要做的就是实现自定义javax.servlet.Filter,将ServletRequest填充到ThreadLocal中,您可以在其中从实用程序类中访问它。您可以从ServletContext获取FilterConfig

相关问题