Проблема тела запроса Spring с неверным xml - PullRequest
1 голос
/ 26 мая 2011

В нашем приложении отдыха мы используем @RequestBody StreamSorce для загрузки XML-файла. Проблема в том, что сам xml недействителен или содержит некоторые недопустимые символы, запрос PUT не выполняется (с неверным ответом http) до нашей логики, поэтому мы не можем сообщить клиенту о точной проблеме. Я знаю, что можно использовать просто String для requestBody, но имеет ли смысл его использовать? Я предполагаю, что если я буду загружать 100Mb xml, то каждый запрос создаст тело запроса String с тем же размером, и при использовании StreamSource мы читаем поток ввода, пока он нам нужен.

Какие плюсы и минусы для использования String или StreamSource в качестве тела запроса. Если я сделаю это с StreamSorce, будет ли он сканировать весь XML?

1 Ответ

0 голосов
/ 24 сентября 2013

Вы уже знаете, что такое StreamSource: он не позволяет предварительно обрабатывать XML, если он недействителен.

Использование String: когда XML будет настолько большим, это приведет к снижению производительности! Никогда не используйте такие большие объекты в Java - в многопоточной среде сервера приложений это может легко привести к OutOfMemoryError, оно делает ваше приложение уязвимым для DoS атаки!

Лучшее решение - сопоставить @RequestBody как InputStream и обработать этот InputStream с помощью SAX синтаксического анализатора. У вас низкое потребление памяти (синтаксический анализатор SAX не хранит структуру XML в памяти) и вы можете обрабатывать исключения, которые могут быть выброшены во время обработки.

...