使用Saxon9 for XSLT和Apache Cocoon 2.2

时间:2014-03-18 15:11:28

标签: xslt saxon apache-cocoon dspace

我想在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可能被配置为忽略我的.x​​conf文件。

但是,似乎应该有一种方法可以使用Spring配置或.properties文件指定Saxon处理器,但我还没有找到在线执行此操作的任何说明(它们都指定.xconf配置过程)。

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:2)

回答我自己的问题 -

将Saxon与Cocoon XSLT用于DSpace

[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。注意:这可以作为构建过程的一部分完成,但这不是我当前设置的工作流程。