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>
Author: Tunaki, 2017-01-15

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 dans target/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.

 1
Author: Tunaki, 2017-01-15 11:52:53