Come superare le regole di accesso Gradle Wsimport Task JDK 8?
Domanda
Ho un compito wsimport nella mia bolla di gradle che funziona bene fino a quando Java 7:
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"
)
}
}
}
.
Quando si passa a JDK 8 (Build 1.8.0-B129) ottengo il seguente errore:
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.
.
Ricerca del problema Ho trovato il seguente post (descrivendo il problema anche con Java 7 sorprendentemente): https://github.com/stianh/gradle-jaxb-plugin/issues/20 . Ma non riesco a superare l'ambiente / argomento a wsimport / xjc.
Come disabilitare questo accesso o la restrizione?
Soluzione
L'unica soluzione di lavoro che ho trovato è stata quella di impostare una proprietà di sistema utilizzando la riflessione:
task wsimport {
System.setProperty('javax.xml.accessExternalSchema', 'file')
...
}
.
Tutte le altre soluzioni utilizzando ext
o systemProperty
non hanno funzionato per me.
Ho installato Gradle 1.11.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow