我想在Apache Cocoon(2.2)中使用Saxon(9HE)进行XSLT处理。我已按照http://wiki.apache.org/cocoon/Saxon使用Saxon的说明进行操作。这些指令描述了使用.xconf文件的过程,该文件不再是Cocoon配置的首选方法(如http://cocoon.apache.org/2.2/core-modules/core/2.2/1259_1_1.html所述),尽管该页面还指出仍然支持传统的.xconf配置。
我已尝试将core.xslt-processor
配置放在WEB-INF/cocoon.xconf
(如Saxon说明中所述),WEB-INF/cocoon/xconf/saxon-xslt.xconf
(如上面链接的Cocoon配置页中所述),在META-INF/cocoon/saxon-xslt.xconf
。在每种情况下,我都会收到错误:
org.apache.avalon.framework.service.ServiceException: Component with \
'org.apache.excalibur.xml.xslt.XSLTProcessor/saxon' is not defined in \
this service manager. (Key='AvalonServiceManager')
我已将saxon9he.jar
放入WEB-INF/lib
,并尝试删除其META-INF
目录,如Saxon说明中所述。我为每个案例重新启动了我的servlet容器(Jetty)。
我是Java业余爱好者,所以我当然可能错过了一些基本步骤。我还应该注意到我在DSpace系统的上下文中使用了Cocoon,因此DSpace可能被配置为忽略我的.xconf文件。
但是,似乎应该有一种方法可以使用Spring配置或.properties文件指定Saxon处理器,但我还没有找到在线执行此操作的任何说明(它们都指定.xconf配置过程)。
有什么想法?谢谢!
答案 0 :(得分:2)
回答我自己的问题 -
在[dspace-src]/dspace/modules/xmlui/src/main/resources/META-INF/cocoon/avalon/cocoon-core-saxon-xslt.xconf
创建一个xconf文件,并添加以下行:
<?xml version="1.0" encoding="UTF-8"?>
<components>
<component role="org.apache.excalibur.xml.xslt.XSLTProcessor/saxon"
class="org.apache.cocoon.components.xslt.TraxProcessor">
<parameter name="use-store" value="true"/>
<parameter name="transformer-factory" value="net.sf.saxon.TransformerFactoryImpl"/>
</component>
</components>
将以下行添加到[dspace-src]/dspace/modules/xmlui/pom.xml
(或使用您的Saxon版本修改):
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.5.1-4</version>
</dependency>
使用mvn package
构建DSpace。
使用ant update_webapps
(或fresh_install
或其他)更新您的网络应用。
在[dspace]/webapps/xmlui/sitemap.xmap
中,将XSLT转换器xslt-processor-role
值更改为saxon
。注意:这可以作为构建过程的一部分完成,但这不是我当前设置的工作流程。