尽管在语义上是正确的,但我相信 Nathan 提出的解决方案有些不完整。
我猜他忘记了在步骤 1 之前对提取的文本进行 Base64 解码。我还将包括一项改进,以便通过使用 3rd 方 ZIP 实用程序验证临时文件而无需人工干预。
这将转化为访问临时 ZIP 文件并检查它是否是有效的 ZIP 文件。因此,实现您的要求的算法将是:
- 访问元素 Base64 编码的文本内容并对其进行 Base64 解码
- 将 ZIP 原始文本输出到临时文件中,从而创建 ZIP 文件
- 检查临时创建的 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")
请让我知道这是否对您有用,对我也有用。:-)
干杯!
松兹拉
ps 我建议在这个问题中添加“ZIP”标签,以便人们可以更轻松地找到一个解决方案来处理嵌入在这里的 Groovy 的 ZIP。