كيف يمكنني استخراج صفيف بايت من صوابي يسمح الرد ؟

StackOverflow https://stackoverflow.com/questions/465602

  •  19-08-2019
  •  | 
  •  

سؤال

أنا اختبار خدمة ويب مع صوابي يسمح.واحد من الردود يبدو مثل هذا:

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

الرد صفيف بايت التي ينبغي أن تمثل ملف مضغوط.كيف يمكنني التحقق من هذا ؟

هل كانت مفيدة؟

المحلول

على الرغم من أن الصحيحة لغويا ، وأعتقد ناثان الحل المقترح هو إلى حد ما غير مكتملة.

أعتقد أنه نسي القيام Base64 فك شفرة النص المستخرج قبل الخطوة 1.وأود أن تشمل أيضا تحسنا ذلك أن الإنسان لا يلزم التدخل من قبل التحقق من الملفات المؤقتة باستخدام 3rd الطرف الرمز البريدي المرافق.

التي من شأنها أن تترجم إلى الوصول إلى مؤقتة ملف مضغوط و فحص ما إذا كان صحيحا ملف مضغوط.ولذلك خوارزمية من أجل تنفيذ الشرط الخاص بك ليكون:

  1. الوصول إلى عنصر ترميز Base64 النص المحتوى Base64 فك ذلك
  2. إخراج الرمز البريدي الخام النص إلى ملف مؤقت ، وبالتالي خلق ملف مضغوط
  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