【问题标题】:How do I extract byte array from soapUI response?如何从soapUI响应中提取字节数组?
【发布时间】:2009-01-21 14:49:44
【问题描述】:

我正在使用soapUI 测试一个Web 服务。其中一个响应如下所示:

    <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>

响应是一个字节数组,应该代表一个 zip 文件。我该如何验证这一点?

【问题讨论】:

    标签: bytearray response soapui


    【解决方案1】:

    虽然在语义上是正确的,但我认为 Nathan 提出的解决方案有些不完整。

    我猜他忘记了在第 1 步之前对提取的文本进行 Base64 解码。我还将包括一项改进,以便通过使用 3rd 方 ZIP 实用程序验证临时文件而无需人工干预。

    这将转化为访问临时 ZIP 文件并检查它是否是有效的 ZIP 文件。因此,实现您的要求的算法是:

    1. 访问元素 Base64 编码的文本 内容和 Base64 解码
    2. 将 ZIP 原始文本输出到临时文件中,从而创建 ZIP 文件
    3. 检查临时创建的ZIP文件是否有效

    考虑到所有这些,完整的 Groovy 脚本如下所示:

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

    请让我知道这是否适合您和我一样。 :-)

    干杯!
    山西拉

    附言我建议在此问题中添加“ZIP”标签,以便人们可以更轻松地找到处理嵌入此处的 Groovy 的 ZIP 的解决方案。

    【讨论】:

      【解决方案2】:

      你将不得不使用一些 groovy。

      1. 将字节数组输出到文件中。
      2. 执行一些命令行(7zip、zip 等),输出您可以解析的输出。
      3. 确保输出正确。

      编辑:添加了一些示例代码。

      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();

      【讨论】:

      • 第一步是我很好奇的关键部分
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2019-08-15
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2020-01-03
      相关资源
      最近更新 更多