2016-10-27 13 views
1

Я прочитал предыдущие сообщения и задал подобные вопросы, но я не смог найти решение моей проблемы. В моем пользователь приложения может загрузить файлы, поэтому, когда пользователь нажимает на загрузку нашего сервера приложений внутри Сета вверх по авторизованной сессии с веб-сервиса, отправить данные файла в ответ XML, как показано ниже:загрузка большого файла из webservice, вызывающего проблему с производительностью приложения

<FileSerial xmlns="http://my.example.com/webservices"> 
    <filedata>base64Binary</filedata> 
    <filesize>int</filesize> 
    <filetype>string</filetype> 
    <mime_type>string</mime_type> 
</FileSerial> 

И I использовали пружинные-WS, как показано ниже:

GetDocResponse docResponse = (GetDocResponse) webServiceTemplate.marshalSendAndReceive(getDoc); 
FileSerial fileSerial = docResponse.getGetDocResult(); 
fileByte = fileSerial.getFiledata(); 

После нескольких пользователей хит скачать наш JVM памяти сервера приложений идет очень высоко и сервер приложений не отвечает и должен быть перезапущен. Я предполагаю, что файлбайт хранится в памяти моего сервера приложений, и это вызывает проблему.

Есть ли способ перевести непосредственно в клиентский браузер, не сохраняя его в памяти сервера приложений.

Любой образец кода поможет.

ответ

1

Вы загружаете полный документ в свою кучу, а также конверсию в base64. Если вы не используете копию по ссылке, каждая карта из ваших двоичных данных на другой объект создает другую запись в вашей куче.

Вы должны использовать запрос несколько частей и отправить документ как вложение ваших WS запросить MTOM example