Glenn,

Please bear in mind that our TrAX support for XSLTC is not complete
or stable - even though there is a preliminary implementation in
Xalan 2.1. You can nothing but expect to get into problems, like the
one you described, unless you wait until our TrAX support is complete
before you attempt to use it.

Morten


Glenn Nielsen wrote:
> 
> There must be more code than what you are showing below.
> Using the translet should be as simple as:
> 
>     /**
>      * Transform XML Data using an XSL stylesheet and send it out
>      * as the HTTP Servlet Response.
>      *
>      * @param Templates xslt XSL Translation template
>      * @param StringWriter data XML data
>      * @param PrintWriter out response output
>      */
>     private void transformResponse(Templates xslt, StringReader data,
>         Writer out) throws ServletException {
>         StreamSource source = new StreamSource(data);
>         StreamResult result = new StreamResult(out);
>         try {
>             Transformer transformer = xslt.newTransformer();
>             transformer.transform(source,result);
>         } catch(TransformerConfigurationException e) {
>             throw new ServletException("XSL Transformation" +
>                             " location: " + e.getLocationAsString() +
>                             " failure: " + e.getMessageAndLocation());
>         } catch(Exception e) {
>             throw new ServletException("XSL Transformation failed",e);
>         }
>     }
> 
> Where the templates passed in is either for a normal Templates object
> or a Templates object for a Translet.
> 
> The code snippet I showed was the way AbstractTranslet implements the
> reader.parser() method.
> 
> Regards,
> 
> Glenn
> 
> Tom Amiro wrote:
> >
> > Hi Glenn,
> >
> > I have been using XSLTC from a JSP with our native API, and
> > not TrAX. I've been able to use a string as the XML input as follows:
> >
> >                 StringReader inputsr = new StringReader(xmlinput);
> >                 InputSource input = new InputSource(inputsr);
> >                 reader.parse(input);
> >
> > Tom
> >
> > Glenn Nielsen wrote:
> >
> > > I've traced down the problem some more.
> > >
> > > AbstractTranslet() is throwing a NullPointerException when it tries
> > > to do reader.parse("file:"+(new File(xmlDocName).getAbsolutePath()));
> > > My Source is not a file, it is created from a StringReader.
> > >
> > > So it looks like I am in a catch 22.  AbstractTranslet() fails on a non
> > > file Source in the xsltc 2.1 release and xsltc 2.2 isn't ready yet.
> > >
> > > BTW, I created an Ant task called <translet> which uses XSLTC to
> > > recursively compile stylesheets and add any directory paths as
> > > package parts to the generated classes.  Think the Ant developers
> > > would be interested? Or perhaps including it with Xalan?
> > >
> > > Regards,
> > >
> > > Glenn
> > >
> > > Morten Jorgensen wrote:
> > > >
> > > > Glenn,
> > > >
> > > > We are just after finishing an initial implementation of the entire TrAX
> > > API
> > > > for XSLTC. We decided to separate the TrAX implementation and the native
> > > > XSLTC APIs, and this is why the AbstractTranslet class no longer
> > > implements
> > > > the Transformer interface. All TrAX code is located in the
> > > >
> > > >         org.apache.xalan.xsltc.trax
> > > >
> > > > package. This is becuase many of our current users choose to use XSLTC's
> > > > native API, and we don't want these to have to include all the extra code
> > > > for TrAX in their applets/servlets/JSPs what have you.
> > > >
> > > > But please not that we are in the phase of testing/bugfixing our TrAX
> > > code,
> > > > and that it is not yet stable code.
> > > >
> > > > I will look into the System.exit() call and have it removed from the code.
> > >
> > > >
> > > > Thank you for your interest in XSLTC,
> > > >
> > > > Morten J�rgensen
> > > >
> > > > Glenn Nielsen wrote:
> > > > >
> > > > > I am implementing precompiled XSLTC Translets in a Servlet using Xalan
> > > 2.1.
> > > > >
> > > > > I created my own class with implements the Templates interface so that
> > > > > the Servlet can instantiate the stylesheet from file if it exists or
> > > > > instantiate it from a precompile Translet class.  i.e. If the xsl file
> > > exists
> > > > > it is used, if not the translet is used.
> > > > >
> > > > > Here is the code for my Templates implementation:
> > > > >
> > > > >
> > > ----------------------------------------------------------------------------
> > >
> > > > > package net.more.servlets.soapschema;
> > > > >
> > > > > import javax.xml.transform.Templates;
> > > > > import javax.xml.transform.Transformer;
> > > > > import javax.xml.transform.TransformerConfigurationException;
> > > > > import javax.xml.transform.sax.SAXTransformerFactory;
> > > > >
> > > > > import org.apache.xalan.xsltc.runtime.AbstractTranslet;
> > > > > import java.util.Properties;
> > > > >
> > > > > /**
> > > > >  * Implementation of a JAXP1.1 Templates object for Translets.
> > > > >  */
> > > > > public class SchemaTransletTemplate implements Templates {
> > > > >     private Class _translet = null;
> > > > >
> > > > >     public SchemaTransletTemplate(Class clazz) {
> > > > >       _translet = clazz;
> > > > >     }
> > > > >
> > > > >     public Properties getOutputProperties() { /*TBD*/ return null; }
> > > > >
> > > > >     public Transformer newTransformer() throws
> > > > >       TransformerConfigurationException
> > > > >     {
> > > > >       if (_translet == null) {
> > > > >         throw new TransformerConfigurationException(
> > > > >              "Error: Null Translet");
> > > > >       }
> > > > >       Transformer trans = null;
> > > > >       try {
> > > > >           trans = (Transformer)_translet.newInstance();
> > > > >       } catch(Exception e) {
> > > > >         throw new TransformerConfigurationException(
> > > > >              "Error: Could not instantiate Translet: " + e.toString());
> > > > >       }
> > > > >       return trans;
> > > > >     }
> > > > > }
> > > > >
> > > ----------------------------------------------------------------------------
> > >
> > > > >
> > > > > Here is the code which does the transformation using either a template
> > > > > instantiated from an XSL file or from a precompiled translet.
> > > > >
> > > > >
> > > ----------------------------------------------------------------------------
> > >
> > > > >     private void transformResponse(Templates xslt, StringReader data,
> > > > >         Writer out) throws ServletException {
> > > > >         StreamSource source = new StreamSource(data);
> > > > >         StreamResult result = new StreamResult(out);
> > > > >         try {
> > > > >             Transformer transformer = xslt.newTransformer();
> > > > >             transformer.transform(source,result);
> > > > >         } catch(TransformerConfigurationException e) {
> > > > >             throw new ServletException("XSL Transformation" +
> > > > >                             " location: " + e.getLocationAsString() +
> > > > >                             " failure: " + e.getMessageAndLocation());
> > > > >         } catch(Exception e) {
> > > > >             throw new ServletException("XSL Transformation failed",e);
> > > > >         }
> > > > >     }
> > > > >
> > > ----------------------------------------------------------------------------
> > >
> > > > >
> > > > > The above works for a template created at runtime from an XSL stylesheet
> > >
> > > > > but fails for the Translet.  What is really annoying is that when the
> > > > > Translet fails it calls System.exit().  This is not considerate
> > > behaviour
> > > > > when the Translet is running inside a servlet container.
> > > > >
> > > > > Fortunately I run Tomcat 4 with the Java SecurityManager enabled so that
> > >
> > > > > the attempt to use System.exit() caused a SecurityException instead of
> > > > > terminating Tomcat.
> > > > >
> > > > > I still don't know whether there is some failure causing the Translet to
> > >
> > > > > call System.exit() or it just does it.
> > > > >
> > > > > I have tried to use this code with the 2.2D8 Xalan release, but there
> > > > > seem to be some changes to the API for Translets where they no longer
> > > > > implement the Transformer interface.
> > > > >
> > > > > Regards,
> > > > >
> > > > > Glenn
> > > > >
> > > > > ----------------------------------------------------------------------
> > > > > Glenn Nielsen             [EMAIL PROTECTED] | /* Spelin donut madder    |
> > > > > MOREnet System Programming               |  * if iz ina coment.      |
> > > > > Missouri Research and Education Network  |  */                       |
> > > > > ----------------------------------------------------------------------
> > > >
> > > > --
> > > >
> > > >
> > > > E-mail: [EMAIL PROTECTED]
> > > > Phone:  +353 1 819 9071 / x-19071
> > > > --8<-----------------------------------------------------------
> > > > C'est l'histoire d'un mec qui tombe d'un immeuble de cinquante
> > > > �tages. A chaque �tage, a fur et � mesure de sa chute, il se r�p�te
> > > > sans cesse pour se rassurer:
> > > >         Jusqu'ici tout va bien,
> > > >         jusqu'ici tout va bien,
> > > >         jusqu'ici tout va bien...
> > > > Mais l'important, c'est pas la chute, c'est l'atterrissage.
> > >
> > > --
> > > ----------------------------------------------------------------------
> > > Glenn Nielsen             [EMAIL PROTECTED] | /* Spelin donut madder    |
> > > MOREnet System Programming               |  * if iz ina coment.      |
> > > Missouri Research and Education Network  |  */                       |
> > > ----------------------------------------------------------------------
> 
> --
> ----------------------------------------------------------------------
> Glenn Nielsen             [EMAIL PROTECTED] | /* Spelin donut madder    |
> MOREnet System Programming               |  * if iz ina coment.      |
> Missouri Research and Education Network  |  */                       |
> ----------------------------------------------------------------------

Reply via email to