Я собираюсь предположить, что вы создаете org.w3c.Document
и пишете его с помощью сериализатора. Если вы вручную создаете XML-строку, вам почти гарантировано, что вы создадите что-то, что почти, но не совсем XML, и я настоятельно рекомендую сначала исправить это.
Тем не менее, если вы пишете в поток из сериализатора (а System.out является потоком), то вам следует записывать напрямую в поток, а не записывать в строку и печатать ее (что вы бы делать со StringWriter). Причина этого заключается в том, что сериализатор XML будет правильно обрабатывать кодировки символов, в то время как сериализатор в строку для потока не может.
Если вы в данный момент не создаете DOM и обеспокоены требованиями к памяти для этого, тогда я предлагаю взглянуть на библиотеку Practical XML (которую я поддерживаю), в частности пакет builder, Он использует легкие узлы, которые затем выводятся через сериализатор с использованием преобразования SAX.
Редактировать в ответ на комментарий:
ОК, у вас есть сериализатор, покрытый XStream. Далее я собираюсь предположить, что вы вызываете XStream.toXML(Object)
для получения строки, и рекомендую вам вызвать вариант toXML(Object, OutputStream)
и передать ему фактический результат. Причина этого заключается в том, что XML очень чувствителен к кодировке символов, что часто ломается при преобразовании строк в потоки.
Это, конечно, может вызвать проблемы с построением вашего запроса POST, особенно если вы используете библиотеку, которая не предоставляет вам OutputStream.