Использование 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. Можно столкнуться с побочными эффектами.

Другие вопросы по тегам