【问题标题】:apache cxf wsdl2java Failed to generate types->Access is deniedapache cxf wsdl2java 无法生成类型->访问被拒绝
【发布时间】:2015-11-30 15:31:07
【问题描述】:

自 2013 年以来,我一直在努力解决此问题... 我使用的是 Windows 7。

[ERROR] 未能执行目标 org.apache.cxf:cxf-codegen-plugin:3.1.2:wsdl2java (generate-sources) 关于项目 service-data-model-provider:Execution generate-sources of 目标 org.apache.cxf:cxf-codegen-plugin:3.1.2:wsdl2java 失败:失败 生成类型。 a:\Misc\WsMock\service-data-model-provider\src\main\java\schema\eo\common\system\messageheader\v1\MessageContextType.java (访问被拒绝)-> [帮助 1]

它是完全随机的,发生在所有 cxf 版本和不同的 java 版本上。 目前我在 jdk 1.8.45 和 cxf 3.1.2

设置always可以解决这个问题

但是构建总是成功的,即使会发生一些错误,在日志中显示为 [Warning]。所以我不能使用类似的东西。

这是我的配置文件

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${basedir}/src/main/java</sourceRoot>
                <defaultOptions>
                    <extraargs>
                        <extraarg>-validate</extraarg>
                        <extraarg>-exsh</extraarg>
                        <extraarg>true</extraarg>
                    </extraargs>
                </defaultOptions>
                <wsdlRoot>..\..\..</wsdlRoot>
                <includes>
                    <include>mds/apps/services/**/*.wsdl</include>
                </includes>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

另一件有帮助但不能完全解决问题的方法是禁用 WindowsHardDrive 驱动程序中的 WriteToCache 设置。

这表明系统速度太慢,CXF\Java 试图在文件完全写入磁盘之前使用该文件。 使用 SSD 时,问题只会偶尔发生。

我们的数据模型很大(很多 XSD),而且硬盘驱动器是加密的,所以一切都那么慢。

任何想法如何调整 java 来处理这个问题?或者可能是 CXF 问题?

全栈跟踪

[ERROR] 未能执行目标 org.apache.cxf:cxf-codegen-plugin:3.1.2:wsdl2java (generate-sources) 关于项目 service-data-model-provider:Execution generate-sources of 目标 org.apache.cxf:cxf-codegen-plugin:3.1.2:wsdl2java 失败:Fai led 生成类型。 a:\Misc\WsMock\service-data-model-provider\src\main\java\co\schema\common\fault\creati onfault\v1\ObjectFactory.java(访问被拒绝)-> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException: 失败 执行目标 org.apache.cxf:cxf-codegen-plugin:3.1.2:w sdl2java 项目服务数据模型提供者上的(生成源):执行 生成目标 org.apache.cx 的来源 f:cxf-codegen-plugin:3.1.2:wsdl2java failed: 无法生成类型。 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder. 爪哇:51) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 引起:org.apache.maven.plugin.PluginExecutionException: Execution 目标 org.apache.cxf:cxf-codeg 的生成源 en-plugin:3.1.2:wsdl2java failed: 无法生成类型。 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 20 更多原因:org.apache.cxf.tools.common.ToolException:无法生成类型。 在 org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.generate(JAXBDataBinding.java:839) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:730) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:270) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:415) 在 org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 在 org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.generate(WSDL2JavaMojo.java:415) 在 org.apache.cxf.maven_plugin.AbstractCodegenMoho.execute(AbstractCodegenMoho.java:260) 在 org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.execute(WSDL2JavaMojo.java:512) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) ... 21 更多原因:java.io.FileNotFoundException: a:\Misc\WsMock\service-data-model-provider\src\main\java\uk\co\schema\ common\fault\creationfault\v1\ObjectFactory.java(访问被拒绝) 在 java.io.FileOutputStream.open0(本机方法) 在 java.io.FileOutputStream.open(FileOutputStream.java:270) 在 java.io.FileOutputStream.(FileOutputStream.java:213) 在 java.io.FileOutputStream.(FileOutputStream.java:162) 在 org.sonatype.plexus.build.incremental.DefaultBuildContext.newFileOutputStream(DefaultBuildContext.java:54) 在 org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo$1.createOutputStream(WSDL2JavaMojo.java:411) 在 org.apache.cxf.tools.wsdlto.databinding.jaxb.TypesCodeWriter.openBinary(TypesCodeWriter.java:72) 在 com.sun.codemodel.CodeWriter.openSource(CodeWriter.java:100) 在 com.sun.codemodel.JPackage.createJavaSourceFileWriter(JPackage.java:490) 在 com.sun.codemodel.JPackage.build(JPackage.java:441) 在 com.sun.codemodel.JCodeModel.build(JCodeModel.java:311) 在 com.sun.codemodel.JCodeModel.build(JCodeModel.java:301) 在 org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.generate(JAXBDataBinding.java:827) ... 32 更多 [错误] [错误] 使用 -X 开关重新运行 Maven 以启用完整的调试日志记录。 [错误] [错误] 更多信息 关于错误和可能的解决方案,请阅读以下内容 文章:[错误] [帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

干杯 前言

【问题讨论】:

  • 禁用写入缓存是一个非常好的技巧。谢谢!

标签: java cxf wsdl2java


【解决方案1】:

(将@Prem 的评论移至此答案并添加更多详细信息)

添加&lt;fork&gt;always&lt;/fork&gt; 可解决此问题。

示例配置:

     <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>${cxf.version}</version>
        <executions>
          <execution>
            <id>generate-source</id>
            <phase>generate-sources</phase>
            <configuration>
              <fork>always</fork>
            </configuration>
...
<!-- Rest of the configuration -->

文档 - maven-cxf-codegen - other config

【讨论】:

    【解决方案2】:

    同样的事情发生在我身上..
    我也有 jdk 1.8 和 cxf 3.1.x
    我在带有 jdk 1.7 和 cxf 2.7.0 的旧 PC 上尝试了相同的任务,它的工作原理很迷人。
    添加 将在每次创建构建时从 wsdl 生成架构和服务。我不知道这是否是一种有效的方式,但我提取了一次架构和服务并将它们添加到根目录。
    谢谢

    【讨论】:

    • 这不是我的选择,因为我每次构建项目时都必须重新生成架构。
    • @Prem 您应该在 Java 7 PC 上尝试...阅读此官方 CXF 网站的第一个常见问题解答。cxf.apache.org/faq.html#FAQ-CanCXFrunwithJDK1.8/Java8?
    • 我试过了,我也得到了同样的结果。使用快速 ssd 或使用启用了 fork=always 的 cxf 一切正常。但这对我来说不是一个选择,我仍在寻找这背后的真正问题。干杯
    【解决方案3】:

    当我的 wsdl 文件出现问题时,我遇到了类似的问题。请检查 wsdl 文件和任何丢失的文件路径。

    【讨论】:

      猜你喜欢
      • 2016-02-21
      • 2017-01-15
      • 2021-10-02
      • 1970-01-01
      • 2016-09-18
      • 2017-11-16
      • 2020-12-13
      • 2021-02-03
      • 2011-08-11
      相关资源
      最近更新 更多