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

Simon Steiner commented on FOP-3084:
------------------------------------

You could get the uri from a threadlocal object?

> 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
>            Priority: Major
>
> 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