(限制)XSLT中的Java扩展功能支持

时间:2013-09-13 19:57:04

标签: java xml xslt saxon

long made do with the default XML libraries provided by Java(Xerces2-J和Xalan-J) - 偶尔并在需要时直接使用这些库的最新版本。看来我正在遇到这些库的一些限制 - 特别是with Xalan-J that is really no longer being maintainedwithout a release for almost 6 years ......

我需要提供一些自定义函数来在调用时从外部服务中提取信息,因此它们必须用Java实现。 (即我无法在XSLT本身内实现它们,无论是XSLT还是JavaScript函数等)我在使用Xalan-Java Extensions之前已经完成了这一点。但是,提供这似乎是允许全部或全部:

我需要能够提供对Java扩展的访问 - 但不允许任何对Java的任意调用(例如,考虑对System.exit()的嵌入式调用),理想情况下,没有XSLT作者甚至需要知道它是一个Java函数(例如,使用xmlns:java="http://xml.apache.org/xalan/java")。理想情况下,我也可以保留TransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

我可以(几乎)完全正确地使用XPath.setXPathFunctionResolver查找,但这仅适用于直接XPath调用 - 而且我没有找到一种方法来设置自定义XPath以便在XSLT中使用Xalan的。 (它还要求FEATURE_SECURE_PROCESSING不要设置XPathFactory,但我可能只能在TransformerFactory上设置它 - 忽略如果在TransformerFactory上设置,TransformerFactory还会自动在使用的XPathFactory上设置相同的标志。)

所以我决定尝试撒克逊(Saxon-HE 9.5.1-1) - 我立即注意到2个问题:

  1. 直接使用XPath时,XPath.setXPathFunctionResolver似乎在Saxon下没有任何影响。 set调用完成没有问题,但传入的resolveFunction上的XPathFunctionResolver甚至从未在Saxon下调用过。 (它只是在Xalan下“正常工作”。)Saxon是否需要一些额外的配置 - 或者这可能是HE版本的限制?

  2. 我看过http://www.saxonica.com/documentation/#!extensibility/integratedfunctions/ext-simple-J - 即使在HE版本下也提供per the author。它看起来也正是我所需要的 - 但是(就像Xalan下的XPathFunctionResolver一样),我看不出如何将它连接到XSLT处理。(这由{{3}回答在问题本身。)

0 个答案:

没有答案