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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top