You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Frank Niedermann <fb...@thelogic.org> on 2009/03/16 14:15:43 UTC

Unable to catch transformer Exception

Hi,

I get a planned Exception while invoking transformer.transform.
Unfortunately I can not catch this Exception. This is the code:

	    try {
	        // construct fop with desired output format
	        Fop fop = fopFactory.newFop(type, foUserAgent, out);
	
	        // setup XSLT
	        TransformerFactory factory = TransformerFactory.newInstance();
	        Transformer transformer = factory.newTransformer(new
StreamSource(xsltfile));
	
	        // Set the value of a  in the stylesheet
	        transformer.setParameter("versionParam", "2.0");
	
	        // setup input for XSLT transformation
	        Source src = new DOMSource(dom);
	
	        // resulting SAX events (the generated FO) must be piped through to
FOP
	        Result res = new SAXResult(fop.getDefaultHandler());
	
	        // start XSLT transformation and FOP processing
	        transformer.transform(src, res);
	    } catch (Exception e) {
	    	System.err.println("ERROR: " + e.getMessage());
	    } finally {
	        out.close();
	    }

Altough transformer.transform() has an Exception, I never get the System.err
message. Instead I only get the ERROR-message from log4j (see below). I need
to catch the Exception in order to react with my program. Am I missing
something here?

Thanks,
  Frank

This is the console output:
2009-03-16 14:10:42,580 ERROR [org.apache.fop.render] Some XML content will
be ignored. Could not render XML
java.lang.NullPointerException: Parameter msg must not be empty
	at
org.krysalis.barcode4j.impl.code39.Code39Bean.generateBarcode(Code39Bean.java:187)
	at
org.krysalis.barcode4j.impl.ConfigurableBarcodeGenerator.generateBarcode(ConfigurableBarcodeGenerator.java:161)
	at
org.krysalis.barcode4j.fop.BarcodeXMLHandler.convertToSVG(BarcodeXMLHandler.java:222)
	at
org.krysalis.barcode4j.fop.BarcodeXMLHandler.handleXML(BarcodeXMLHandler.java:115)
	at
org.apache.fop.render.AbstractRenderer.renderXML(AbstractRenderer.java:808)
	at
org.apache.fop.render.PrintRenderer.renderDocument(PrintRenderer.java:169)
	at
org.apache.fop.render.AbstractPathOrientedRenderer.renderForeignObject(AbstractPathOrientedRenderer.java:781)
	at
org.apache.fop.render.AbstractRenderer.renderViewport(AbstractRenderer.java:747)
	at
org.apache.fop.render.AbstractPathOrientedRenderer.renderViewport(AbstractPathOrientedRenderer.java:621)
	at
org.apache.fop.render.AbstractRenderer.renderInlineArea(AbstractRenderer.java:626)
	at
org.apache.fop.render.pdf.PDFRenderer.renderInlineArea(PDFRenderer.java:1345)
	at
org.apache.fop.render.AbstractRenderer.renderLineArea(AbstractRenderer.java:601)
	at
org.apache.fop.render.pdf.PDFRenderer.renderLineArea(PDFRenderer.java:1336)
	at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:536)
	at
org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:573)
	at org.apache.fop.render.pdf.PDFRenderer.renderBlock(PDFRenderer.java:1329)
	at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:526)
	at
org.apache.fop.render.AbstractPathOrientedRenderer.renderReferenceArea(AbstractPathOrientedRenderer.java:548)
	at
org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:560)
	at org.apache.fop.render.pdf.PDFRenderer.renderBlock(PDFRenderer.java:1329)
	at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:526)
	at
org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:573)
	at org.apache.fop.render.pdf.PDFRenderer.renderBlock(PDFRenderer.java:1329)
	at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:526)
	at
org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:573)
	at org.apache.fop.render.pdf.PDFRenderer.renderBlock(PDFRenderer.java:1329)
	at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:526)
	at
org.apache.fop.render.AbstractRenderer.renderFlow(AbstractRenderer.java:424)
	at
org.apache.fop.render.AbstractPathOrientedRenderer.renderFlow(AbstractPathOrientedRenderer.java:577)
	at
org.apache.fop.render.AbstractRenderer.renderMainReference(AbstractRenderer.java:403)
	at
org.apache.fop.render.AbstractRenderer.renderBodyRegion(AbstractRenderer.java:337)
	at
org.apache.fop.render.AbstractRenderer.renderRegionViewport(AbstractRenderer.java:282)
	at
org.apache.fop.render.AbstractRenderer.renderPageAreas(AbstractRenderer.java:255)
	at
org.apache.fop.render.AbstractRenderer.renderPage(AbstractRenderer.java:229)
	at org.apache.fop.render.pdf.PDFRenderer.renderPage(PDFRenderer.java:801)
	at org.apache.fop.area.RenderPagesModel.addPage(RenderPagesModel.java:113)
	at
org.apache.fop.layoutmgr.AbstractPageSequenceLayoutManager.finishPage(AbstractPageSequenceLayoutManager.java:312)
	at
org.apache.fop.layoutmgr.PageSequenceLayoutManager.finishPage(PageSequenceLayoutManager.java:167)
	at
org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:108)
	at
org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:234)
	at
org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:123)
	at
org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:340)
	at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:169)
	at
org.apache.xml.serializer.ToXMLSAXHandler.endElement(ToXMLSAXHandler.java:261)
	at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1399)
	at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
	at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
	at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
	at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281)
	at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367)
	at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709)
	at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284)
	at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262)
	at com.ifm.Kanban.CreateOutput.createOutput(CreateOutput.java:59)
	at com.ifm.Kanban.Kanban.main(Kanban.java:217)
-- 
View this message in context: http://www.nabble.com/Unable-to-catch-transformer-Exception-tp22537909p22537909.html
Sent from the FOP - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


Re: Unable to catch transformer Exception

Posted by Jeremias Maerki <de...@jeremias-maerki.ch>.
For a client, I've once written three small helper classes that let you
intercept the Log4J messages. Here they are:

public interface ThreadLocalLogInterceptor {

    void log(String txt);
    
}

public class ThreadLocalLogSetup {

    private static ThreadLocal interceptorHolder = new ThreadLocal();
    
    public static ThreadLocalLogInterceptor installLogInterceptor(
            ThreadLocalLogInterceptor interceptor) {
        interceptorHolder.set(interceptor);
        return interceptor;
    }
    
    public static void uninstallLogInterceptor() {
        interceptorHolder.set(null);
    }
    
    public static ThreadLocalLogInterceptor getInterceptor() {
        return (ThreadLocalLogInterceptor)interceptorHolder.get();
    }
    
}

public class ThreadLocalAppender extends AppenderSkeleton {

    protected void append(LoggingEvent event) {
        ThreadLocalLogInterceptor interceptor = ThreadLocalLogSetup.getInterceptor();
        if (interceptor != null) {
            interceptor.log(event.getMessage().toString());
        }
        
    }

    public void close() {
        //nop
    }

    public boolean requiresLayout() {
        return true;
    }

}

You just implement the ThreadLocalLogInterceptor interface and install
it using ThreadLocalLogSetup.installLogInterceptor() (once per thread). 
Finally, you configure the ThreadLocalAppender in your Log4J
configuration.

Maybe that helps. Of course, you only get the plain log messages. You
still have to interpret them. It's just a hack but if you can't use the
new event system....

On 17.03.2009 06:44:37 Frank Niedermann wrote:
> 
> Hi Andreas,
> 
> 
> Andreas Delmelle-2 wrote:
> > 
> >> I get a planned Exception while invoking transformer.transform.
> >> Unfortunately I can not catch this Exception.
> > 
> > For FOP 0.95, I don't think it is possible to 'catch' the Exception,  
> > since it is never thrown. The Barcode4J extension causes an Exception,  
> > but FOP internally catches this and recovers. Unless you feel like  
> > working with a hacked FOP-version, or you can switch to FOP Trunk, I'm  
> > afraid you're stuck... :-/
> > 
> 
> I'm not allowed to use a hacked FOP-version as this is planned for a
> production environment. If I won't receive an exception, is it possible
> some how to query the log result (ERROR) and react on that?
> 
> Thanks,
>   Frank
> -- 
> View this message in context: http://www.nabble.com/Unable-to-catch-transformer-Exception-tp22537909p22552940.html
> Sent from the FOP - Users mailing list archive at Nabble.com.
> 



Jeremias Maerki


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


Re: Unable to catch transformer Exception

Posted by Frank Niedermann <fb...@thelogic.org>.
Hi Andreas,


Andreas Delmelle-2 wrote:
> 
>> I get a planned Exception while invoking transformer.transform.
>> Unfortunately I can not catch this Exception.
> 
> For FOP 0.95, I don't think it is possible to 'catch' the Exception,  
> since it is never thrown. The Barcode4J extension causes an Exception,  
> but FOP internally catches this and recovers. Unless you feel like  
> working with a hacked FOP-version, or you can switch to FOP Trunk, I'm  
> afraid you're stuck... :-/
> 

I'm not allowed to use a hacked FOP-version as this is planned for a
production environment. If I won't receive an exception, is it possible
some how to query the log result (ERROR) and react on that?

Thanks,
  Frank
-- 
View this message in context: http://www.nabble.com/Unable-to-catch-transformer-Exception-tp22537909p22552940.html
Sent from the FOP - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


Re: Unable to catch transformer Exception

Posted by Andreas Delmelle <an...@telenet.be>.
On 16 Mar 2009, at 14:16, Frank Niedermann wrote:

Hi

> I get a planned Exception while invoking transformer.transform.
> Unfortunately I can not catch this Exception. This is the code:
> <snip />
> Altough transformer.transform() has an Exception, I never get the  
> System.err
> message. Instead I only get the ERROR-message from log4j (see  
> below). I need
> to catch the Exception in order to react with my program. Am I missing
> something here?
<snip />
> This is the console output:
> 2009-03-16 14:10:42,580 ERROR [org.apache.fop.render] Some XML  
> content will
> be ignored. Could not render XML
> java.lang.NullPointerException: Parameter msg must not be empty
> 	at

The stack trace indicates that the error is non-fatal, so no matter  
what, it will not trigger the fatalError() handler which would  
normally cause the Exception to be thrown.

As of FOP Trunk, reacting on that error should be possible (if it is  
properly routed through the event-handling framework; see: http://xmlgraphics.apache.org/fop/trunk/events.html) 
.
For FOP 0.95, I don't think it is possible to 'catch' the Exception,  
since it is never thrown. The Barcode4J extension causes an Exception,  
but FOP internally catches this and recovers. Unless you feel like  
working with a hacked FOP-version, or you can switch to FOP Trunk, I'm  
afraid you're stuck... :-/


Regards

Andreas

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org