2

希望对这个困扰了一段时间的问题提供一些反馈。

我使用 maven 构建一个简单的 Web 服务客户端应用程序。

它使用几个 wsdls(大约 8 个),wsdls 有 xsd 导入(每个请求和响应大约每个 wsdl 2 个,加上大量的额外导入)来使用 maven cxf wsdl2java 插件生成 java 代码。

我从插件版本 2.1.7 开始尝试了几个 2.2.x,现在尝试使用插件版本 2.3.4。

这是我的 pom 文件的插件部分:

        <plugin>
              <groupId>org.apache.cxf</groupId>
              <artifactId>cxf-codegen-plugin</artifactId>
              <version>2.3.4</version>
              <executions>
                 <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <defaultOptions>
                            <noAddressBinding>true</noAddressBinding>
                        </defaultOptions>
                        <wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
                        <includes>
                              <include>*.wsdl</include>
                         </includes>
                    </configuration>
                    <goals>
                       <goal>wsdl2java</goal>
                    </goals>
                 </execution>
              </executions> 
          </plugin>
      </plugins>

我可以提供一个以前的版本,说明过去如何为我工作。基本上,我将每个单独的 wsdl 列为 < wsdloption > 项。

我唯一与“环境”相关的是,对于一个单独的项目,我删除了 m2 文件夹中的所有内容。从那时起,代码生成给了我以下错误消息(使用命令中的“mvn -e generate-sources”):

    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Failed to generate types.

    [INFO] ------------------------------------------------------------------------
    [INFO] Trace
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to generate types.
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:584)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:500)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:479)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:331)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:292)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:301)
            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.classworlds.Launcher.launchEnhanced(Launcher.java:315)
            at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
            at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
            at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to generate types.
            at org.apache.cxf.maven_plugin.WSDL2JavaMojo.callWsdl2Java(WSDL2JavaMojo.java:413)
            at org.apache.cxf.maven_plugin.WSDL2JavaMojo.execute(WSDL2JavaMojo.java:362)
            at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:453)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:559)
            ... 16 more
    Caused by: org.apache.cxf.tools.common.ToolException: Failed to generate types.
            at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.generate(JAXBDataBinding.java:745)
            at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:599)
            at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:247)
            at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:138)
            at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:290)
            at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
            at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
            at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
            at org.apache.cxf.maven_plugin.WSDL2JavaMojo.callWsdl2Java(WSDL2JavaMojo.java:410)
            ... 19 more

我注意到的一件事是,在 target/generated-sources 文件夹中,它在 \generated-sources\cxf\generated AND \generated-sources\org\opentravel\ota_2003_05 中创建了相同的类。不完全确定 XSD 或 wsdl 本身是否存在错误。

我一直在寻找对该错误的良好解释,但尚未找到解决方案。对于这个特定问题,我已经完成了相当一部分的“谷歌搜索”。开始变得绝望,希望我能尽快找到解决方案。

提前感谢您提供的任何帮助。

4

2 回答 2

1

我不时看到这种情况,当我使用 cxf java 插件时,我认为 cxf.maven.wsdl2javaMojo 内存不足。

在这种情况下,

  • 我建议您将每个 wsdl 生成分解为子模块,
  • 增加maven内存
  • 如果它仍然停在中间,请尝试使用 mvn Goals -rf :WhereStops 命令,因此它从内存耗尽的子模块开始,因此您不必重新开始。

注意如果您不确定 -rf 的工作原理,我使用 Maven 3.2 google mvn -rf

于 2015-06-25T15:40:05.187 回答
0

不太确定。我只是查看了该行号处的代码,不幸的是,我发现它此时完全吞下了一个 IOException。因此,我不知道如何获得该 IOException 的真正“原因”。我将解决这个问题并将其提交到主干。如果您可以在明天或周一重试最新的快照(在每晚部署构建之后),它可能会提供更好/完整的错误消息。

于 2011-06-17T17:02:24.703 回答