Я пытаюсь использовать SAAJ API для отправки SOAP-запроса с вложениями с помощью gzip.Я только начал использовать SAAJ, поэтому я не очень знаком, но я не смог найти ни одного примера / использования, делающего то же самое в Интернете.Все, что я вижу, просто добавляет заголовок 'accept-encoding', 'gzip', но это ничего не дает, просто говорит серверу, чего ожидать от меня.Я попытался сжать свое исходное сообщение и записать его в новое сообщение перед отправкой, но я получаю сообщение об ошибке, в котором говорится, что начальная граница отсутствует.ниже приведен код, который я использую для генерации сообщения и gzip его перед отправкой.
SOAPConnectionFactory cf = null;
SOAPConnection conn = null;
SOAPMessage message = null;
SOAPMessage response = null;
TransformerFactory tf = null;
Transformer transformer = null;
StringWriter writer = null;
MessageFactory fac = null;
TransmissionPayload payload = null;
SOAPMessage gzipMessage = null;
try
{
tf = TransformerFactory.newInstance();
transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
fac = MessageFactory.newInstance();
message = fac.createMessage(new MimeHeaders(), new ByteArrayInputStream(writer.getBuffer().toString().getBytes()));
message.getMimeHeaders().addHeader("Accept-Encoding", "gzip,deflate");
//ADD ATTACHMENT
message.addAttachmentPart(message.createAttachmentPart(
new StreamSource(
new ByteArrayInputStream(FileUtils.readFileToByteArray(file))), "text/xml"));
message.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
cf = SOAPConnectionFactory.newInstance();
conn = cf.createConnection();
//GZIP ORIGINAL MESSAGE HERE
ByteArrayOutputStream out = new ByteArrayOutputStream();
message.writeTo(out);
byte[] msg = out.toByteArray();
ByteArrayOutputStream out2 = new ByteArrayOutputStream();
GZIPOutputStream os = new GZIPOutputStream(out2);
os.write(msg);
os.flush();
os.close();
//CREATING NEW MESSAGE FROM GZIP.
gzipMessage = fac.createMessage(message.getMimeHeaders(), new ByteArrayInputStream(out2.toByteArray()));
response = conn.call(gzipMessage, new URL(IRS_BRQ_URL));
if(response != null)
{
Source src = response.getSOAPPart().getContent();
tf = TransformerFactory.newInstance();
transformer = tf.newTransformer();
DOMResult res = new DOMResult();
transformer.transform(src, res);
payload = new TransmissionPayload(200, (Document)res.getNode(), null);
}
}catch(Exception e)
{
throw new AirException("A2AConnection.SAAJ: Exception: ", e);
}finally
{
cf = null;
conn = null;
message = null;
tf = null;
transformer = null;
writer = null;
fac = null;
}
Если это вообще возможно, я предполагаю, что мне нужно будет только сжать часть SOAPMessage, а неполностью?У меня нет возможности сделать это без gzipping, поскольку конечная точка этого требует.
Любая помощь или направление приветствуется.Пожалуйста, дайте мне знать, если требуется дополнительная информация.