Comment générer un client WebService avec CXF wsdl2java pour un lien URL WSDL en ligne
J'essaie de générer un client webservice avec l'objectif wsdl2java
du plugin Maven Apache CXF. J'ai un lien URL WSDL, mais lorsque vous utilisez le plugin Maven, il ne génère pas les sources. Exemple de lien WSDL est http://www.webservicex.com/globalweather.asmx?WSDL .
<properties>
<src.generated.dir>src/main/java</src.generated.dir>
<artifact.cxf.version>3.1.6 </artifact.cxf.version>
<xerces.version>2.11.0</xerces.version>
<inbound.wsdl>http://www.webservicex.com/globalweather.asmx?WSDL</inbound.wsdl>
<inbound.wsdl.location>http://www.webservicex.com/globalweather.asmx?WSDL</inbound.wsdl.location>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${artifact.cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${src.generated.dir}</sourceRoot>
<defaultOptions>
<noAddressBinding>true</noAddressBinding>
<faultSerialVersionUID>3105839350746982386</faultSerialVersionUID>
</defaultOptions>
<wsdlOptions>
<wsdlOption>
<wsdl>${inbound.wsdl}</wsdl>
<wsdlLocation>${inbound.wsdl.location}</wsdlLocation>
<serviceName>webservicex</serviceName>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-verbose</extraarg>
<extraarg>-p</extraarg>
<extraarg>http://webservicex.ent.com/arm/=com.ent.webservicex.arm</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>${xerces.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
1 answers
Le problème n'est pas lié à l'utilisation d'un lien HTTP vers un fichier WSDL. L'erreur renvoyée par le plugin CXF Codegen est:
Aucun service n'a été trouvé dans wsdl:
webservicex
Ceci est normal car le WSDL hébergé chez http://www.webservicex.com/globalweather.asmx?WSDL
n'a qu'un seul service nommé GlobalWeather
; il n'a pas de service appelé webservicex
. Une définition de service dans un WSDL correspond à un élément wsdl:service
, et si vous regardez dans le WSDL, vous ne verrez que
<wsdl:service name="GlobalWeather">
<!-- ... -->
</wsdl:service>
Ainsi, vous devriez changer votre configuration CXF à
<serviceName>GlobalWeather</serviceName>
Ou même omettre complètement le paramètre et laisser le plugin le générer automatiquement (puisqu'il n'y a qu'un seul service).
Il existe d'autres notes associées à votre configuration actuelle qu'il serait préférable de modifier:
-
Jamais, jamais, générer du code dans le répertoire source principal
src/main/java
, comme cela se fait actuellement avec<src.generated.dir>src/main/java</src.generated.dir>
Le code généré doit toujours être placé dans le répertoire de construction (c'est-à-dire
target
par défaut). En effet, le code généré n'est pas un vrai fichier source et ne doit pas être vérifié lors du contrôle de version. Par défaut, c'est ce que fait le plugin, générant du code danstarget/generated-sources/cxf
, et je vous suggère de continuer avec cela; en tant que tel, il vous suffit de supprimer<sourceRoot>${src.generated.dir}</sourceRoot>
. Il ajoute également automatiquement le code source généré en tant que dossier source, de sorte que tout sera toujours compilé. Vous n'avez pas besoin de la
xerces
dépendance pour le plugin fonctionne, vous pouvez supprimer l'ensemble<dependencies>
section du plugin.Il n'y a pas de paramètre
<wsdlLocation>
, vous pouvez donc le supprimer également, il ne fait rien.