Как передать временный файл Axis 2 MTOM в HttpServletRequest - PullRequest
0 голосов
/ 29 сентября 2010

Я использую код ниже, чтобы получить вложение от веб-сервера.Клиент в этом случае является веб-браузером.Поэтому в настоящее время пользователь делает запрос к веб-серверу для вложения.Веб-сервер отправляет MTOM-запрос другому серверу для вложения.Затем этот веб-сервер ожидает загрузки вложения, прежде чем начать запись этого вложения в ответ.Пользователь ждет в два раза больше времени, чтобы получить файл.Как я могу подключиться к коду Axis2, чтобы получить доступ к временному файлу, чтобы я мог передавать его пользователю при его создании?Я знаю, что это не лучший способ сделать это, но это требование.Я работаю с большими файлами до 2 ГБ, так что ждать получения файла вдвое больше не получается.

Options options = new Options();
options.setTo(new EndpointReference(this.endpointUrl));
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS, Constants.VALUE_TRUE);
options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR, this.tempDirectory);
options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, String.valueOf(this.tempFileSizeThreshold));
options.setTimeOutInMilliSeconds(this.serviceRequestTimeOut);

sender = new ServiceClient();
sender.setOptions(options);

OMElement result = sender.sendReceive(this.getAttachmentPayload(productId, attachmentId));

OMElement attachmentElement = result.getFirstElement();

Iterator<OMElement> elementIterator = attachmentElement.getChildElements();

String fileName = "";
DataHandler dataHandler = null;

while (elementIterator.hasNext()) {
    OMElement element = elementIterator.next();

    if (element.getQName().getLocalPart().equals("name")) {
        fileName = element.getText();
    } else if (element.getQName().getLocalPart().equals("attachment")) {
        dataHandler = (DataHandler) ((OMText) element.getFirstOMChild()).getDataHandler();
    }
}

1 Ответ

0 голосов
/ 23 марта 2011
org.w3.www._2005._05.xmlmime.Base64Binary b64data = ---YOUR_SOURCE_ATTACHMENT---;

org.apache.axiom.attachments.CachedFileDataSource ds = (CachedFileDataSource) b64data.getBase64Binary().getDataSource();

String absPath = ds.getFile().getAbsolutePath();
...