2013-08-19 7 views
0

Пожалуйста, обратите внимание на код getAssociatedStylesheet (источник Источник, String СМИ, String заголовка, строка набора символов) бросает TransformerConfigurationException в TransformerFactoryImpl класса :getAssociatedStylesheet в TransformerFactoryImpl.java бросать исключение, если DOCTYPE и PI включать таблицы стилей оба существуют в XML

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

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

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

XalanJ Версия: 2.7.1 Исходный путь файла: ЦСИ \ орг \ Apache \ Xalan \ процессор \ TransformerFactoryImpl.java

Спасибо! Harsh Gupta Adobe Systems

+0

Вы упоминаете Xalan в своем списке тегов, но это единственная подсказка, которую вы говорите о Xalan. Даже с этой информацией вам нужно сказать, какая версия Xalan (версия JDK или версия Apache?) Существует множество реализаций интерфейсов преобразования JAXP, поэтому разговоры об именах методов не говорят нам, какую реализацию вы используете. –

+0

Michael Kay: Извините за пропущенную информацию ... Изменили вопрос. – HarshG

ответ

1

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

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

0

Да, я согласен с вами. Это, по-видимому, нарушает ожидания, присущие спецификации класса SAXSource.

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

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

+0

Майкл, каков теперь выход? Я также видел саксонскую реализацию, и она отлично работает. – HarshG

+0

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