使用 maven 从 java 生成 WSDL:CXF + java2ws 目标

Pet*_*ete 5 java wsdl web-services cxf maven

是否有一个易于理解的教程来展示如何使用 maven 和 cxf 目标 java2ws 从 java 代码生成 WSDL?

我想mvn install在包含带@WebService注释的类的项目上执行,并在目标文件夹内的某处生成 WSDL,以便其他开发人员可以使用它来生成订阅者类。

此外,我希望将 Webservice 包含到一个 jar 中,我可以将其部署在 WebService 容器中,以便订阅者可以使用该服务。

到目前为止,我的 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>
Run Code Online (Sandbox Code Playgroud)

但是当我运行 maven install .. 没有 wsdl ..

哦,对了,附加信息:我们正在以模块化方式进行开发。提供 WebService 的模块将包含处理来自前端模块的内部方法调用的其他类,并将构建为 jar 而不是 war。

希望有人能找到我遗漏的东西,或者可以给我指点一个好的教程。

编辑: 直接调用目标,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
Run Code Online (Sandbox Code Playgroud)

然而,如上所示,存在 className 参数,并且路径也是正确的......有什么想法吗?

Pet*_*ete 1

看起来标签<pluginManagement>未知。如果我删除它(并更新到 cxf 版本 2.5),即使只是.jar打包,一切也能正常工作。

不知道为什么它可以在网络上随处找到带有标签的内容。还想知道为什么 maven 没有检测或记录这些类型的错误。叹...

  • 这是因为你不明白这个标签是做什么的。pluginManagement/dependencyManagement 不声明要使用的插件/要包含的依赖项。例如,对于 dependencyManagement,如果我将 dependencyManagement 设置为 log4j:log4j:1.2.10,那么如果您的项目声明对 log4j:log4j 的依赖项,Maven 将知道该依赖项使用哪个版本(以及范围、排除等)。然而,仅仅拥有 dependencyManagement 声明对您的依赖关系没有任何作用。插件管理也是如此。 (7认同)