Потеря вложений в ответе Axis2 - PullRequest
       13

Потеря вложений в ответе Axis2

0 голосов
/ 27 сентября 2011

Я пытаюсь отправить вложение клиенту из веб-службы 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 содержит двоичные данные, не так ли?Я также проверил наличие вложения в контексте сообщения на стороне службы - все нормально, я могу получить его обратно из контекста после добавления.

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

вы можете использовать tcpmon [1], чтобы отследить сообщение http и изолировать проблему.

В любом случае, лучший способ обработки вложений - использовать MTOM.Который может использоваться с каркасами привязки данных, такими как ADB [2], или также с POJO.

спасибо, Амила.

[1] http://ws.apache.org/commons/tcpmon/

[2] http://amilachinthaka.blogspot.com/2009/01/using-mtom-with-axis2.html

1 голос
/ 30 сентября 2011

Проблема была решена. Проблема была на стороне обслуживания. TCPmon показал, что в ответном сообщении нет вложений. Однако тот же пример службы работает нормально. После проверки и сравнения каждой операции в моем сервисе выяснилось, что программирование также не является причиной. Осталось только одно - настройки сервиса. Таким образом, причина в том, что поля настроек в файле service.xml службы, для которых требуется логический тип, не допускают любые дополнительные символы. Моя ошибка:

Неправильно:

    <parameter name="enableSwA">
        true
    </parameter>

Правильно:

<parameter name="enableSwA">true</parameter>
...