Установите задачу в Gradle для загрузки и генерации классов Java из аутентифицированного WSDL - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть следующая задача в моем файле build.gradle, чтобы загрузить WSDL и сгенерировать классы.

WSDL, который я пытаюсь загрузить, аутентифицируется с помощью базовой аутентификации.У меня есть учетные данные пользователя и пароля.

Как настроить эту задачу, чтобы включить пользователя и пароль, если это возможно?

Я скопировал эту задачу из https://spring.io/guides/gs/consuming-web-service/

task genJaxb {
   ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
   ext.classesDir = "${buildDir}/classes/jaxb"
   ext.schema = 'https://IP/path/wsdl.asmx?WSDL'

outputs.dir classesDir

doLast() {
    project.ant {
        taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
                classpath: configurations.jaxb.asPath
        mkdir(dir: sourcesDir)
        mkdir(dir: classesDir)

        xjc(destdir: sourcesDir, schema: schema,
                package: "package.wsdl") {
            arg(value: "-wsdl")
            produces(dir: sourcesDir, includes: "**/*.java")
        }

        javac(destdir: classesDir, source: 1.8, target: 1.8, debug: true,
                debugLevel: "lines,vars,source",
                classpath: configurations.jaxb.asPath) {
            src(path: sourcesDir)
            include(name: "**/*.java")
            include(name: "*.java")
        }

        copy(todir: classesDir) {
            fileset(dir: sourcesDir, erroronmissingdir: false) {
                exclude(name: "**/*.java")
            }
        }
    }
}
}

Заранее спасибо

1 Ответ

0 голосов
/ 20 сентября 2018

Я не уверен, что ant's XJCTask поддерживает базовую аутентификацию для получения исходного Wsdl.В вашем случае я бы пошел на двухэтапный процесс:

  1. одна задача, которая загружает wsdl локально, используя задачу ant.get с базовой аутентификацией
  2. одна задача, которая вызывает ant.xjc с локальной схемой, загруженной из первой задачи.

Некоторые рекомендации:

Загрузка задачи

Пример фиктивного извлечения Wsdl из Интернета (с базовой аутентификацией, даже если этот веб-сервер не требует этого)

ext {
    wsdlSrcUrl = 'http://www.thomas-bayer.com/axis2/services/BLZService?wsdl'
    wsdlLocalPath = "$buildDir/BLZService.wsdl"
    wsdlUser= 'testUser'
    wsdlPassword = 'userPass'
}
task downloadWsdsl {
    doLast {
        file(buildDir).mkdir()
        ant.get(src: wsdlSrcUrl, dest: wsdlLocalPath, username: wsdlUser, password: wsdlPassword)
    }
}

Задача Codegen

Thisзадача зависит от downloadWsdsl задача

task genJaxb {
    dependsOn downloadWsdsl

    ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
    ext.classesDir = "${buildDir}/classes/jaxb"
    ext.schema = wsdlLocalPath

    outputs.dir classesDir

    doLast() {
        project.ant {
            taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
                    classpath: configurations.jaxb.asPath
            mkdir(dir: sourcesDir)
            mkdir(dir: classesDir)

            xjc(destdir: sourcesDir, schema: schema, package: "hello.wsdl") {
                arg(value: "-wsdl")
                produces(dir: sourcesDir, includes: "**/*.java")
            }

            javac(destdir: classesDir, source: 1.8, target: 1.8, debug: true,
                    debugLevel: "lines,vars,source",
                    classpath: configurations.jaxb.asPath) {
                src(path: sourcesDir)
                include(name: "**/*.java")
                include(name: "*.java")
            }

            copy(todir: classesDir) {
                fileset(dir: sourcesDir, erroronmissingdir: false) {
                    exclude(name: "**/*.java")
                }
            }
        }
    }
}
...