【问题标题】:How to surpass gradle wsimport task JDK 8 access restrictions?如何超越 gradle wsimport task JDK 8 访问限制?
【发布时间】:2014-02-26 14:28:38
【问题描述】:

在 Java 7 之前,我的 gradle 构建中有一个 wsimport 任务可以正常工作:

task wsimport {
    ext.destDir = file("${buildDir}/generated/java")
    ext.wsdlSrc = file("src/main/resources/schema/example/my.wsdl")
    ext.bindingSrc = file("src/main/resources/schema/example/bindings.xsd")
    outputs.dir destDir
    doLast {
        ant {
            destDir.mkdirs()
            taskdef(name: 'wsimport',
                classname: 'com.sun.tools.ws.ant.WsImport',
                classpath: configurations.jaxws.asPath)
            wsimport(keep: true,
                package: 'net.example.my',
                xnocompile: true,
                quiet: true,
                sourcedestdir: destDir,
                wsdl: wsdlSrc,
                binding: bindingSrc,
                encoding: "UTF-8"
            )
        }
    }
}

切换到 JDK 8(内部版本 1.8.0-b129)时出现以下错误:

java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: ... schema_reference:
Failed to read schema document 'xjc.xsd', because 'file' access is not allowed due to restriction set by the accessExternalSchema property.

搜索问题我发现了以下帖子(令人惊讶地描述了 Java 7 的问题):https://github.com/stianh/gradle-jaxb-plugin/issues/20 但我无法将环境/参数传递给 wsimport/xjc。

如何禁用此访问或限制?

【问题讨论】:

    标签: gradle java-8 wsimport


    【解决方案1】:

    我找到的唯一可行的解​​决方案是使用反射设置系统属性:

    task wsimport {
      System.setProperty('javax.xml.accessExternalSchema', 'file')
      ...
    }
    

    使用extsystemProperty 的所有其他解决方案都不适用于我。 我已经安装了 gradle 1.11。

    【讨论】:

    • 我看到你的 gradle 任务的一个长期问题,你将如何支持多个版本的 wsdl,或者说如果你有多个 xsd。文件不允许使用通配符
    • Arne,非常感谢分享这个,它成功了!!非常有帮助
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 2021-10-30
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多