Java 如何将XML对象存储在每个请求都可以访问的全局会话中?
每晚WS-server中的文件夹中都会出现一个XML文档。 我希望web服务在特定的时间(比如说05:00)读取此XML文件,并每天将其放入存储在内存中的对象中 我怎样才能做到这一点?我应该使用哪个对象? 我打算使用JAX-WS。也可以使用JAX-RS吗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资源位于同一个模块中,那么它们将共享您放置在那里的对象/文档
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服务线程之间共享的单例对象。关于您的答案,这个上下文是否已经实例化,或者我需要手动初始化它?上下文由应用程序服务器容器运行时提供。走单件路线就是对规范作者多年前解决的问题推出自己的解决方案。只要我的两分钱。