2014-02-26 32 views
8

我有一個wsimport的任務,我gradle這個構建工作的罰款,直到Java 7的:如何超越gradle wsimport任務JDK 8的訪問限制?

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。

如何禁用此訪問或限制?

回答

4

唯一的工作解決我發現是設置系統屬性使用反射:

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

所有其他解決方案使用extsystemProperty我沒有工作。 我安裝了Gradle 1.11。

+0

我在您的gradle任務中看到的一個長期問題是,您將如何支持多個版本的wsdl,或者假設您有多個xsds。文件不允許使用通配符 –

+0

Arne,非常感謝分享這個,它工作!非常有幫助 –