无法从Saxon XSLT处理器访问更新的Java对象

我正在使用Saxon XSLT处理器的开源版本“来自Saxonica的Saxon 9.0.0.2J”,并且我第一次尝试使用java可扩展性。 我遇到了一个问题,我怀疑这可能是对开源版本的限制,但是想先检查一下我是否会遗漏这些东西。

从下面的代码片段中,我的结果是$ c1的最终值不会因为调用greg而变化:setTime() – 即Saxon中的$ c1变量似乎是从底层Java对象取消的,并且没有明显的方法来访问setTime()调用更新的对象。

请注意,代码段中的所有代码都经过测试并正常工作 – 即$ c1通过getInstance()调用正确实例化,$ startdate具有正确的格式,并且$ d1已正确实例化。

思考?

 ....       

我刚试过saxonb9-0-0-8j。

对void函数的调用有时会被忽略,如下所示。

输入文件:

  2009-01-02 2009-01-02  

变换:

                      

结果:

   2010-04-14T08:23:25.341Z 2009-01-01T23:00:00Z  

所以似乎没有为date1调用setTime() ,而是为date2调用。

Saxon有一个很好的explainfunction,以可读的格式显示解析的转换:

 ...                                         ... 

如您所见,对于date1,将忽略对setTime()的调用,但是对于date2。

您是否在带有java.sql.Date作为参数的GregorianCalendar上调用setTime? 不应该失败吗? 或者是否发生了一些隐藏的转换?

如果它失败了,也许Saxon默默地忽略了这个错误?

我注意到在某些版本的Xalan中,XSLT编译器会忽略对void函数的调用。 撒克逊人可能表现得很相似。