2011-12-21 38 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

相關問題