문제

나는 테스트는 웹 서비스로 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>

응답은 바이트 배열해야 하는 표 zip 파일로 저장됩니다.할 수 있는 방법에 대해 이동 확인 이?

도움이 되었습니까?

해결책

지만 의미상으로 올바른지,나는 믿는 나단이 제안한 해결책이 다소 완전하지 않습니다.

나는 그가 잊지 Base64 디코드 추출한 텍스트의 이전 단계 1.또한 것을 포함한 개선하도록 인간의 개입 없이 필요한지 확인하여 임시 파일을 사용하여 제 3 자 ZIP 유틸리티입니다.

는 것으로 번역 액세스 일시 ZIP 파일지 여부를 확인하고 유효한 ZIP 파일로 저장됩니다.따라서,알고리즘을 구현하기 위한 귀하의 요구 사항이 될 것이다:

  1. 액세스 요소를 Base64 인코딩된 텍스트 콘텐츠 및 Base64 디코드
  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")

면 알려 주시기 바랍니 이 일을 위해 당신에 대해서와 마찬가지로 나입니다.:-)

Cheers!
Shonzilla

p.s.는 것이 좋을 추가하"ZIP"태그에 이 질문에 그래서 사람들은 더 쉽게 찾을 수 있는 솔루션을 처리하기 위한 지퍼에서 그루브가 내장된 여기에.

다른 팁

그루비를 사용해야합니다.

  1. 바이트 배열을 파일로 출력하십시오.
  2. 구문 분석 할 수있는 출력으로 일부 명령 줄 (7zip, zip ablice)을 실행하십시오.
  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