Markus Karg created FOP-3084:
--------------------------------

             Summary: Override baseURI per FOP instance
                 Key: FOP-3084
                 URL: https://issues.apache.org/jira/browse/FOP-3084
             Project: FOP
          Issue Type: Improvement
    Affects Versions: 2.7
            Reporter: Markus Karg


There is a best practice to reuse FOP Factory instances for optimal 
performance. But doing so effectively applies the same baseURI (the one used at 
factory creation) to all FOP instances, hence to all rendered XSL templates.

 

Given the case one needs to render XSL template `/a/A.xfo` referring to a 
picture file `./A.png` (hence effectively located at `/a/A.png`), and then 
needs to render XSL template `/b/B.xfo`, referring to a picture file `./B.png` 
(hence effectively found at `/b/B.png`), then there is no other solution but to 
create a new FOP Instance per template: On instance for `baseURI=.../a/` and a 
second instance for `baseURI=.../b/`. This effectively results in rather bad 
performance!

 

To support this use case while keeping optimal performance (hence: use a single 
FOP factory), there should be a way to pass the baseURI of the rendered XSL 
template to the FOP Factory, so creating a new FOP instances effectively use 
different baseURIs to resolve images. In the past, there had been a 
`FOP.setBaseURI(baseURI)` method for this. Clearly that method was a very bad 
idea, as concurrent callers ended up in a race condition. So reintroducing 
`FOP.setBaseURI(baseURI)` is *definitively not* a viable solution!

 

Proposed solutions could be to either add an optional parameter baseURI to 
`FOPFactory.newFOP(..., baseURI)`, _or_ to add a new method 
`FOP.setBaseURI(baseURI)` to FOP, _or_ to add a new method 
`FOUserAgent.setBaseURI(baseURI)`.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to