0

考虑一个简单的 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;
}

我现在将该功能移植到在 Tomcat 和Axis2doSomething()下运行的 Web 服务。我将如何移植它以便我仍然可以访问上下文并访问 servlet 下的文件?

4

2 回答 2

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;
于 2009-12-25T21:17:14.480 回答
0

听起来像是 ServletFilterThreadLocal. Axis 也在 Servlet 上下文中运行。因此,您所要做的就是实现一个 custom javax.servlet.Filter,将其填充ServletRequestThreadLocal您可以从实用程序类中访问它的地方。您可以ServletContextFilterConfig.

于 2009-12-25T21:16:38.057 回答