Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Groovy Java Discussion :

Fonction qui retourne null


Sujet :

Groovy Java

  1. #1
    Candidat au Club
    Fonction qui retourne null
    Bonjour,

    J'utilise Groovy avec SoapUI 5.3.0 en version gratuite

    J'ai un TestCase avec deux webservices et un script Groovy
    Le but est de générer un fichier texte avec les infos qui m'intéressent

    Le code est le suivant :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import com.eviware.soapui.support.XmlHolder
    import java.text.MessageFormat
    import org.apache.commons.lang.ObjectUtils
    import java.util.ArrayList
     
    def groovyUtils=new com.eviware.soapui.support.GroovyUtils(context)
     
    def responseHolder1 = groovyUtils.getXmlHolder( testRunner.testCase.testSteps["getDataRequest"].testRequest.response.getContentAsXml())
    def responseHolder2 = groovyUtils.getXmlHolder( testRunner.testCase.testSteps["getAssignments"].testRequest.response.getContentAsXml())
    def file = new File("C:/temps.txt")
    def findAssignment(id1) {
    	for (int i=0; i++; ID2.size()-1){
    		if (id1 == ID2[i]) {
    			return Assignment[i]
    		}
    	}
    }
     
    //temps de présence
    List<String> ID1
    List<String> time
    List<String> date
     
    //affectations
    List<String> ID2
    List<String> Assignment
     
    List<String> list
    List<String> list2
     
    ID1=responseHolder1.getDomNodes("//*:FromDateToDateJobTotal/*:employeeIdentificationNumber").collect{node->node.getFirstChild().nodeValue}
    date=responseHolder1.getDomNodes("//*:FromDateToDateJobTotal/*:startDate").collect{node->node.getFirstChild().nodeValue}
    time=responseHolder1.getDomNodes("//*:FromDateToDateJobTotal/*:hours").collect{node->node.getFirstChild().nodeValue}
     
    ID2=responseHolder2.getDomNodes("//*:JobAssignment/*:employeeIdentificationNumber").collect{node->node.getFirstChild().nodeValue}
    Assignment=responseHolder2.getDomNodes("//*:JobAssignment/*:jobDescription").collect{node->node.getFirstChild().nodeValue}
     
    list=([ID1, date, time].transpose().collect{it -> it[0] + " | " + it[1] + " | " + it[2] + " | " + findAssignment(it[0])})
     
    for (String s: list) {	
        file.append(s  + System.getProperty("line.separator"))
    }


    Le permier service va me chercher des temps de présence, le deuxième l'affectation à un poste de travail. Le lien entre les deux est employeeIdentificationNumber que j'appelle respectivement ID1 et ID2
    Je souhaiterais obtenir une liste finale avec ID1, date, time, Assignment (Assignment tel que ID1=ID2)
    Mon problème est que la fonction findAssignment me retourne null dans ma liste et je ne comprends pas pourquoi

    J'ai bien relu tout le code mais je ne trouve pas, quelqu'un pourrait m'aiguiller svp sur ce qui coince ?
    Je précise que je suis débutant et pas du tout informaticien... juste un peu seul au monde en PME

  2. #2
    Membre expérimenté
    Bonjour,

    Déjà, le code n'est pas des plus clairs avec les listes ID1 et ID2... Des noms plus explicites faciliteraient la lecture.

    Et éviterait peut-être :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def findAssignment(id1){    for (int i=0; i++; ID2.size()-1){
            if (id1 == ID2[i]) {
                return Assignment[i]
            }
        }
    }
     
    //temps de présence List<String> ID1


    Avoir un id1 en paramètre d'un méthode, en même temps qu'une liste ID1, et en Groovy, c'est prêter le flanc à l'erreur.

    Quelque chose risque en tous cas d'être toujours faux :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     if(id1 == ID2[COLOR=#333333][[/COLOR]i]) 


    Comparer deux String nécessite d'utiliser la méthode equals() et non == (si tant est que id1 est du type String, Groovy permettant comme ici de ne pas typer explicitement les paramètres).

  3. #3
    Candidat au Club
    Cincinnatus,

    Merci pour cette réponse complète, j'ai bien pris note des deux conseils, je vais reprendre le code avec des noms plus explicites, en particulier ID/id et je pense que equals() va régler le problème