2016-09-07 1 views
1

Je suis en train d'écrire une tâche graduelle qui fait wsimport pour générer les artefacts de service Web. La tâche que j'ai écrite fonctionne parfaitement bien et est montrée ci-dessous.Pouvons-nous utiliser une tâche wsimport pour plusieurs wsdl dans gradle sans répéter le code similaire?

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") 
      } 
     } 
    } 
} 

Mais depuis que je dois générer des artefacts provenant de plusieurs wsdl de je voudrais passer quelque chose comme un tableau de chemins WSDL sur le paramètre wsdl. C'est le code source utilisé par ant.taskdef pour analyser le fichier wsdl. J'ai déjà essayé de passer le tableau de wsdl en pensant que arguments[0] est un objet et puisque array est une instance de chaîne, ça pourrait marcher mais ce n'est pas le cas. Toute aide serait appréciée pour m'aider à éliminer la répétition du code. Aussi, je suis très nouveau à 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 
    ] 

Répondre

1

Une façon d'éliminer la répétition est de créer une liste, wsdlPaths et itérer dessus. Un exemple simple:

task wsimport { 
    doLast { 
     def wsdlPaths = ["path1", "path2", "path3"] 

     wsdlPaths.each { wsdlPath -> 
      ant { 
       // replace this with your current code as appropriate 
       echo(message: "path is ${wsdlPath}") 
      } 
     } 
    } 
} 

Ici, nous utilisons simplement ant.echo mais vous devriez être en mesure de remplacer votre code actuel (avec de légères modifications, le cas échéant).