2011-08-22 62 views
1

我有一個關於如何獲得另一個Axis服務中部署的Axis服務列表的問題。這裏是場景。我使用Tomcat 7.0.14和Axis 2-1.5.5作爲部署環境。假設在Tomcat上部署了5個Axis服務,分別是A,B,C,D,E。我想在服務E中編寫一些代碼,以便它可以獲得包含所有已部署服務的服務列表,即A ,B,C,D,E。從另一個Axis服務獲取部署的Axis服務列表

我試過使用ConfigurationContextFactory.createConfigurationContextFromFileSystem()方法。但該方法似乎每次調用時都會創建一個新的Axis 2實例。因爲我在Web服務的構造函數中使用它,所以導致了無限循環。 (創建Axis實例 - >創建服務實例 - >創建Axis實例 - >創建服務實例 - > ...)所以我想知道有沒有一種方法來從另一個已部署的服務以編程方式獲取已部署服務的列表? (就像http://localhost:8080/axis2/services/listServices一樣)。任何幫助是極大的讚賞。

謝謝。

回答

1

您需要獲取環境的AxisConfiguration對象。它還提供了一個名爲getServices()的功能,該功能返回已安裝服務的地圖。

如果您的服務實現ServiceLifecycle,則ServiceLifecycle.startup()函數在服務啓動期間傳遞給AxisConfiguration對象。或者,如果您的服務類實現了Lifecycle,則Lifecycle.init()函數將傳遞一個ServiceContext對象。您應該能夠撥打ServiceContext.getConfigurationContext().getAxisConfiguration()從那裏獲取AxisConfiguration。

+0

非常感謝您的回答Kenster!我試圖在我的Web服務中實現ServiceLifeCycle接口,但在部署期間不會調用startup()方法。關於如何讓Axis引擎調用此方法的任何想法?順便說一句,我寫我的Web服務作爲POJO服務。也許這是一個問題?感謝你的幫助。 – David

+0

我設法通過實施生命週期界面來實現它。它現在可以正常工作。謝謝!對於那些有興趣的人來說,這裏有一篇文章討論ServiceLifeCycle和生命週期的區別。 [link](http://blog.facilelogin.com/2008/11/axis2-services-lifecycle-vs.html) – David

+0

那篇文章並沒有把它拼出來。要使用ServiceLifecycle功能,必須在您的services.xml文件中的'service'元素中添加一個'class =「my.service.lifecycle.class」'屬性。一旦你這樣做了,當Axis2首次加載你的服務時,將調用startup(),並且當Axis2關閉時調用shutdown()。 – Kenster