在尝试将 axis2 网络应用程序从 glassfish3 移动到 tomcat6 时,我似乎无法找到从静态上下文获取配置参数的方法。
在 glassfish3 中,一个系统属性被定义在一个很远的地方,并使用 System.getProperty(String name)
从应用程序中读取。 .不仅 web 同意这不是 web 应用程序的方式,而且这个技巧对于 tomcat 也不可行 (tomcat docs) .
从 ServletContext
中读取参数这也是不可行的,因为应用程序使用 axis2,而且我似乎无法找到一种方法来从初始化应用程序配置的静态上下文访问任何类型的 servlet voodoo。
services.xml
(包含 axis2 服务描述的文件)可以包含 <parameter>
节点,所以这似乎是配置配置位置的好地方,但我似乎无法找到从应用程序读取这些参数的方法。
简而言之:关于如何从静态上下文中获取在应用程序代码之外配置的值的任何想法?
(此处列出的答案是 StackOverflow 不允许我回答我自己的问题...)
在网上搜索了一些之后,找到了使用 org.apache.axis2.engine.ServiceLifeCycle
实现的解决方案。 , 它可以读取 startUp
中的参数- 方法本身:
Parameter param = service.getParameter("name");
if (param != null) {
saveParamValue(param.getValue().toString());
} else {
// log warning on falling back to System.getProperty()
}
使用 class="fully.qualified.ClassName"
附加生命周期类在 <service>
上services.xml
的节点axis2 使用的文件。
这行得通,现在应用程序只是因为其他原因而崩溃(但这与此问题无关)。
最佳答案
可以通过获取服务的 ServiceContext
对象,然后调用 ServiceContext.getParameter()
来访问 services.xml
中的参数。如果您的服务实现类实现了 Lifecycle接口(interface),那么 Axis2 将在每次创建服务类的新实例时调用 Lifecycle.init()
。 Lifecycle.init()
的参数是服务的 ServiceContext
。您的 init()
实现可以保存上下文对象或查找您感兴趣的参数。
关于java - 从 axis2 中的静态上下文获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804467/