我目前面临的问题是我有一个Web应用程序,包括一个axis 2 Web服务客户端,它应该使用rampart作为安全头。因此,我调整了axis2.xml文件,包括web-app中的所有库和rampart模块。将axis2.xml放在类路径中(例如/WEB-INF/classes/axis2.xml)可以正常工作。但是模块库呢?我尝试了不同的位置(WEB-INF / classes / modules,WEB-INF / modules),但它根本不起作用。每次我尝试为客户端创建ConfigurationContext时,都会遇到无法找到模块rampart的异常。
以下是我创建上下文的方式(没什么特别的......)
ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromURIs(axis2Location, moduleLocation);
这就是我收到的例外情况:
Caused by: org.apache.axis2.AxisFault: The system is attempting to engage a module that is not available: rampart
at org.apache.axis2.deployment.URLBasedAxisConfigurator.getAxisConfiguration(URLBasedAxisConfigurator.java:78)
at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:68)
at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromURIs(ConfigurationContextFactory.java:194)
at com.test.webclient.Environment.create(Environment.java:88)
... 32 more
所以我很好奇 - 在网络应用程序中使用axis2客户端时,应该如何指定模块位置?感谢任何帮助:)。
编辑:我身边的更多信息:
- >使用的是JBoss 5.1GA - > Axis2版本是1.4.1 - > Axis2 jar随我的应用程序一起提供在WEB-INF / lib中,它们不存在于Appserver的任何其他位置(例如JBOSS_HOME / lib)。
另外我想指出,只找不到模块。如果我没有提供自定义的axis2.xml(定义模块的位置),客户端就可以正常工作。
答案 0 :(得分:0)
你在哪里拥有轴类?例如,URLBasedAxisConfigurator。
您没有说明您正在运行哪个App Server,但是某些应用服务器具有类加载器的层次结构,并且并非所有加载代码都使用相同的类加载器。
因此,例如,如果Axis来自应用服务器本身而不是您的应用程序定义的类加载器,那么Axis将无法看到您的应用程序的类。因此,您需要在某个应用程序服务器定义的目录中输出模块,或使用特定于应用程序服务器的机制来告诉它在哪里查看。
更令人困惑的是,您可以在应用程序中随附一份Axis副本,并在应用程序服务器上随附一份,并且您可能没有使用您认为自己的那份。
使用您的JVM详细的类加载器选项(它将生成批次信息)您可能能够看到正在尝试查找模块的搜索路径,从而获得关于哪里的线索把它。