Исключение com.sun.xml.messaging.saaj.SOAPExceptionImpl: SAAJ0511: Unable to create envelope from given source возникает в момент, когда SAAJ-фабрика пытается построить SOAP-конверт из переданного источника Source, но не может распарсить его содержимое как корректный XML-документ. Чаще всего это происходит при вызове MessageFactory.createMessage() или SOAPMessage.getSOAPBody(), когда входной поток пуст, содержит не-XML данные (например, HTML-страницу ошибки от прокси) или XML с нарушенной структурой.

Проблема типична для приложений на Java, работающих с SOAP-сервисами через JAX-WS, Spring-WS или напрямую через SAAJ API. Ошибка вводит в заблуждение: текст исключения говорит о конверте, но реальная причина почти всегда кроется в содержимом ответа сервера или в способе чтения потока. Ниже разберём диагностику и рабочие способы устранения.

Что означает код SAAJ0511

Библиотека SAAJ (SOAP with Attachments API for Java) — это низкоуровневый механизм обработки SOAP-сообщений. Когда вы передаёте в MessageFactory объект StreamSource, DOMSource или SAXSource, парсер ожидает увидеть валидный XML, корневым элементом которого является Envelope в одном из пространств имён SOAP (1.1 или 1.2).

Код SAAJ0511 выбрасывается на этапе построения конверта, если парсер не смог интерпретировать источник. Это «обёрточная» ошибка: почти всегда у неё есть вложенная причина (caused by), например XMLStreamException или SAXParseException, которая и указывает настоящее место сбоя — строку и позицию в документе.

💡

SAAJ0511 — это симптом, а не диагноз. Всегда смотрите на вложенное исключение (caused by) в стектрейсе: именно оно указывает реальную причину сбоя парсинга.