簡體   English   中英

使用maven從java生成WSDL:CXF + java2ws目標

[英]Generate WSDL from java with maven: CXF + java2ws goal

有沒有一個可理解的教程,展示了如何使用maven和cxf目標java2ws從java代碼生成WSDL?

我想在包含@WebService注釋類的項目上執行mvn install ,並在目標文件夾內的某處生成WSDL,以便其他開發人員可以使用它來生成訂閱者類。

此外,我希望將Webservice包含在我可以在WebService容器內部署的jar中,以便該服務可供訂閱者使用。

到目前為止,我的pom看起來像這樣:

<properties>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <cxf.version>2.2.3</cxf.version>
</properties>


<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>${cxf.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.cxf</groupId>
                        <artifactId>cxf-rt-frontend-jaxws</artifactId>
                        <version>2.0.9</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>generate-wsdl</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>java2ws</goal>
                        </goals>
                        <configuration>
                            <outputFile>${project.build.outputDirectory}/testService.wsdl</outputFile> 
                            <className>complete.path.to.ClassName</className>
                            <verbose>true</verbose>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>


<pluginRepositories>
    <pluginRepository>
        <id>apache-snapshots</id>
        <name>Apache SNAPSHOT Repository</name>
        <url>http://repository.apache.org/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>


<repositories>
    <repository>
        <id>apache-snapshots</id>
        <name>Apache SNAPSHOT Repository</name>
        <url>http://repository.apache.org/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>maven2-repository.dev.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
    </repository>
</repositories>


<dependencies>
    <!-- CXF WebService -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>${cxf.version}</version>
    </dependency>
</dependencies>

但是當我運行maven install ..沒有wsdl ..

哦,對,其他信息:我們正在以模塊化方式開發。 提供WebService的模塊將包含其他類,這些類處理來自前端模塊的內部方法調用,並將構建為jar而不是war。

希望有人能找到我所缺少的東西或者能指出一個好的教程。

編輯:直接使用mvn org.apache.cxf:cxf-java2ws-plugin:java2ws調用目標mvn org.apache.cxf:cxf-java2ws-plugin:java2ws但是我得到了一個LifecycleExecutionException

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.cxf:cxf-java2ws-plugin:2.2.3:java2ws (default-cli) on project dw-person: The parameters 'className' for goal o
rg.apache.cxf:cxf-java2ws-plugin:2.2.3:java2ws are missing or invalid
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:221)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.PluginParameterException: The parameters 'className' for goal org.apache.cxf:cxf-java2ws-plugin:2.2.3:java2ws are missing or invalid
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:576)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:529)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:92)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        ... 19 more

但是,如上所示,className參數存在且路徑也正確...任何想法?

看起來標簽<pluginManagement>是未知的。 如果我刪除它(並更新到cxf版本2.5),即使只是.jar包裝,一切都很好。

不知道為什么在網上隨處可見標簽。 還想知道為什么maven沒有檢測到或記錄這些錯誤。 嘆...

僅適用於那些與pluginManagement無關的麻煩的人。 就我而言,對於cxf.version 3.1.10,問題在於放置<configuration>部分。 將它移動到與<executions>相同的級別后,問題就消失了。 我在這里找到了它: http//cxf.547215.n5.nabble.com/Strange-behavior-of-Maven-cxf-java2ws-plugin-td553742.html

以下是apache.org( https://cxf.apache.org/docs/maven-java2ws-plugin.html )的示例:

<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-java2ws-plugin</artifactId>
<version>${cxf.version}</version>
<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
</dependencies>

<executions>
    <execution>
        <id>process-classes</id>
        <phase>process-classes</phase>
        <configuration>
            <className>full.class.name</className>
            <genWsdl>true</genWsdl>
            <verbose>true</verbose>
        </configuration>
        <goals>
            <goal>java2ws</goal>
        </goals>
    </execution>
</executions>
</plugin>

這里有一個固定的:

<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-java2ws-plugin</artifactId>
<version>${cxf.version}</version>
<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>      
</dependencies>

<configuration>
    <className>full.class.name</className>
    <genWsdl>true</genWsdl>
    <verbose>true</verbose>
</configuration> 

<executions>
    <execution>
        <id>process-classes</id>
        <phase>process-classes</phase>
        <goals>
            <goal>java2ws</goal>
        </goals>
    </execution>
</executions>
</plugin>
Good Read - http://united-coders.com/phillip-steffensen/developing-a-simple-soap-webservice-using-spring-301-and-apache-cxf-226


<project xmlns="...">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.unitedcoders.demo</groupId>

    <artifactId>CXFExampleService</artifactId>

    <packaging>war</packaging>

    <version>0.0.1-SNAPSHOT</version>

    <name>Example Apache CXF Webservice</name>

    <url>http://united-coders.com</url>



    <!-- Dependency properties -->

    <properties>

        <junit-version>4.5</junit-version>

        <cxf.version>2.2.6</cxf.version>

        <spring-version>3.0.1.RELEASE</spring-version>

        <commons-logging-version>1.1.1</commons-logging-version>

    </properties>



    <!-- Plugin configuration -->

    <build>

        <finalName>CXFExampleService</finalName>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>

                    <source>1.6</source>

                    <target>1.6</target>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.cxf</groupId>

                <artifactId>cxf-java2ws-plugin</artifactId>

                <version>${cxf.version}</version>

                <dependencies>

                    <dependency>

                        <groupId>org.apache.cxf</groupId>

                        <artifactId>cxf-rt-frontend-jaxws</artifactId>

                        <version>${cxf.version}</version>

                    </dependency>

                    <dependency>

                        <groupId>org.apache.cxf</groupId>

                        <artifactId>cxf-rt-frontend-simple</artifactId>

                        <version>${cxf.version}</version>

                    </dependency>

                </dependencies>

                <executions>

                    <execution>

                        <id>process-classes</id>

                        <phase>process-classes</phase>

                        <configuration>

                            <className>com.unitedcoders.demo.PersonService</className>

                            <genWsdl>true</genWsdl>

                            <verbose>true</verbose>

                        </configuration>

                        <goals>

                            <goal>java2ws</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </build>



    <!-- Dependency definitions -->

    <dependencies>



        <!-- Apache CXF dependencies -->

        <dependency>

            <groupId>org.apache.cxf</groupId>

            <artifactId>cxf-rt-frontend-jaxws</artifactId>

            <version>${cxf.version}</version>

        </dependency>

        <dependency>

            <groupId>org.apache.cxf</groupId>

            <artifactId>cxf-rt-transports-http</artifactId>

            <version>${cxf.version}</version>

        </dependency>



        <!-- Spring Dependencies -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>${spring-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-web</artifactId>

            <version>${spring-version}</version>

        </dependency>



        <!-- Logging -->

        <dependency>

            <groupId>commons-logging</groupId>

            <artifactId>commons-logging</artifactId>

            <version>${commons-logging-version}</version>

        </dependency>



        <!-- Testing -->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>${junit-version}</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

</project>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM