我有一个来自SOAP Web服务的XML响应。此响应在特定标签内有一个二进制PDF,例如
<binaryObject>JVBERi0xLjQNCiVET0MxIFJlc2...</binaryObject>
我想提取二进制部分并将其转换回PDF文件。因此,我得到了将XML解析为org.w3c.Document并使用XPath的标签内容:
String binary = XMLUtils.evalXPath(doc, "//binaryObject//text()");
哪个工作正常,然后尝试执行以下操作:
byte[] buffer = new byte[8 * 1024];
// get the binary string as an array of bytes
InputStream input = new ByteArrayInputStream(binary.getBytes("Cp1252"));
int totalBytes = 0;
try {
OutputStream output = new FileOutputStream(PATHDOWNLOAD + File.separator + fileName);
try {
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
totalBytes += bytesRead;
}
} finally {
output.close();
}
} finally {
input.close();
logger.info("Done. " + totalBytes + " bytes written.");
}
它记下了文件,但是,它作为PDF不可读。尝试了各种编码,但仍然得到一个简单的文本文件,仅此而已。从文件到文本再到文件的翻译中可能丢失了一些东西,但是我无法想象使它起作用的方法。我被迫以String格式获取响应,因为我需要获取正确的标签,但随后我无法解码二进制部分。 有什么想法吗?
附录。如果我尝试登录以控制台二进制内容(当它仍然是String时),它将清除屏幕并根据执行情况从不同的位置打印出最后一部分。不知道能不能帮上忙。
答案 0 :(得分:0)
您的binaryObject
内容似乎已编码为base64,与字符编码无关(例如“ Cp1252”)。
甚至更适合您在使用流时使用的情况: