X

An Oracle blog about BI Publisher

Desktop Testing XSL

Bit of a corner case this week but I wanted to park this as much for my reference as yours. Need to be able to test a pure XSL template against some sample data? Thats an XSL template that is going to generate HTML, Text or HTML. The Template Viewer app in the BI Publisher Desktop group does not offer that as an option. It does offer XSL-FO proccesing thou.

A few minutes digging around in the java libraries and I came up with a command line solution that is easy to set up and use.

1. Place your sample XML data and the XSL template in a directory
2. Open the lib directory where the TemplateViewer is installed. On my machine that is d:\Oracle\BIPDesktop\TemplateViewer\lib
3. Copy the xmlparserv2.jar file into the directory created in step 1.
4. Use the following command in a DOS/Shell window to process the XSL template against the XML data.

java -cp ./xmlparserv2.jar oracle.xml.parser.v2.oraxsl fileX.xml fileY.xsl > fileX.xls


The file generated will depend on your XSL. For an Excel output, you would instruct the process to generate fileX.xls in the same folder. You can then test the file with Excel, a browser or a text editor. Now you can test on the desktop until you get it right without the overhead of having to load it to the server each time.

To be completely clear, this approach is for pure XSL templates that
are designed to generate text, html or xml. Its not for the XSLFO
templates that might be used at runtime to generate PDF, PPT, etc. For
those you should use the Template Viewer application, it supports the
XSLFO templates but not the pure XSL templates.

If your template still falls into the pure XSL template category.
This will be down to you using some BIP functionality in the templates.
To get it to work you'll need to add in the Publisher libraries that
contain the function e.g. xdo-core.jar, i18nAPI_v3.jar, etc to the
classpath argument (-cp.)

So a new command including the required libraries might look like:

java -cp ./xmlparserv2.jar;./xdo-core.jar;./i18nAPI_v3.jar 
oracle.xml.parser.v2.oraxsl fileX.xml fileY.xsl > fileX.xls

 You will need to either move the libraries to the local directory, my assumption above or include the full path to them. More info here on setting the -cp attribute.

Join the discussion

Comments ( 2 )
  • varma Monday, November 25, 2013

    thanks a lot tim for giving us workaround to test xsl template in desktop, so that we don't need to upload it to server and test it every time we make a change.

    i have followed the same steps what you have given but i am getting below error . when i tried to search on that error in some post they say i need to have orai18n-collation.jar file in same folder. i have copied that file also to the folder we created in first step but no help.

    <?xml version = '1.0' encoding = 'UTF-8'?>

    Exception in thread "Thread-1" java.lang.NoClassDefFoundError: oracle/i18n/text/OraCollator

    at oracle.xml.xqxp.functions.builtIns.FNUtil.getCollator(FNUtil.java:355)

    at oracle.xml.xqxp.datamodel.OXMLItem.compareValue(OXMLItem.java:1080)

    at oracle.xml.xpath.XPathItem.compareValue(XPathItem.java:409)

    at oracle.xml.xpath.XPathSequence.compareGeneral(XPathSequence.java:1477)

    at oracle.xml.xpath.ComparisonExpr.evaluate(XSLExpr.java:1507)

    at oracle.xml.xpath.XPathPredicate.filter(XPathPredicate.java:264)

    at oracle.xml.xpath.XPathChildAxis.getNodeList(XPathAxis.java:580)

    at oracle.xml.xpath.XPathStep.evaluate(XPathStep.java:555)

    at oracle.xml.xpath.PathExpr.evaluate(XSLNodeSetExpr.java:859)

    at oracle.xml.xpath.XSLExprBase.streamingEvaluate(XSLExprBase.java:392)

    at oracle.xml.xpath.XPathFunctionCall.evaluate(XPathFunctionCall.java:798)

    at oracle.xml.xpath.ComparisonExpr.evaluate(XSLExpr.java:1497)

    at oracle.xml.xslt.XSLCondition.testCondition(XSLCondition.java:206)

    at oracle.xml.xslt.XSLCondition.processAction(XSLCondition.java:188)

    at oracle.xml.xslt.XSLNode.processChildren(XSLNode.java:497)

    at oracle.xml.xslt.XSLTemplate.processAction(XSLTemplate.java:205)

    at oracle.xml.xslt.XSLStylesheet.execute(XSLStylesheet.java:585)

    at oracle.xml.xslt.XSLStylesheet.execute(XSLStylesheet.java:551)

    at oracle.xml.xslt.XSLProcessor.processXSL(XSLProcessor.java:343)

    at oracle.xml.xslt.XSLProcessor.processXSL(XSLProcessor.java:193)

    at oracle.xml.xslt.XSLProcessor.processXSL(XSLProcessor.java:230)

    at oracle.xml.parser.v2.XSLProcessor.processXSL(XSLProcessor.java:122)

    at oracle.xml.async.XSLTransformer.run(XSLTransformer.java:136)

    at java.lang.Thread.run(Unknown Source)

    Caused by: java.lang.ClassNotFoundException: oracle.i18n.text.OraCollator

    at java.net.URLClassLoader$1.run(Unknown Source)

    at java.net.URLClassLoader$1.run(Unknown Source)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.net.URLClassLoader.findClass(Unknown Source)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    ... 24 more


  • tim Monday, November 25, 2013

    Hi Varma

    To be completely clear, this approach is for pure XSL templates that are designed to generate text, html or xml. Its not for the XSLFO templates that might be used at runtime to generate PDF, PPT, etc. For those you should use the Template Viewer application, it supports the XSLFO templates but not the pure XSL templates.

    If your template still falls into the pure XSL template category. This will be down to you using some BIP functionality in the templates. To get it to work you'll need to add in the Publisher libraries that contain the function e.g. xdo-core.jar, i18nAPI_v3.jar, etc to the classpath argument (-cp.)

    So a new command might look like:

    java -cp ./xmlparserv2.jar;xdo-core.jar;i18nAPI_v3.jar oracle.xml.parser.v2.oraxsl fileX.xml fileY.xsl > fileX.xls

    Tim


Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.

Recent Content