Я использую веб-службу, которая помогает мне получать файлы из концентратора сообщений. Тип файла может быть XML или ZIP.
Для ZIP-файлов тип содержимого — двоичный.
У меня есть этот кусок кода:
private String extractPayload(String filePath, AttachmentPart attach){
FileOutputStream fileStream = null;
try {
DataHandler handler;
handler = attach.getDataHandler();
File f = new File(filePath);
fileStream = new FileOutputStream(filePath);
handler.writeTo(fileStream);
fileStream.flush();
} catch (Exception ex) {
logger.info("####Exception:" + ex.getMessage());
} finally {
if (fileStream != null)
fileStream.close();
}
return filePath;
}
Теперь код отлично работает для извлечения XML-файлов, хотя в случае с ZIP-файлами файл оказывается поврежденным. Я загрузил тот же файл с помощью файловой утилиты из центра обмена сообщениями и обнаружил, что размер файла, который я извлекаю через вложение SOAP, примерно на 4 байта больше, чем его фактический размер.
Обновление: кодировка вложения 7-битная (если это может мешать), в то время как другое вложение, содержащее другой почтовый индекс, закодировано как Quote-printable. Оба почтовых индекса загружаются из одной и той же веб-службы (хотя они различаются кодировкой), и оба оказываются поврежденными.
Редактировать: я твердо уверен, что проблема связана с кодировкой, в которой я получаю файл, и вот сравнение между фактическим файлом и полученным файлом вложения.
Фактический размер файла: 9031 байт Размер файла полученного вложения: 9066 байт
Я попытался сравнить оба файла в редакторе документов, чтобы найти различия между ними. Различия между исходным файлом и загруженным вложенным файлом (двоичный редактор):
ed изменено на 3f, db изменено на 3f, d6 изменено на 3f, 85 изменено на 3f, d0 изменено на 3f,
и так далее.
Zip-файл содержит PDF-файл и XML-файл.
Начальная строка обоих файлов похожа, начиная с PK