Используйте Знатока для инициирования wsgen и wsimport подряд, с помощью wsdlLocation

У меня есть трудные времена с помощью знатока для генерации моего клиента. Таким образом См. Создание клиента веб-сервиса непосредственно из источника для первой части моего вопроса.

Для хранения этого простым и коротким я хочу пойти отсюда (файл в src/main/java):

   package com.example.maven.jaxws.helloservice;
   import javax.jws.WebService;
   @WebService
   public class Hello {
     public String sayHello(String param) {
     ;  return "Hello " + param;
     }
   } 

к там:

/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.7-b01-
 * Generated source version: 2.1
 * 
 */
@WebServiceClient(name = "HelloService", targetNamespace = "http://helloservice.jaxws.maven.example.com/", wsdlLocation = "http://localhost:8080/test/")
public class HelloService
    extends Service
{

    private final static URL HELLOSERVICE_WSDL_LOCATION;
    private final static Logger logger = Logger.getLogger(com.example.wsimport.HelloService.class.getName());
    ...etc

использование только 1 файла pom.xml.

Отметьте набор wsdlLocation на конце. Файл pom.xml будет, вероятно, использовать и maven-jaxws-plugin wsgen И wsimport с некоторой хитрой конфигурацией для достижения этого.

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

1 ответ

Предполагая, что вы не собираетесь пытаться использовать сгенерированные заглушки в том же проекте, в котором вы это делаете (что создало бы циклические зависимости и было бы плохой идеей ...) тогда да, вы можете сделать что-то подобное.

Конфигурация не так уж и сложна, на самом деле вы как бы догадались об этом в своем вопросе, но вот здесь:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-wsdl</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>wsgen</goal>
                    </goals>
                    <configuration>
                        <sei><!-- fully qualified class name goes here --></sei>
                        <genWsdl>true</genWsdl>
                    </configuration>
                </execution>
                <execution>
                    <id>generate-stubs</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <wsdlDirectory>target/jaxws/wsgen/wsdl</wsdlDirectory>
                        <wsdlFiles>                   
                            <wsdlFile><!-- class name goes here -->Service.wsdl</wsdlFile>
                        </wsdlFiles>
                        <!-- *** you need the next line to set the wsdlLocation in the generated stubs *** -->
                        <wsdlLocation>http://localhost:8080/test</wsdlLocation> 
                    </configuration>
                </execution>
            </executions>
        </plugin>

Обновление - чтобы упаковать сгенерированный код в банку, я бы использовал maven-jar-plugin вот так:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>package-wsclient-jars</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classesDirectory>target/jaxws/<!-- rest of the path here, can't remember it right now --></classesDirectory>
                            <classifier>wsclient</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Я быстро вставил это из нашей конфигурации, но наше использование немного отличается (поскольку мы архивируем файлы wsdl, а не сгенерированный клиент, но я считаю, что это поможет вам почти). Вам, вероятно, придется установить версию для maven-jar-plugin, если вы еще не используете его - 2.3.1 кажется последней.

17
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

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