Создание клиентского приложения веб-службы всегда начинается с существующего файла WSDL (в отличие от разработки поставщика веб-службы), и, даже если это не единственный способ, я бы предложил использовать инструмент wsimport
(см. 5 методов создания веб-служб Java из 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.
Например, чтобы использовать файлы вместо URL-адресов для WSDL (и генерировать код Java в месте, более совместимом с лучшими практиками maven), используйте:
<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
.
.