Веб-приложение Tomcat - указать класс TransformerFactoryImpl не работает - PullRequest
1 голос
/ 15 января 2012

Мне нужно использовать преобразование xsl внутри веб-приложения, и я решил использовать saxon для реализации xml.Я включил саксон (версия 9.1) в pom.xml в качестве зависимости.Но я все еще получаю эту ошибку - поставщик net.sf.saxon.TransformerFactoryImpl не найден

Я нашел этот поток, Как выбрать саксонский TransformerFactory в Java

и сделалвсе, что было рекомендовано, установка свойства, указание служебного файла с классом реализации saxon.По соображениям гибкости я не могу напрямую создать экземпляр TransformerFactoryImpl.Итак, у меня есть какой-нибудь другой выбор?

Заранее спасибо,

Редактировать: Это трассировка стека ошибки -

javax.xml.transform.TransformerFactoryConfigurationError: Provider net.sf.saxon.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:108)
com.mondeca.sesame.toolkit.repository.XMLtoRDFDataInjector.injectData(XMLtoRDFDataInjector.java:83)
com.mondeca.sesame.toolkit.repository.LocalMemoryRepositoryProvider.init(LocalMemoryRepositoryProvider.java:105)
org.datalift.modules.base.XmlConverter.applyXslTransformation(XmlConverter.java:192)
org.datalift.modules.base.XmlConverter.transformData(XmlConverter.java:204)
org.datalift.modules.base.XmlConverter.transformData(XmlConverter.java:174)
org.datalift.modules.base.XmlConverter.loadSourceData(XmlConverter.java:149)

Из чего ясночто не может найти саксонца.Но я просто не понимаю, почему!Я вижу, что он также упакован в файл jar!

Ответы [ 2 ]

1 голос
/ 02 октября 2012

Я подумал, что это будет полезно для тех, кто ищет решение. Я решил это давно, но забыл обновить здесь. По сути, tomcat попытается использовать любые реализации XML со своими собственными реализациями. Том, который я использовал (должен быть 6.0.23), не содержал новейших API-интерфейсов XML для работы с преобразованиями XSLT (мне были нужны API-интерфейсы, которые могли бы обрабатывать XSLT2). На самом деле tomcat имеет немного странное поведение: он сначала не загружает классы из classpath, но пытается загрузить классы из своих собственных библиотек (этот inturn может содержать все необходимые классы Java), что не является естественным порядком загрузки классов. Таким образом, указание в файле манифеста не поможет. С другой стороны, мы можем переопределить это, указав в качестве опции при запуске сервера. Используйте эту опцию в качестве сервера arg

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

Для получения дополнительной информации, tomcat Официальная документация по этому вопросу

0 голосов
/ 18 сентября 2012

Вы можете попробовать добавить Saxon JAR к CLASSPATH и загрузить Saxon, используя:

TransformerFactory transFactory = new net.sf.saxon.TransformerFactoryImpl();
...