Question

J'ai une tâche wsimport dans ma version Gradle qui fonctionne correctement jusqu'à 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"
            )
        }
    }
}

Lors du passage au JDK 8 (build 1.8.0-b129), j'obtiens l'erreur suivante :

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.

En recherchant le problème, j'ai trouvé le message suivant (décrivant également le problème avec Java 7 de manière surprenante) : https://github.com/stianh/gradle-jaxb-plugin/issues/20Mais je ne parviens pas à transmettre l'environnement/argument à wsimport/xjc.

Comment désactiver cet accès ou la restriction ?

Était-ce utile?

La solution

La seule solution efficace que j'ai trouvée consistait à définir une propriété système à l'aide de la réflexion :

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

Toutes les autres solutions utilisant ext ou systemProperty N'a pas travaillé pour moi.J'ai installé le grade 1.11.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top