IBACK Posted October 10, 2014 Share Posted October 10, 2014 Hi everybody, I try to implement and to show the current date in my stylesheet, but I obtain this error message during the compilation : ERROR: 'Impossible to compile the stylesheet' FATAL ERROR: 'Error during the verification of type of expression 'funcall(current-date, [])'.' :Error during the verification of type of expression 'funcall(current-date, [])'. This is an extract of my stylesheet : <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="html" indent="yes" /> ... <xsl:template name="getMonth"> <xsl:param name="monthNbr" /> <xsl:choose> <xsl:when test="$monthNbr=1"> Janvier </xsl:when> <xsl:when test="$monthNbr=2"> Février </xsl:when> <xsl:when test="$monthNbr=3"> Mars </xsl:when> <xsl:when test="$monthNbr=4"> Avril </xsl:when> <xsl:when test="$monthNbr=5"> Mai </xsl:when> <xsl:when test="$monthNbr=6"> Juin </xsl:when> <xsl:when test="$monthNbr=7"> Juillet </xsl:when> <xsl:when test="$monthNbr=8"> Août </xsl:when> <xsl:when test="$monthNbr=9"> Septembre </xsl:when> <xsl:when test="$monthNbr=10"> Octobre </xsl:when> <xsl:when test="$monthNbr=11"> Novembre </xsl:when> <xsl:when test="$monthNbr=12"> Décembre </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="date_jour"> <xsl:variable name="currentDate" select="current-date()" /> <xsl:variable name="year" select="year-from-date($currentDate)" /> <xsl:variable name="month"> <xsl:call-template name="getMonth"> <xsl:with-param name="monthNbr" select="month-from-date($currentDate)" /> </xsl:call-template> </xsl:variable> <xsl:variable name="day" select="day-from-date($currentDate)" /> <xsl:value-of select="format-number($day,'00')" /> <xsl:text> </xsl:text> <xsl:value-of select="$month" /> <xsl:text> </xsl:text> <xsl:value-of select="$year" /> </xsl:template>... </xsl:stylesheet> Any ideas ? Thank you in advance Fabrice Link to comment Share on other sites More sharing options...
Martin Honnen Posted October 10, 2014 Share Posted October 10, 2014 Which XSLT 2.0 processor do you use? Don't you get some more detailed information like the line number in your code where the error occurs? Link to comment Share on other sites More sharing options...
IBACK Posted October 10, 2014 Author Share Posted October 10, 2014 "Which XSLT 2.0 processor do you use ?" In fact, none. "Don't you get some more detailed information like the line number in your code where the error occurs?" This is my code : package test.xsl;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;public class XMLwithXSLT { public static void main(String[] args) throws Exception { Source source = new StreamSource("src/test/xsl/data.xml"); Source xsl = new StreamSource("src/test/xsl/_dt.xsl"); Result result = new StreamResult(System.out); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(xsl); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); }} This is the complete error : ERROR: 'Impossible de compiler la feuille de style' FATAL ERROR: 'Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.' :Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'. Exception in thread "main" javax.xml.transform.TransformerConfigurationException: Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:992) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:766) at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18) Caused by: Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'. at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheckStandard(FunctionCall.java:437) at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheck(FunctionCall.java:346) at com.sun.org.apache.xalan.internal.xsltc.compiler.Variable.typeCheck(Variable.java:101) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.LiteralElement.typeCheck(LiteralElement.java:201) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.typeCheck(Stylesheet.java:657) at com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.createAST(Parser.java:411) at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:427) at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:512) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:951) ... 2 more --------- Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'. at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheckStandard(FunctionCall.java:437) at com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall.typeCheck(FunctionCall.java:346) at com.sun.org.apache.xalan.internal.xsltc.compiler.Variable.typeCheck(Variable.java:101) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.LiteralElement.typeCheck(LiteralElement.java:201) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:295) at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:493) at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.typeCheck(Stylesheet.java:657) at com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.createAST(Parser.java:411) at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:427) at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:512) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:951) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:766) at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18) Link to comment Share on other sites More sharing options...
Martin Honnen Posted October 10, 2014 Share Posted October 10, 2014 If you want to use XSLT and XPath 2.0 with Java then the built-in XSLT processor Xalan does not work as it is an XSLT 1.0 processor, you will need to switch to Saxon 9 from http://saxon.sourceforge.net/ (or if you use IBM Websphere you can check with them, I think they provide XSLT 2.0 as a package as well). Link to comment Share on other sites More sharing options...
IBACK Posted October 10, 2014 Author Share Posted October 10, 2014 My error message is it linked with the fact that built-in XSLT processor Xalan does not work as it is an XSLT 1.0 processor ? Link to comment Share on other sites More sharing options...
Martin Honnen Posted October 10, 2014 Share Posted October 10, 2014 Yes, I think so, the current-date() function was introduced in XSLT/XPath 2.0 which is not supported by Xalan as it is an XSLT 1.0 processor. Link to comment Share on other sites More sharing options...
IBACK Posted October 10, 2014 Author Share Posted October 10, 2014 My application is a commercial JavaFX application. I prefer to choice a free processor.. SAXON requires a particular license... Do you know (for Java) a free processor which supports XSLT / XPath 2.0 ? Link to comment Share on other sites More sharing options...
Martin Honnen Posted October 10, 2014 Share Posted October 10, 2014 I only know Saxon 9 which comes in various editions, the open source Home Edition HE should suffice for your needs to use XSLT and XPath 2.0, at least in terms of support of the specification. There are also the commercial Personal Edition PE and the Enterprise Edition EE for which one has to buy a license. I don't know of any other Java XSLT 2.0 implementation, other than that IBM Websphere package I already mentioned. Some things you want to do like getting the current date could be done with Xalan by making use of parameters or by making use of extension functions calling into Java. Link to comment Share on other sites More sharing options...
IBACK Posted October 10, 2014 Author Share Posted October 10, 2014 ok i modified my stylesheet : <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/format" xmlns:cal="xalan//java.util.GregorianCalendar" version="2.0"> <xsl:output method="html" indent="yes" />... <xsl:template name="getMonth"> <xsl:param name="monthNbr" /> <xsl:choose> <xsl:when test="$monthNbr=1"> Janvier </xsl:when> <xsl:when test="$monthNbr=2"> Février </xsl:when> <xsl:when test="$monthNbr=3"> Mars </xsl:when> <xsl:when test="$monthNbr=4"> Avril </xsl:when> <xsl:when test="$monthNbr=5"> Mai </xsl:when> <xsl:when test="$monthNbr=6"> Juin </xsl:when> <xsl:when test="$monthNbr=7"> Juillet </xsl:when> <xsl:when test="$monthNbr=8"> Août </xsl:when> <xsl:when test="$monthNbr=9"> Septembre </xsl:when> <xsl:when test="$monthNbr=10"> Octobre </xsl:when> <xsl:when test="$monthNbr=11"> Novembre </xsl:when> <xsl:when test="$monthNbr=12"> Décembre </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="getCurrentDate"> <xsl:variable name="calendar" select="cal:new()" /> <xsl:variable name="day" select="cal:get($calendar,5)" /> <xsl:variable name="month"> <xsl:call-template name="getMonth"> <xsl:with-param name="monthNbr" select="cal:get($calendar,2) + 1" /> </xsl:call-template> </xsl:variable> <xsl:variable name="year" select="cal:get($calendar,1)" /> <xsl:value-of select="$day" /> <xsl:text>/</xsl:text> <xsl:value-of select="$month" /> <xsl:text>/</xsl:text> <xsl:value-of select="$year" /> </xsl:template> <xsl:variable name="currentDate"> <xsl:call-template name="getCurrentDate"></xsl:call-template> </xsl:variable> </div> I obtain a new error message : Exception in thread "main" java.lang.VerifyError: (class: _dt, method: template$dot$1 signature: (Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;I)V) Accessing value from uninitialized register 5 at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2664) at java.lang.Class.getConstructor0(Class.java:3068) at java.lang.Class.newInstance(Class.java:407) at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getTransletInstance(TemplatesImpl.java:387) at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer(TemplatesImpl.java:418) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:767) at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18) Any ideas ? Link to comment Share on other sites More sharing options...
peter12 Posted December 29, 2014 Share Posted December 29, 2014 try it with the function format-date(): http://www.data2type.de/en/xml-xslt-xslfo/xslt/xslt-xpath-function-reference/alphabetical-xslt-and-xpath-reference/format-date/ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now