2011-12-21 66 views
1

当我在Eclipse上开发Axis2 Web服务时,我注意到Eclipse自动将Axis2的lib文件夹中的类复制到新项目的lib文件夹中。但是,并非Axis2的lib文件夹中的所有类都正在被复制。有趣的是,当通过Eclipse部署到Tomcat时,即使一些来自Axis2的jar没有被复制,web服务也没有任何问题。另外,当我查看Tomcat的临时文件时,Tomcat似乎为web服务的modules.list上列出的模块生成了jar。Eclipse不会导入所有的Axis2 jar,但项目仍然在Tomcat上运行?

有人能告诉我关于这是怎么回事?为什么Eclipse不会复制Axis2中的所有罐子?为什么即使没有来自Axis2的其他罐子,Web服务也可以在Tomcat上运行?这些临时文件是什么?何时及为何产生?

我试图在WebSphere上运行同一个项目,并且由于缺少罐子而遇到ClassDefNotFound异常。当我将所有没有被Eclipse复制的Axis2 jar复制到我的项目中时,我的问题得到了解决。但是我对我的解决方案并不满意,因为即使没有这些罐子,Tomcat也可以运行我的项目。我的解决方案是否真的是最佳解决方还是我缺少配置设置?

这只是为了澄清:

我的Web服务已经在运行的Axis2。我的类加载策略设置为PARENT_LAST。我知道,由于WebSphere有自己的Axis2配置,因此类加载策略必须设置为PARENT_LAST,以便WebSphere将使用项目本身的Axis2。除了设置类加载策略之外,我还做了一些让我的Web服务在WebSphere上运行的东西。我描述了我在上面做了什么。我的问题是为什么必须采取这种方法?

回答

1

WebSphere拥有自己的axis2配置,作为其JAX-WS的Java EE服务器规范的一部分。将您的课堂加载政策更改为PARENT_LAST并检查是否可以解决您的问题。

编辑: 由于原文已经说明:WebSphere是一个Java EE服务器,它取决于它支持标准Java JAX-WS Web服务的版本。实际上,Web服务成为标准jdk的一部分。

如果您使用的是像Introduction to JAX-WSbuilding web services中提到的那样的JAX-WS,那么您不必添加任何第三方库来运行您的Web服务。只要使用非axis2的非JDK实现,就必须将其与应用程序一起打包。

IBM不仅将axis2打包到他们的WAS/JDK中,他们对其进行了修改。我不确定Tomcat会提供什么,但只要您使用JAX-WS就没有关系。使用JAX-WS,您不需要直接导入org.apache.axis软件包。如果您使用这些导入,则必须提供库并确保已加载。

+0

我已经告诉他(见http://stackoverflow.com/questions/8502240/module-is-not-valid-when-deploying-an-axis2-web-service-on-websphere),但他wouldn听不到... – 2011-12-21 09:58:35

+0

@AndreasVeithen:我知道WebSphere有自己的配置。当我问到你回答的问题时,我的课堂加载策略已经设置为PARENT_LAST。这就是为什么我发布我的问题,因为即使我的类加载策略已经设置为PARENT_LAST,我的Web服务仍然无法正常工作。无论如何,我的web服务已经在运行,你的解决方案并不是解决我的问题的方法。我在自己的问题上发布了我的答案。也许你还没有检查过它。而我目前的问题不是如何解决它。 – Arci 2011-12-22 01:24:16

+0

@Udo Held:感谢您的回复,但我的问题不是如何解决。我已经能够在Axis2上运行我的Web服务。我的方法在我的帖子中被指出。我的问题是为什么需要这种方法才能在WebSphere上运行Axis2 Web服务。这不是关于班级装载政策。 – Arci 2011-12-22 01:26:36

相关问题