Question

Je teste un service Web avec soapUI. Une des réponses ressemble à ceci:

    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getInputConfigFilesResponse xmlns:ns2="http://ws.pdb.ericsson.se/">
         <return>UEsDBBQACAAIAO1GNToAAAAAAAAAAAAAAAANAAAAc2NyaXB0cy9lbGxza [...] AATAAAAAAAAAAAAAAAAAAGXAAAbGRhcF9ub2RlX2NvbmZpZ3VyYXRpb24vZ2VuZXJhdGVkX2xkaWZfZmlsZXMvX210YXM0X2N4cDQ0NF9yNF9JbXNtb2JpbGUubGRpZlBLAQIUABQACAAIAO1GNTp8eBuZRAEAABMDAAAmAAAAAAAAAAAAAAAAAKJiAABsZGFwX25vZGVfY29uZmlndXJhdGlvbi9lbGxzaC1jb21tYW5kc1BLBQYAAAAABQAFAIgBAAA6ZAAAAAA=</return>
      </ns2:getInputConfigFilesResponse>
   </S:Body>
</S:Envelope>

La réponse est un tableau d'octets qui devrait représenter un fichier zip. Comment puis-je vérifier cela?

Était-ce utile?

La solution

Bien que sémantiquement correct, je pense que la solution proposée par Nathan est quelque peu incomplète.

Je suppose qu’il a oublié de faire en Base64 le décodage du texte extrait avant l’étape 1. Je souhaiterais également inclure une amélioration, de sorte qu’aucune intervention humaine ne soit nécessaire en vérifiant le fichier temporaire à l’aide d’utilitaires ZIP tiers.

Cela se traduirait par l’accès au fichier ZIP temporaire et la vérification s’il s’agissait d’un fichier ZIP valide. Par conséquent, un algorithme pour implémenter votre exigence serait:

  1. Elément d'accès Texte codé en Base64 content et Base64 le décodent
  2. Exporter le texte brut ZIP dans un fichier temporaire, créant ainsi un fichier ZIP
  3. Vérifiez si le fichier ZIP créé temporairement est valide

Avec tout cela à l'esprit, voici à quoi ressemblerait le script Groovy complet:

import org.apache.commons.codec.binary.Base64

// Step 1: Access element Base64-encoded text content and Base64 decode it
String tempZipFilename = "temp.zip"
def textBase64 = context.expand(
  '${Step#Request#//ns2:getInputConfigFilesResponse[1]/return[1]}' )
def b64 = new Base64()
def zipTextBytes = b64.decode(textBase64.getBytes())

// Step 2: Output ZIP raw text into a temporary file
def zipFile = new java.io.File(tempZipFilename)
FileOutputStream fos = new java.io.FileOutputStream(zipFile)
fos.write( zipTextBytes )
fos.flush()
fos.close()
log.info "Temporary ZIP file stored as: ${zipFile.getCanonicalPath()}"

// Step 3: Check if the temporarily created ZIP file is valid
boolean responseValid
try {
  zipFile = new java.util.zip.ZipFile(tempZipFilename)
  responseValid = true
  log.info "Number of files in the ZIP file: ${zipFile.size()}"
} catch (java.util.zip.ZipException e) {
  responseValid = false
  log.error "The received response contains a bad ZIP"
}
log.info "Web service response is " + (responseValid ? "valid" : "invalid")

Faites-moi savoir si cela fonctionne pour vous comme pour moi. : -)

À la vôtre!
Shonzilla

p.s. Je suggérerais d'ajouter " ZIP " balise à cette question afin que les gens puissent plus facilement trouver une solution pour gérer les fichiers ZIP de Groovy intégrés ici.

Autres conseils

Vous allez devoir utiliser du groovy.

  1. affiche le tableau d'octets dans un fichier.
  2. exécute une ligne de commande (7zip, zip ou autre) avec une sortie que vous pouvez analyser.
  3. assurez-vous que le résultat est correct.

Modifier: ajout d'un exemple de code.

def saveFile = new java.io.File (saveTestDir + "\\ testreturn.zip")

FileOutputStream fos = new java.io.FileOutputStream (saveFile);

def zipBytes = context.expand ('$ {Step # Request # // ns2: getInputConfigFilesResponse [1] / return [1]}');

fos.write (zipBytes.getBytes ());

fos.flush ();

fos.close ();

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