我测试一个网络服务与soapUI.一个反应是这样的:

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

响应是一个字节的数组应该代表的一个压缩文件。怎么我可以去证实这个吗?

有帮助吗?

解决方案

虽然在语义上更正,我相信内森的拟议解决方案是有些不完整的。

我猜他忘了做Base64decode提取的文本之前的步骤1。我还将包括一个改进,以便没有人类干预需要通过验证的临时文件,使用3方ZIP公用事业。

这将访问临时的邮政编文件,并检查它是否是一个有效的邮政编文件。因此,一个算法用于执行您的要求将是:

  1. 访问元Base64-encoded text 内容和Base64decode它
  2. 输出ZIP原文进入一个临时文件,从而创造一个压缩文件
  3. 检查,如果该临时创建的拉链文件是有效的

所有这一点,这里是如何完成时髦的脚本看起来会像:

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

请让我知道如果这对你的作品,因为它没给我。:-)

干杯!
Shonzilla

p.s.我建议添加"压缩"标记这一问题,以使人们能够更轻松地找到一个解决方案,用于处理拉链时髦,就埋在这里。

其他提示

你必须要使用某些常规。

  1. 出字节列文件。
  2. 执行某一命令行(7zip的,拉链什么)的输出可以分析。
  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();

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top