如何使用Java对象作为参数的XML transformer?

如何使用Java对象作为参数的XML transformer?,java,xslt,saxon,xalan,jaxp,Java,Xslt,Saxon,Xalan,Jaxp,我正在编写一个Java应用程序,目标是进行XML转换以生成PDF文档。我使用一个XML文件作为输入,它首先被解析为一个java对象。解析后,我希望在XML转换中使用该对象,因此我将其设置为转换器的参数: TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(new StreamSour

我正在编写一个Java应用程序,目标是进行XML转换以生成PDF文档。我使用一个XML文件作为输入,它首先被解析为一个java对象。解析后,我希望在XML转换中使用该对象,因此我将其设置为转换器的参数:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(stylesheet));
transformer.setParameter("foo", javaObject);
在xsl样式表中调用该对象的实例方法,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf"
                xmlns:MyClass="foo.bar.MyClass"
>
...
<xsl:param name="foo"/>
<xsl:param name="seller" select="MyClass:myMethod($foo)"/>
该方法是公共的,没有参数。

对于Saxon:有关对外部Java对象的“自反”调用的信息,请访问

首先要注意的是,它需要Saxon PE或-EE

如果是没有参数的实例级(非静态)方法,那么最简单的方法是:

(a) 例如,声明与类名对应的命名空间

xmlns:date="java:java.util.Date"
(b) 以外部对象作为第一个参数调用方法:

date:getTime($date)

Saxon和Xalan机制虽然有许多相似之处,但并不完全相同。

谢谢您的回答。此外,我还需要设置安全处理特性(feature_secure_processing),正如我假设的那样,它不允许在样式表中调用实例方法。我已经在Saxon EE上实现了它(我必须设置另一个特性“ALLOW_EXTERNAL_FUNCTIONS”),但仍然想知道Xalan是否也可以。你能告诉我我是否可以在Xalan中使用安全功能的机制吗?对不起,我不能帮你使用Xalan。无论如何,谢谢你。我还有另一个问题:如果Saxon EE或PE集成为外部依赖项,那么应该为商业产品购买哪个许可证?该产品是一个SOAPWeb服务,它为每个请求生成pdf文件。如果有“开发”、“测试”、“生产”等多个阶段,是否需要多个许可证。?如果公司需要将库上传到nexus,怎么办?你能给我一些信息吗?我已经试过阅读许可条款,但一个字也不懂。很高兴与您讨论这个问题,但这不是StackOverflow的合适主题。请通过www.saxonica.com上的联系信息与我们联系。
date:getTime($date)