[ 
https://issues.apache.org/jira/browse/FOP-2745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16633689#comment-16633689
 ] 

Pontus commented on FOP-2745:
-----------------------------

This is because of an initialization error in AWT. You can read more about it 
here: [https://bugs.openjdk.java.net/browse/JDK-8058973]

The code that I have been using is something along the lines of:

 
{code:java}
private final Object icc_colors_lock = new Object();
private boolean icc_colors_initialized = false;

private Fop getFop() {
    synchronized (this.icc_colors_lock) {
        if (this.icc_colors_initialized == false) {
    
            // We need to do this in a synchronized block before any real call.
            // This is because of: 
https://bugs.openjdk.java.net/browse/JDK-8058973
            // It will only happen if the ICC color profiles have not been 
cached before.
            // This is very rare, but might occur in test cases, or if no other 
image processing has been done yet since startup.
            // Should be rare, but this might solidify the safety of using the 
FopFactory.
            Fop unused = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, 
new ByteArrayOutputStream());
            this.icc_colors_initialized = true;
        }
    }

    return fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, out);
}{code}
 

 

> Multi-threaded initialization fails
> -----------------------------------
>
>                 Key: FOP-2745
>                 URL: https://issues.apache.org/jira/browse/FOP-2745
>             Project: FOP
>          Issue Type: Bug
>    Affects Versions: 2.2
>            Reporter: Jochen Kemnade
>            Priority: Major
>
> When multiple thread initialize FOP, some of them are likely to throw a 
> {{NullPointerException}} or {{ConcurrentModificationException}}.
> {noformat}
> java.lang.NullPointerException: null
>       at java.awt.color.ICC_Profile.intFromBigEndian(ICC_Profile.java:1782)
>       at java.awt.color.ICC_Profile.getNumComponents(ICC_Profile.java:1474)
>       at 
> org.apache.fop.pdf.PDFICCBasedColorSpace.<init>(PDFICCBasedColorSpace.java:49)
>       at 
> org.apache.fop.pdf.PDFFactory.makeICCBasedColorSpace(PDFFactory.java:1453)
>       at 
> org.apache.fop.pdf.PDFICCBasedColorSpace.setupsRGBAsDefaultRGBColorSpace(PDFICCBasedColorSpace.java:116)
>       at 
> org.apache.fop.render.pdf.PDFRenderingUtil.addsRGBColorSpace(PDFRenderingUtil.java:187)
>       at 
> org.apache.fop.render.pdf.PDFRenderingUtil.setupPDFDocument(PDFRenderingUtil.java:604)
>       at 
> org.apache.fop.render.pdf.PDFDocumentHandler.startDocument(PDFDocumentHandler.java:159)
>       at 
> org.apache.fop.render.intermediate.util.IFDocumentHandlerProxy.startDocument(IFDocumentHandlerProxy.java:105)
>       at 
> org.apache.fop.render.intermediate.IFRenderer.startRenderer(IFRenderer.java:263)
>       at org.apache.fop.area.RenderPagesModel.<init>(RenderPagesModel.java:81)
>       at 
> org.apache.fop.area.AreaTreeHandler.setupModel(AreaTreeHandler.java:135)
>       at org.apache.fop.area.AreaTreeHandler.<init>(AreaTreeHandler.java:105)
>       at 
> org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:363)
>       at org.apache.fop.fo.FOTreeBuilder.<init>(FOTreeBuilder.java:107)
>       at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:104)
>       at org.apache.fop.apps.Fop.<init>(Fop.java:78)
>       at org.apache.fop.apps.FOUserAgent.newFop(FOUserAgent.java:182)
> {noformat}
> or
> {noformat}
> java.util.ConcurrentModificationException: null
>       at java.util.Vector$Itr.checkForComodification(Vector.java:1184)
>       at java.util.Vector$Itr.next(Vector.java:1137)
>       at 
> sun.java2d.cmm.ProfileDeferralMgr.activateProfiles(ProfileDeferralMgr.java:93)
>       at java.awt.color.ICC_Profile.getData(ICC_Profile.java:1359)
>       at 
> org.apache.xmlgraphics.java2d.color.profile.ColorProfileUtil.getICCProfileDescription(ColorProfileUtil.java:46)
>       at org.apache.fop.pdf.PDFResources.addColorSpace(PDFResources.java:160)
>       at 
> org.apache.fop.pdf.PDFFactory.makeICCBasedColorSpace(PDFFactory.java:1460)
>       at 
> org.apache.fop.pdf.PDFICCBasedColorSpace.setupsRGBAsDefaultRGBColorSpace(PDFICCBasedColorSpace.java:116)
>       at 
> org.apache.fop.render.pdf.PDFRenderingUtil.addsRGBColorSpace(PDFRenderingUtil.java:187)
>       at 
> org.apache.fop.render.pdf.PDFRenderingUtil.setupPDFDocument(PDFRenderingUtil.java:604)
>       at 
> org.apache.fop.render.pdf.PDFDocumentHandler.startDocument(PDFDocumentHandler.java:159)
>       at 
> org.apache.fop.render.intermediate.util.IFDocumentHandlerProxy.startDocument(IFDocumentHandlerProxy.java:105)
>       at 
> org.apache.fop.render.intermediate.IFRenderer.startRenderer(IFRenderer.java:263)
>       at org.apache.fop.area.RenderPagesModel.<init>(RenderPagesModel.java:81)
>       at 
> org.apache.fop.area.AreaTreeHandler.setupModel(AreaTreeHandler.java:135)
>       at org.apache.fop.area.AreaTreeHandler.<init>(AreaTreeHandler.java:105)
>       at 
> org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:363)
>       at org.apache.fop.fo.FOTreeBuilder.<init>(FOTreeBuilder.java:107)
>       at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:104)
>       at org.apache.fop.apps.Fop.<init>(Fop.java:78)
>       at org.apache.fop.apps.FOUserAgent.newFop(FOUserAgent.java:182)
> {noformat}
> The underlying is https://bugs.openjdk.java.net/browse/JDK-8058973.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to