4

我想在 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(如撒克逊说明中所述)、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.jarWEB-INF/lib并尝试META-INF按照撒克逊说明中的说明删除其目录。我已经为每种情况重新启动了我的 servlet 容器(Jetty)。

我是一名 Java 业余爱好者,所以我肯定有可能遗漏了一些基本步骤。我还应该注意,我在 DSpace 系统的上下文中使用 Cocoon,因此 DSpace 可能被配置为忽略我的 .xconf 文件。

但是,似乎应该有一种方法可以使用 Spring config 或 .properties 文件来指定 Saxon 处理器,但我没有在网上找到任何这样做的说明(它们都指定了 .xconf 配置过程)。

有什么想法吗?谢谢!

4

1 回答 1

3

回答我自己的问题——

将 Saxon 与 Cocoon XSLT 一起用于 DSpace

创建一个 xconf 文件[dspace-src]/dspace/modules/xmlui/src/main/resources/META-INF/cocoon/avalon/cocoon-core-saxon-xslt.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.

ant update_webapps使用(fresh_install或其他)更新您的网络应用程序。

[dspace]/webapps/xmlui/sitemap.xmap中,将 XSLT 转换xslt-processor-role器值更改为saxon。注意:这可以作为构建过程的一部分来完成,但这不是我当前的工作流程设置方式。

于 2014-03-24T14:34:15.123 回答