Установите javax.xml.transform.TransformerFactory в Wildfly 8.1.

Мне нужны две реализации TransformerFactory для моего программного обеспечения. Я должен обработать xml и xls/fo (объект форматирования) для PDF-файлов. Для более новых версий нашего программного обеспечения, где я хочу использовать определяемые пользователем функции xsl, я использую net.sf.saxon.TransformerFactoryImpl, на который есть прямая ссылка в исходном коде. Из-за того, что старые данные в базе данных нуждаются в обработке старых с помощью org.apache.xalan.processor.TransformerFactoryImpl, saxon выдаст ошибку и не отобразит PDF.

При использовании Tomcat я просто установил «-Djavax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl» в качестве аргумента vm, и это не было проблемой.

При использовании настройки Wildfly аргумент vm приводит к тому, что wildfly генерирует следующее исключение: «Исключение в потоке «основной» javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl не найден»

Xalan.jar содержится в моем военном файле. Версия xalan для jboss является частью дистрибутива Wildlfy.

Почему ни один из них не найден? Почему Wildfly даже пытается загрузить фабрику при запуске службы wildfly? Как настроить Wildfly для поиска фабрики трансформаторов xalan во время запуска? Запись записи модуля в standalone.xml или domain.xml не помогает.

Я знаю, что в Wildfly есть ошибка, из-за которой перенаправление фабрики трансформаторов указывает не на фабрику трансформаторов Wildfly, а на java по умолчанию. Я думаю, что это не должно иметь никакого влияния на мою проблему, потому что я пытаюсь установить другое значение по умолчанию.

Любая помощь?


person Michael Amthor    schedule 10.09.2014    source источник


Ответы (1)


У меня была аналогичная проблема с JBoss 7, и, похоже, такая же проблема с Wildfly. Просто догадка: JBoss загружает свои файлы конфигурации при запуске и сохраняет их при завершении работы (не уверен, почему, но если вы внесете какие-либо изменения в файл standalone.xml во время работы JBoss, вы увидите, что при завершении работы они перезаписываются). Я предполагаю, что JBoss нужно использовать преобразователь для сохранения своих файлов конфигурации (standalone.xml), поэтому он загружает преобразователь при запуске (даже до того, как конфигурация модулей была проанализирована, чтобы увидеть, что есть библиотека xalan, которую нужно добавить в classpath и до того, как был развернут военный файл). Но, как я уже сказал, это всего лишь предположение… Я могу ошибаться.

Чтобы избавиться от ошибки запуска, вам нужно либо поместить библиотеку xalan в ваш $JAVA_HOME/jre/lib/ext (таким образом вы сделаете ее доступной для всех приложений), либо вы можете отказаться от использования системного свойства -Djavax. xml.transform.TransformerFactory и добавьте следующее свойство в файл standalone.xml.

 <system-properties>
    <property name="javax.xml.transform.TransformerFactory" value="org.apache.xalan.xsltc.trax.TransformerFactoryImpl"/>
</system-properties>
person semi    schedule 12.09.2014
comment
Большое Вам спасибо. Я дам ему попробовать. - person Michael Amthor; 23.09.2014
comment
Это решение определенно не будет работать из-за того, как WildFly и система модулей JBoss обрабатывают JAXP. Для поиска провайдера следует использовать загрузчик класса контекста потока; по какой-то причине его нет или он работает некорректно. - person David M. Lloyd; 05.01.2016