Wie überwinde ich die Zugriffsbeschränkungen für Gradle Wsimport Task JDK 8?
Frage
Ich habe eine Wsimport-Aufgabe in meinem Gradle-Build, die bis Java 7 einwandfrei funktioniert:
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"
)
}
}
}
Beim Wechsel zu JDK 8 (Build 1.8.0-b129) erhalte ich die folgende Fehlermeldung:
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.
Auf der Suche nach dem Problem bin ich auf den folgenden Beitrag gestoßen (der das Problem überraschenderweise auch mit Java 7 beschreibt): https://github.com/stianh/gradle-jaxb-plugin/issues/20Aber ich kann die Umgebung/das Argument nicht an wsimport/xjc übergeben.
Wie kann dieser Zugriff bzw. die Einschränkung deaktiviert werden?
Lösung
Die einzige funktionierende Lösung, die ich gefunden habe, bestand darin, mithilfe von Reflection eine Systemeigenschaft festzulegen:
task wsimport {
System.setProperty('javax.xml.accessExternalSchema', 'file')
...
}
Alle anderen Lösungen verwenden ext
oder systemProperty
hat bei mir nicht funktioniert.Ich habe Gradle 1.11 installiert.