Я пытаюсь отправить вложение клиенту из веб-службы Axis2.Проблема в том, что контекст сообщения, который клиент получает от службы, не содержит вложений, хотя последний, кажется, добавляет его.Вот краткий код обеих сторон.Служба:
MessageContext inMC = MessageContext.getCurrentMessageContext();
OperationContext operationContext = inMC.getOperationContext();
MessageContext outMC = operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
DataHandler handler = new DataHandler (new FileDataSource("C://goods.xml"));
String attachID = outMC.addAttachment(handler);
OMElement idElem = factory.createOMElement("doc", ns);
idElem.addAttribute("href", "cid:" + attachID, ns);
Клиент (пытается получить вложение):
MessageContext mcResponse = operationClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
SOAPBody body = mcResponse.getEnvelope().getBody();
OMElement attachElem = body.getFirstChildWithName (new QName("doc"));
String attachID = attachElem.getAttributeValue (new QName("href"));
attachID = attachID.replaceFirst("cid:", "");
DataHandler dataHandler = mcResponse.getAttachment(attachID);
Метод getAttachment () возвращает значение NULL.В случае отладки клиентского приложения IDE показывает, что карта вложений в контексте входного сообщения не содержит никаких элементов (размер = 0).Объект OMElement (idElem), который содержит идентификатор вложения, обычно принимается и читается клиентом (отладка показывает cid).Параметры enableSwA, cacheAttachments, attachmentDIR, sizeThreshold устанавливаются как в services.xml, так и в программной части клиента.Что не так с контекстом сообщения?Большое спасибо за любые предложения.
Upd : TCPmon показал следующее содержание.Запрос на обслуживание:
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><getXMLFile xmlns="http://axis2.apache.org"><filename>goods.xml</filename></getXMLFile></soapenv:Body></soapenv:Envelope>
Я думаю, это нормально:)
Ответ от службы:
109
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><doc href="cid:d06f3b36afdfcbd2e135ecfbcad05ee602661262b059ed38@apache.org"></doc></soapenv:Body></soapenv:Envelope>
0
Прошу прощения за несколько простых вопросов, но где вложениедолжно быть отражено?Я полагаю, если служба отправляет вложение, сообщение SOAP содержит двоичные данные, не так ли?Я также проверил наличие вложения в контексте сообщения на стороне службы - все нормально, я могу получить его обратно из контекста после добавления.