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

Java 如何将XML对象存储在每个请求都可以访问的全局会话中?,java,xml,web-services,jax-rs,jax-ws,Java,Xml,Web Services,Jax Rs,Jax Ws,每晚WS-server中的文件夹中都会出现一个XML文档。 我希望web服务在特定的时间(比如说05:00)读取此XML文件,并每天将其放入存储在内存中的对象中 我怎样才能做到这一点?我应该使用哪个对象? 我打算使用JAX-WS。也可以使用JAX-RS吗 Tks.您可以将其作为属性存储在应用程序的ServletContext中。web模块中的任何JAX-WS服务或JAX-RS资源都可以访问它。另外,如果您的JAX-WS服务和JAX-RS资源位于同一个模块中,那么它们将共享您放置在那里的对象/文档

每晚WS-server中的文件夹中都会出现一个XML文档。 我希望web服务在特定的时间(比如说05:00)读取此XML文件,并每天将其放入存储在内存中的对象中

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


Tks.

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

对于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");
    }
}

另请参见:javadocs。

如果您只需要在内存对象中存储一个n XML文件,那么您不妨将该文件读入一个字节数组。如果还有更多的问题,您应该这样说,例如,web服务是一个单一的程序吗?它需要XML文档中的详细信息吗?您有它的XML模式吗?等等…它只是存储在内存中,直到下一次读取更新数据。我将创建一些测试。谢谢你的回答。我想我是在寻找类似这样的东西,一个加载一次并在所有web服务线程之间共享的单例对象。关于您的答案,这个上下文是否已经实例化,或者我需要手动初始化它?上下文由应用程序服务器容器运行时提供。走单件路线就是对规范作者多年前解决的问题推出自己的解决方案。只要我的两分钱。