創建Web服務客戶端應用程序總是與現有的WSDL文件開始(不像開發一個Web服務提供者),而且即使這不是唯一的方法,我建議使用wsimport
工具(其他選項見5 Techniques for Creating Java Web Services from WSDL,但我不會介紹)。
所以,在您的客戶端項目,下面的代碼片段添加到您的pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlUrls>
<wsdlUrl>
http://localhost:8080/helloservice/HelloService?wsdl
</wsdlUrl>
</wsdlUrls>
<packageName>com.example.maven.jaxws.helloclient</packageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<bulid>
的jaxws-maven-plugin:wsimport
魔力默認綁定到generate-sources
生命週期階段,因此運行的任何階段後,以generate-sources
將觸發jaxws:wsimport
目標。
請注意,這是一個非常小的配置。如果你想要更多的細節/控制,請查看wsimport
mojo的文檔。
例如,使用文件而不是網址爲WSDL(併產生更符合Maven的最佳實踐的位置Java代碼),用途:
<configuration>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
<wsdlDirectory>${basedir}/src/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>foo.wsdl</wsdlFile>
<wsdlFile>bar.wsdl</wsdlFile>
</wsdlFiles>
...
</configuration>
更新:要調用一個預 - 型存根(使用來自WSDL的端點地址),代碼:
Hello port = new HelloService().getHelloPort();
String result = port.sayHello("Duke!");
爲了調用的端點爲地址爲從在WSDL中指定的一個不同的,定義新的端點URL和的QName :
URL endpoint_new = new URL("NEW_ADDRESS_HERE");
QName qname = new QName("http://"+"ORIGINAL_PACKAGE", "SERVICENAME");
Hello port = new HelloService(endpoint_new, qname).getHelloPort();
其中ORIGINAL_PACKAGE
是這裏的服務發佈在包裝,SERVICENAME
是我們所需要的服務,例如,HelloService
的名稱。
所以你說你應該從以前的運行中下載一份WSDL的副本。對於Metro來說,這可能很難,因爲它包含額外的查找。 – 2012-08-16 13:25:19