Использование XML 1.1 в Axis2
У меня есть веб-сервис и клиент, которые передают строки, содержащие ссылки на символы, такие как & # 26; (0x1A). Они недопустимы в XML 1.0, но действительны в XML 1.1. XML-анализатор Axis генерирует исключения из-за этих ссылок на символы. Есть ли способ заставить его проанализировать ответ как XML 1.1 или вставить объявление XML? (Там в настоящее время нет ни одного.) Я изучил использование обработчиков, но, насколько я понимаю, они вызываются после того, как XML уже проанализирован.
3 ответа
Вы проходите в 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. Можно столкнуться с побочными эффектами.