如何在每个请求都可以访问的全局会话中存储XML对象?

时间:2015-01-23 13:53:31

标签: java xml web-services jax-rs jax-ws

每天晚上,XML文档都会出现在WS服务器的文件夹中。 我希望Web服务在某个时间读取这个XML文件(让我们说在05:00)并将其放在存储在内存中的对象中。

我怎样才能做到这一点?我应该使用哪个对象? 我打算使用JAX-WS。是否也可以使用JAX-RS?

韩国社交协会

1 个答案:

答案 0 :(得分:0)

您可以将其作为属性存储在应用程序的ServletContext中。 Web模块中的任何JAX-WS服务或JAX-RS资源都可以访问它。作为额外的好处,如果您的JAX-WS服务和JAX-RS资源位于同一模块(war)中,它们将共享您放置在那里的对象/文档的实例

对于JAX-RS资源:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.servlet.ServletContext;

@Path("myresource")
public class MyResource {

    @Context ServletContext context;

    @GET
    @Produces("text/plain")
    public String getMyResource() {
        return context.getAttribute("cachedDocument");
    }
}

对于JAX-WS服务:

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@WebService
public class MyService {
@Resource
private WebServiceContext context;

    @WebMethod
    public String getDocument() {
        ServletContext servletContext =
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
        return servletContext.getAttribute("cachedDocument");
    }
}

另见:ServletContext javadocs。