getAssociatedStylesheet в TransformerFactoryImpl.java создает исключение, если DOCTYPE и PI для включения таблицы стилей существуют в XML

Взгляните на код getAssociatedStylesheet(исходный код, String media, String title, String charset) выдает исключение TransformerConfigurationException в классе TransformerFactoryImpl:

Определение вышеприведенной функции игнорирует XMLReader, который я передал в качестве аргумента через исходный параметр (который, по сути, является объектом SAXSource). Приведенная выше функция создает новый XMLReader после создания нового объекта SAXParserFactory. Из-за этого проблема, с которой мы сталкиваемся, заключается в том, что при анализе входного XML-файла он продолжает анализировать раздел DOCTYPE и внешний DTD, указанный через Public ID и System ID. Теперь, поскольку наш XMLReader не используется для синтаксического анализа XML-файла, EntityResolver, зарегистрированный в читателе, не используется, и, следовательно, внешний DTD не разрешается, и поэтому функция getAssociatedStylesheet завершается ошибкой с исключением.

Однако, если вы посмотрите на другую функцию, общедоступные шаблоны newTemplates(Source source) выдают исключение TransformerConfigurationException в классе TransformerFactoryImpl. Эта функция специально проверяет, является ли переданный исходный аргумент SAXSource, и если это так, то если XMLReader присутствует в источнике, то новый объект XMLReader не создается.

Это ошибка? Есть предположения?

Версия XalanJ: 2.7.1 Путь к исходному файлу: src\org\apache\xalan\processor\TransformerFactoryImpl.java

Спасибо! Суровая Гупта Adobe Systems


person HarshG    schedule 19.08.2013    source источник
comment
Вы упомянули Ксалан в своем списке тегов, но это единственная подсказка, что вы говорите о Ксалане. Даже с этой информацией вам нужно сказать, какая версия Xalan (версия JDK или версия Apache?). Существует много реализаций интерфейсов преобразования JAXP, поэтому разговор об именах методов не говорит нам, какую реализацию вы используете.   -  person Michael Kay    schedule 19.08.2013
comment
Майкл Кей: Извините за пропущенную информацию... Отредактировал вопрос.   -  person HarshG    schedule 20.08.2013


Ответы (2)


Поскольку Saxon отлично может найти связанную таблицу стилей с зарегистрированным настраиваемым преобразователем сущностей, поэтому всякий раз, когда происходит преобразование с XalanJ, мы используем Saxon для получения связанной таблицы стилей.

И как только мы получим связанную таблицу стилей, мы передаем входной файл и таблицу стилей в Xalan для преобразования.

person HarshG    schedule 25.05.2014

Да, я согласен с тобой. Похоже, это нарушает ожидания, заложенные в спецификации класса SAXSource.

Реализация Saxon использует предоставленный XMLReader.

В этом отношении версии JDK Xalan и Apache Xalan кажутся одинаковыми.

person Michael Kay    schedule 20.08.2013
comment
Михаил, какой теперь выход? Я также видел реализацию Saxon, и она отлично работает. - person HarshG; 22.08.2013
comment
Что ж, если в программном обеспечении есть ошибка, у вас есть три варианта: попытаться исправить ее, обойти ее или использовать альтернативное программное обеспечение. В этой ситуации я бы, конечно, предложил перейти на Saxon, но могут быть веские причины, по которым вы не можете этого сделать. - person Michael Kay; 22.08.2013