Создание клиента веб-сервиса непосредственно из источника

Я пытаюсь генерировать клиентскую банку 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

5
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Вы должны использовать , чтобы дать местоположение службы, в котором файл WSDL будет доступен после развертывания.

Использование переключателя -wsdllocation

Есть еще один простой способ сделать это - Просто запустить wsimport с -wsdllocation Переключатель и укажите местоположение WSDL значение, которое относительно Сгенерированный класс обслуживания и вам нужно Чтобы поставить этот файл WSDL на этом родственнике расположение.

Смотрите сообщение для более подробной информации .

3
ответ дан 14 December 2019 в 01:08
поделиться

Создание клиентского приложения веб-сервиса всегда начинается с существующего файла 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 .

6
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: