У меня есть трудные времена с помощью знатока для генерации моего клиента. Таким образом См. Создание клиента веб-сервиса непосредственно из источника для первой части моего вопроса.
Для хранения этого простым и коротким я хочу пойти отсюда (файл в 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 с некоторой хитрой конфигурацией для достижения этого.
Предполагая, что вы не собираетесь пытаться использовать сгенерированные заглушки в том же проекте, в котором вы это делаете (что создало бы циклические зависимости и было бы плохой идеей ...) тогда да, вы можете сделать что-то подобное.
Конфигурация не так уж и сложна, на самом деле вы как бы догадались об этом в своем вопросе, но вот здесь:
<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 кажется последней.