Я пытаюсь генерировать клиентскую банку WS непосредственно от @Webservice класса (классов).
Давайте возьмем этот пример:
package com.example.maven.jaxws.helloservice;
import javax.jws.WebService;
@WebService
public class Hello {
public String sayHello(String param) {
; return "Hello " + param;
}
}
Я могу генерировать военный файл и использовать glassfish для обслуживания этого веб-сервиса, и оттуда я могу использовать glassfish URL WSDL для генерации клиентских источников.
То, что я пытаюсь сделать, должно пропустить часть glassfish. Из моего проекта знатока определение веб-сервиса я хотел бы использовать jaxws-maven-plugin для создания клиентских классов, но я не могу найти способ указать фактический URL веб-сервиса.
Это должно быть возможное право?
@see, также Создающий клиент веб-сервиса с известным, но недоступным wsdl
Вы должны использовать
, чтобы дать местоположение службы, в котором файл WSDL будет доступен после развертывания.
Использование переключателя -wsdllocation
Есть еще один простой способ сделать это - Просто запустить wsimport с -wsdllocation Переключатель и укажите местоположение WSDL значение, которое относительно Сгенерированный класс обслуживания и вам нужно Чтобы поставить этот файл WSDL на этом родственнике расположение.
Создание клиентского приложения веб-сервиса всегда начинается с существующего файла 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-плагин: WSIMPORT
MOJO связан по умолчанию Генерация-источники
Фаза жизненного цикла, настолько, выполняя любую фазу позади к Generate-источниками
, запускает JAXWS: WSIMPORT
.
Обратите внимание, что это действительно минимальная конфигурация. Если вы хотите больше деталей / контроля, проверьте документацию WSIMPORT
MOJO.
Например, чтобы использовать файлы вместо URL для 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
.