2015-11-11 2 views
0

Я использую java.xml.transform.Transformer для добавления заголовка аутентификации в запрос SOAP. Мое приложение работает на JDK1.8.Проблемы с JDK 1.8 и java.xml.transform.Transformer

Когда строка кода ниже выполняется я получаю последующее предупреждение писаться консоли

Фрагмент кода:

transformer.transform(authenticationHeader, header.getResult()); 

Записан предупреждение:

XML Parser does not recognize the feature http://xml.org/sax/features/validation 

Выход является предупреждение и не препятствует успешному завершению запроса, однако я хотел бы удалить из файлов журналов.

Я использую Maven и явно не указать Xerces или Saxon, Xalan и т.д. Мое приложение использует код, который был создан с использованием Maven CxF-Codegen-плагин

Когда я отлаживать этот вопрос я могу видеть, что предупреждение генерируется в net.sf.saxon.event.Sender

Может любой;

  1. Раствор при этом мой код использует действительное имя функции или
  2. средство для подавления предупреждающего сообщения от моего выхода журнала

ответ

1

Нам может понадобиться атаковать этот один из обоих концов: (а), почему запрашивается функция проверки, и (б) почему анализатор не распознает его.

(a) Зачем запрашивается? Saxon запросит эту функцию, если приложение запрашивает проверку на основе DTD, например, выполнив Configuration.setValidation (true). Возможно, есть и другие места, которые этот запрос может быть сделан.

(b) Почему это не распознается? Имя http://xml.org/sax/features/validation задокументировано как функция Apache Xerces, но я понятия не имею, поддерживает ли он встроенный парсер JDK или нет: найти документацию нелегко. В javadoc XMLReader он не описывается как функция, которую должен распознать каждый парсер, но используется как примерное имя функции. У меня всегда настроена среда для использования Apache Xerces по умолчанию, поэтому для запуска тестов требуется некоторое усилие, чтобы увидеть, какие функции поддерживаются, если Apache Xerces отсутствует.

Возможно, парсер на самом деле не является стандартом JDK, а другим парсером - возможно, написанным пользователем фильтром, который не является «реальным» парсером, но фильтрует вывод из реального парсера (это довольно часто, и это распространенная ошибка для таких фильтров, чтобы не передавать настройки конфигурации в лежащий в основе анализатор). К сожалению, есть несколько путей, по которым Saxon сообщает, какой парсер отклонил запрос, но это не относится к этому конкретному пути. Я исправлю это.

Это не так просто, как игнорировать предупреждение. Если приложение запрашивает проверку DTD и этого не происходит, это может иметь серьезные последствия. Дети могут умереть.

+0

Благодарим за принятие ответа. Но я предложил различные возможности, и мне бы хотелось узнать (как другие придут сюда позже), каков был окончательный ответ. –