当我在Eclipse上开发Axis2 Web服务时,我注意到Eclipse会自动将类从Axis2的lib文件夹复制到新项目的lib文件夹中。但是,并非所有来自Axis2的lib文件夹的类都被复制。有趣的是,即使没有复制Axis2的某些jar文件,当通过Eclipse部署到Tomcat时,Web服务也没有任何问题。此外,当我查看Tomcat的临时文件时,Tomcat似乎为web服务的modules.list上列出的模块生成了jar。
有人可以告诉我这件事发生了什么吗?为什么Eclipse不会复制Axis2中的所有jar?即使没有Axis2的其他jar,为什么Web服务可以在Tomcat上运行?那些临时文件是什么?它何时以及为何生成?
我尝试在WebSphere上运行相同的项目,因为缺少jar,我遇到了ClassDefNotFound异常。当我将所有未被Eclipse复制的Axis2 jar复制到我的项目时,我的问题就解决了。但是我对我的解决方案感到不舒服,因为即使没有这些jar,Tomcat也可以运行我的项目。我的解决方案真的是正确的解决方案或者我错过了配置设置?
这只是为了澄清:
我的网络服务已在Axis2中运行。我的班级加载政策设置为PARENT_LAST。我知道,由于WebSphere有自己的Axis2配置,因此必须将类加载策略设置为PARENT_LAST,以便WebSphere将使用项目本身的Axis2。除了设置类加载策略之外,我还做了一些事情来使我的Web服务在WebSphere上运行。我描述了我上面做了什么。我的问题是为什么必须采取这种方法?
答案 0 :(得分:1)
WebSphere将自己的axis2配置作为JAX-WS的Java EE服务器规范的一部分。将您的班级加载政策更改为PARENT_LAST并检查是否能解决您的问题。
编辑: 正如最初的帖子所述:WebSphere是Java EE服务器,具体取决于它支持标准Java JAX-WS Web服务的版本。实际上,Web服务已成为标准jdk的一部分。
如果您使用Introduction to JAX-WS或building web services中提到的JAX-WS,那么您不必添加任何第三方库来运行您的Web服务。只要您使用非JDK实现(如axis2),就必须将其与应用程序打包在一起。
IBM不仅将axis2打包到他们的WAS / JDK中,他们对其进行了修改。我不确定Tomcat提供什么,但是只要你使用JAX-WS就没关系。使用JAX-WS,您无法直接导入org.apache.axis
个包。如果使用这些导入,则必须提供库并确保已加载库。