웹 서비스 아티팩트를 생성하기 위해 wsimport를 수행하는 gradle 작업을 작성 중입니다. 내가 쓴 작업은 완벽하게 작동하고 아래에 나와 있습니다. 나는 여러 WSDL 년대에서 아티팩트를 생성해야하기 때문에비슷한 코드를 반복하지 않고도 여러 WSDL에 대해 하나의 wsimport 작업을 사용할 수 있습니까?
task wsimport {
ext.destDir = file('gen')
doLast {
ant {
sourceSets.main.output.classesDir.mkdirs()
destDir.mkdirs()
taskdef(name: 'wsimport',
classname: 'com.sun.tools.ws.ant.WsImport',
classpath: 'C:/Users/sbhattar/git/java_commons/common/java/lib/jaxws-2.2.6/jaxws-tools.jar'
)
wsimport(keep: true,
destdir: sourceSets.main.output.classesDir,
sourcedestdir: destDir,
extension: "true",
verbose: "false",
quiet: "false",
xnocompile: "true",
wsdl:"http://spapen2w1.shashwat.com.PlanService_4_0.wsdl") {
xjcarg(value: "-XautoNameResolution")
}
}
}
}
하지만 난 WSDL 매개 변수에 대한 WSDL 경로의 배열 같은 것을 통과하고 싶습니다. ant.taskdef가 wsdl을 구문 분석하는 데 사용하는 소스 코드입니다. arguments[0]
이 객체이고 배열이 문자열의 인스턴스이기 때문에 wsdl을 생각해 보았습니다.하지만 작동하지 않을 수도 있습니다. 코드 반복을 제거하는 데 도움이되는 도움을 주시면 감사하겠습니다. 나는 또한 매우 groovy/gradle.
public void execute(AntBuilder ant, Object... arguments) {
def wsdl = arguments[0]
def extension = arguments[1]
def destinationDir = arguments[2]
def classpath = arguments[3]
def episodes = arguments[4]
log.info("parsing wsdl '{}' with destination directory of '{}'",
wsdl, destinationDir)
ant.taskdef (name : 'wsimport',
classname: 'com.sun.tools.ws.ant.WsImport',
classpath: classpath)
def params = [
wsdl : wsdl.path,
verbose : extension.verbose,
sourcedestdir : destinationDir.path,
keep : extension.keep,
wsdlLocation : extension.wsdlLocation,
xnocompile : extension.xnocompile,
fork : extension.fork,
xdebug : extension.xdebug,
target : extension.target,
xadditionalHeaders : extension.xadditionalHeaders
]