Right, I have got it working!

Thanks for your help Jeremias - you were right about input.run() running in
my test (which was the old way - which was causing the error!)..  the key
was to use the ExampleObj2PDF logic in the servlet...

Maybe the example can be updated with my version?  I have not compiled this,
but I know it works...

Here is :

    public void execute(HttpServletRequest request, HttpServletResponse
response)
        throws IOException, ServletException {
        
        ByteArrayOutputStream out = null;
        
        try {
                ProjectTeam projectTeam = new ProjectTeam();
                projectTeam.setProjectName("test");
                
                Driver driver = new Driver();
                Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
                driver.setLogger(logger);
                MessageHandler.setScreenLogger(logger);
                driver.setRenderer(Driver.RENDER_PDF);
                
            out = new ByteArrayOutputStream();
            driver.setOutputStream(out);

            File xslFile = new
File("./../webapps/myappname/WEB-INF/classes/mypkgname/fop",
"projectteam2fo.xsl");

            //Setup XSLT
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new
StreamSource(xslFile));
        
            //Setup input for XSLT transformation
            Source src = incident.getSource();
        
            //Resulting SAX events (the generated FO) must be piped through
to FOP
            Result res = new SAXResult(driver.getContentHandler());

            //Start XSLT transformation and FOP processing
            transformer.transform(src, res);
            
            byte[] content = out.toByteArray();
            response.setContentType("application/pdf");
            response.setContentLength(content.length);
            response.getOutputStream().write(content);
            response.getOutputStream().flush();
            
        } catch (Exception e) {
            throw new ServletException(e);
        } finally {
                if (out!=null) {
                        out.close();
                }
        }
    }

Regards




-----Original Message-----
From: Jeremias Maerki [mailto:[EMAIL PROTECTED]
Sent: 10 March 2005 11:03
To: [EMAIL PROTECTED]
Subject: Re: FopServlet


Does the problem persist if you serialize the SAX events generated by
the Incident with an identity transformer to a file and run the XSL
transformation stand-alone from the command-line?

I don't think it's a problem but did you realize that you have two FOP
processing runs in your testGeneratePDF() method, the first started by
Transformer.transform() and the other by input.run()? Since I can't do
anything with the line numbers in the stack trace, this is something you
have to do.

On 10.03.2005 11:12:07 Ben Gill wrote:
> 
> 
> -----Original Message-----
> From: Jeremias Maerki [mailto:[EMAIL PROTECTED]
> Sent: 10 March 2005 09:37
> To: [EMAIL PROTECTED]
> Subject: Re: FopServlet
> 
> 
> 
> On 10.03.2005 08:49:26 Ben Gill wrote:
> > Hi,
> > 
> > ok I tried it again and get the same exception!!
> > 
> > Here is my code (well I have given you the equiv with project team!):
> 
> <snip/>
> 
> Hmm, you are still using the InputHandler approach which I personally
> don't consider ideal. I'd integrate the renderXML() method into the main
> execute method and use the pattern from ExampleObj2PDF 1:1. But I can't
> tell if your problem has something to do with that. Probably not.
> 
> Ok, I tried this and still get the same error... I have created a Junit
test
> for this and here is my code, based upon the ExampleObj2PDF example:
> 
>  public void testGeneratePDF() throws Exception {
>               try {
>                       Incident incident = incidentsDAO.loadIncident(new
> Long(121));
>                       
>                       
>               File baseDir = new File(".");
>               File outDir = new File(baseDir, "out");
>               outDir.mkdirs();
>       
>               File xslFile = new File(baseDir,
> "../source/src/com/ocado/tracker/incidents/fop/incident2FO.xsl");
>               
>               Driver driver = new Driver();
>               Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
>               driver.setLogger(logger);
>               MessageHandler.setScreenLogger(logger);
>               driver.setRenderer(Driver.RENDER_PDF);
>               ByteArrayOutputStream out = new ByteArrayOutputStream();
>               
>               try {
>               
>               driver.setOutputStream(out);
>               
>             //Setup XSLT
>             TransformerFactory factory = TransformerFactory.newInstance();
>             Transformer transformer = factory.newTransformer(new
> StreamSource(xslFile));
>         
>             //Setup input for XSLT transformation
>             Source src = incident.getSource();
>         
>             //Resulting SAX events (the generated FO) must be piped
through
> to FOP
>             Result res = new SAXResult(driver.getContentHandler());
> 
>             //Start XSLT transformation and FOP processing
>             transformer.transform(src, res);
>               } finally {
>                       if (out!=null) {
>                               out.close();
>                       }
>               }
>               
>               SAXSource xmlSource = new SAXSource(new
> IncidentsXMLReader(), new IncidentsInputSource(incident));
>               
>               SAXSource xslSource = new SAXSource(
>                               new InputSource(new
> FileInputStream(xslFile)));
>               
>               TraxInputHandler input =
>                   new TraxInputHandler(xmlSource.getInputSource(),
>                                        xslSource.getInputSource());
>       
>               input.run(driver);
> 
>               byte[] content = out.toByteArray();
>               log.debug("Got content [" + content + "]");
> 
>           }
>           catch (Exception e) {
>               log.error("Error [" + e.getMessage() + "]", e);
>           }
>       }
> 
> obviously,my Incident is your ProjectTeam!!!
> 
> > 
> > and here is the stack trace:
> > 
> > 2005-03-10 07:40:21 StandardContext[/tracker]:  Mapped to servlet 'fop'
> with
> > servlet path '/fop' and path info 'null' and update=true
> > 2005-03-10 07:40:23 StandardWrapperValve[fop]: Servlet.service() for
> servlet
> > fop threw exception
> > javax.servlet.ServletException: java.net.MalformedURLException
> >     at
> > com.ocado.tracker.common.FopServlet.renderXML(FopServlet.java:150)
> >     at com.ocado.tracker.common.FopServlet.execute(FopServlet.java:116)
> 
> Ok, this doesn't say much other than there's an URL somewhere that's
> making problems.
> 
> Yes, and it could be the way this:
> 
> "../source/src/com/ocado/tracker/incidents/fop/incident2FO.xsl");
> 
> (but the it finds the xsl file and says it exists and this is the string I
> use for my working version...)
> 
> or in the XSL:
> 
> <xsl:stylesheet version="1.1" 
>       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
>       xmlns:fo="http://www.w3.org/1999/XSL/Format"; 
>       exclude-result-prefixes="fo">
> 
> and/or
> 
> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format";> 
> 
> As you noted, the error is coming from the DTD:
> 
> Caused by: java.net.MalformedURLException
>       at java.net.URL.<init>(URL.java:571)
>       at java.net.URL.<init>(URL.java:434)
>       at java.net.URL.<init>(URL.java:383)
>       at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown
> Source)
>       at
> org.apache.xerces.impl.XMLEntityManager.startDocumentEntity(Unknown
Source)
>       at
> org.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(Unknown
Source)
>       at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
>       at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
>       at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>       at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
>       at
>
org.apache.xml.dtm.ref.DTMManagerDefault.getDTM(DTMManagerDefault.java:495)
>       at
>
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
> 658)
> 
> and there is no DTD reference in the XML I pass in, so it looks like it is
> having a problem with one of the 
> two URL's in the XSL stylesheet... 
> 
> I always wonder why these core Java classes dont throw out what the URL it
> thinks is malformed!!  
> 
> Regards
> 
> 
> This message has been checked for all known viruses by the MessageLabs
Virus Control Centre.
> 
>       
> *********************************************************************
> 
> Notice:  This email is confidential and may contain copyright material of
Ocado Limited (the "Company"). Opinions and views expressed in this message
may not necessarily reflect the opinions and views of the Company.
> If you are not the intended recipient, please notify us immediately and
delete all copies of this message. Please note that it is your
responsibility to scan this message for viruses.
> 
> Company reg. no. 3875000.
> Ocado Limited
> Titan Court
> 3 Bishops Square
> Hatfield Business Park
> Hatfield
> Herts
> AL10 9NE
> 
> 
> *********************************************************************
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]



Jeremias Maerki


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


_____________________________________________________________________
This message has been checked for all known viruses by the 
MessageLabs Virus Control Centre.

This message has been checked for all known viruses by the MessageLabs Virus 
Control Centre.

        
*********************************************************************

Notice:  This email is confidential and may contain copyright material of Ocado 
Limited (the "Company"). Opinions and views expressed in this message may not 
necessarily reflect the opinions and views of the Company.
If you are not the intended recipient, please notify us immediately and delete 
all copies of this message. Please note that it is your responsibility to scan 
this message for viruses.

Company reg. no. 3875000.
Ocado Limited
Titan Court
3 Bishops Square
Hatfield Business Park
Hatfield
Herts
AL10 9NE


*********************************************************************

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to