我正在嘗試構建一個maven項目,一個包含webservices的OSGi包。我使用JAX-WS和所有@WebService
註釋來指定我擁有的Web服務。要在客戶位置加載這些Web服務,通常使用wsgen
和wsimport
來導出/導入WSDL文件。我打算使用jaxws-maven-plugin來這樣做,但問題在於:在同一個maven項目中創建和使用webservices
該軟件包可以同時充當服務器和客戶端。它可以將自己註冊爲同一捆綁包的父節點(運行在不同的JVM /主機上)的客戶端。所以這個maven項目/ bundle爲webservice定義了一個接口並定義了實現這個接口的實現類。像往常一樣,接口和類都使用@WebService
註釋。
@WebService
public interface Example {
public void callMe();
}
@WebService
public class ExampleImpl implements Example {
public void callMe() {};
}
在我的代碼某處
然後:
Endpoint p = Endpoint.publish(
"http://localhost:8080/example",
new ExampleImpl());
的jaxws:wsgen goal讀取註釋和創建輸出文件(.class文件,.java文件,WSDL文件,根據配置... )。但是如何在jaxws:wsimport目標中使用這些文件來運行相同的mvn package
?在同一個Maven項目我想用這個Web服務,所以我需要寫的東西是這樣的:
ExampleImplService service = new ExampleImplService();
Example port = service.getExampleImplPort();
port.callMe();
的jaxws:gen
目標是在process-classes
階段運行,因爲它需要讀取編譯的類,但jaxws:import
必須運行在generate-sources
階段,準備編譯所有內容。現在我遇到了雞蛋問題。我需要編譯的類通過wsgen
生成輸出文件,但是我需要wsgen
的輸出文件在階段的階段maven的wsimport
。我的第一次嘗試是將jaxws:wsgen
目標分配到generate-sources
階段,但當然由於這些類缺少/尚未編譯,因此它不起作用。
我有什麼方法可以解決這個問題?我應該執行antrun
目標編譯一些類(即只與@WebService
註解的類)之前的generate-sources
階段,因此jaxws:wsgen
可以使用它(在這一階段),創建輸出文件,這些文件在generate-sources
使用jaxws:wsimport
相?還有其他方法可以解決這個雞蛋問題嗎?在同一個maven項目中,是否還有其他「maven方法」來編譯webservices的服務器和客戶端部分?它應該順便說一句。從一個乾淨的mvn clean
構建運行,所以我不想/像任何解決方案,如「運行mvn package
兩次先生成webservices文件,然後再編譯一切」。換句話說:mvn clean package
應該編譯整個maven項目/ osgi包。
在其他溶液中,以質疑認爲不需要在同一個項目中的「生成存根」。然而,在我的項目中情況正是如此,所以存根不得晚於`generate-source`階段生成。 – Progman 2011-02-15 08:02:20