Вопрос

У меня есть веб-сервис и клиент, которые передают строки, содержащие ссылки на символы, такие как & 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. Можно столкнуться с побочными эффектами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top