Использование XML 1.1 в Axis2
-
19-08-2019 - |
Вопрос
У меня есть веб-сервис и клиент, которые передают строки, содержащие ссылки на символы, такие как & amp; # 26; (0x1A). Они недопустимы в XML 1.0, но действительны в XML 1.1. XML-анализатор Axis генерирует исключения из-за этих ссылок на символы. Есть ли способ заставить его проанализировать ответ как XML 1.1 или вставить объявление XML? (Там в настоящее время нет ни одного.) Я изучил использование обработчиков, но я понимаю, что они вызываются после того, как XML уже проанализирован.
Решение
Вы передаете InputStream
или Reader
? Если это так, вы можете заключить исходный код в другой класс (например, BufferedReader
работает), но использовать его для удаления ненужных символов.
Другие советы
Думаю, тебе будет очень тяжело с этим. Насколько я понимаю, стандарт WSDL 2.0 построен на XML 1.0. Итак, какую службу вы называете, которая описывает себя с помощью WSDL (при условии XML 1.0), а затем начинает отправлять вам сообщения с символами XML 1.1 в нем?
Когда вы определяете службу Axis2, вы можете определить, какие обработчики у нее есть, в файле services.xml. Например, на этой странице у них есть служба, которая использовал org.apache.axis2.receivers.RawXMLINOutMessageReceiver ... Я знаю, что это не то, что вы пытаетесь сделать, но, возможно, это место, чтобы начать искать или думать.
Есть еще один вариант - заставить синтаксический анализатор обрабатывать ввод как XML 1.1.
Поскольку Axis2 использует синтаксический анализатор Woodstox, вы можете расширить метод WstxInputFactory
и переопределить createPrivateConfig()
:
@Override
public ReaderConfig createPrivateConfig() {
ReaderConfig config = super.createPrivateConfig();
config.enableXml11(true);
return config;
}
Затем используйте эту пользовательскую фабрику через системное свойство: -Djavax.xml.stream.XMLInputFactory = mypackage.MyWstxInputFactory
Обратите внимание, что такой обходной путь предназначен только для случаев, когда вы абсолютно не можете изменить ошибочный веб-сервис, который генерирует недопустимый XML. Можно столкнуться с побочными эффектами.