xmlgraphics-fop-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Sargent <rsarg...@xmission.com>
Subject Re: Trouble with setting font base url which include space character
Date Wed, 18 Apr 2012 18:12:47 GMT
Stop me if you've heard this one before:  I'm an idiot.

You know how it goes.  Add a log message; fix the code.  Well of course 
one more recompile of everything and a restart of IDE /et viola/ it all 
works as expected.

My apologies to all,

rjs

Still looking forward to an API the doesn't use String for UR[IL] but 
what we have does work.
rj.

On 04/18/2012 09:54 AM, mehdi houshmand wrote:
> Oh no, I wasn't suggesting you change to the 
> FontManager.setFontBaseURL(), I was just noting that the method is 
> overridden. Could you provide a full stack trace, it might be 
> interesting to note where that exception is coming from?
>
> Also, just to expedite the process, try the same thing with trunk, see 
> what happens. From testing the method call, it should accept spaces in 
> the String, the FOURIResolver does a lot of URI correction.
>
> Mehdi
>
> On 18 April 2012 16:50, Rob Sargent <rsargent@xmission.com 
> <mailto:rsargent@xmission.com>> wrote:
>
>     And my bad too: FOP-1.0 compiled from source of official release
>     circa 2012-03-01.
>
>     You are correct in that I'm working off of FopFactory, but my
>     debugger takes me to the same setFontBaseURL(String) you list so
>     I'm not sure switching to FontManager would change anything.  (It
>     will take a moderate effort to switch this:  the "long story" is
>     that we still use older versions of fop (including to 0.20-5 I'm
>     sorry to say) so that's why I'm using reflection (and classloader
>     shenanigans to boot).
>
>     I have not looked at recent releases for any fixes in this area. 
>     I actually expected a flood of "your doing it wrong, do this
>     instead"....
>
>     rjs
>
>
>
>
>     On 04/18/2012 09:19 AM, mehdi houshmand wrote:
>>     Hi Rob,
>>
>>     Ooohh, my bad. I must have misunderstood your concern. This is an
>>     interesting little problem, the only thing I can think if is that
>>     the FopFactory overrides the FontManager.setFontBaseURL(...) method:
>>
>>              this.fontManager = new FontManager() {
>>
>>                  /** {@inheritDoc} */
>>                  @Override
>>                  public void setFontBaseURL(String fontBase) throws MalformedURLException
{
>>                      super.setFontBaseURL(getFOURIResolver().checkBaseURL(fontBase));
>>                  }
>>
>>              };
>>     But then, you're calling the "setFontBaseURL(...)" method on
>>     FopFactory and not FontManager, so I don't know, maybe someone
>>     else may have an idea. But could you give us all the usuals, what
>>     version of FOP you're using? Have you tried seeing if trunk has
>>     the same issue etc...
>>
>>     Mehdi
>>
>>     On 18 April 2012 15:39, Rob Sargent <rsargent@xmission.com
>>     <mailto:rsargent@xmission.com>> wrote:
>>
>>         Thanks Mehdi, looking forward to the API change.
>>
>>         But I'm not sending ".../acres install/...", rather (I
>>         believe) I'm sending ".../acres%20install/..." as the string
>>         URL.  Is that not the correct format?
>>
>>         rjs
>>
>>
>>         On 04/18/2012 01:43 AM, mehdi houshmand wrote:
>>>         Hi Rob,
>>>
>>>         Firstly, we are working to change how fop handles file
>>>         access and I/O in general. I should note, that we're
>>>         unifying all resource acquisition to resolving URIs, not
>>>         URLs. The two concepts differ, and it's non-trivial.
>>>
>>>         See http://wiki.apache.org/xmlgraphics-fop/URIResolution and
>>>         http://wiki.apache.org/xmlgraphics-fop/FopFactoryConfiguration.
>>>
>>>         Secondly, there are some misnomers in the names of these
>>>         resource finders. The issue you're seeing is that
>>>         "/d1/rework/acres install/ac47/eclipe/plugins" while it is a
>>>         valid URL, it is not a valid URI. The
>>>         FopFactory.setFontBaseURL(...) method delegates to the
>>>         FOURIResolver to validate the String given and parses it as
>>>         a URL NOT a URL. That is why you're seeing this problem.
>>>
>>>         Mehdi
>>>
>>>         On 17 April 2012 23:58, Rob Sargent <rsargent@xmission.com
>>>         <mailto:rsargent@xmission.com>> wrote:
>>>
>>>             Seems to me FopFactory.setFontBaseURL(String s) is broken?
>>>
>>>             Forgive the reflection calls (long story).
>>>
>>>                 File fontsdir = new File(bundlePath + fopHome +
>>>             "/fonts");
>>>
>>>                 URL fontsURL = fontsdir.toURI().toURL();
>>>                 setFontBaseURLMethod.invoke(fopFactory,
>>>             fontsURL.toExternalForm());
>>>
>>>             works fine when the directory is, shall we say, normal,
>>>             but if the directory has a space the method appears to
>>>             eat the "%20".
>>>
>>>             Caused by: java.net.MalformedURLException: Illegal
>>>             character in path at index 23: file:///d1/rework/acres
>>>             install/ac47/eclipse/plugins/com.amirsys.console_4.6.0/fop/fop100/fop/fonts/
>>>
>>>
>>>             bundlePath=/d1/rework/acres install/ac47/eclipe/plugins
>>>             fopHome=com.amirsys.console_4.6.0/fop/fop100/fop
>>>
>>>             I've written a test jig to see what File.toURI().toURL()
>>>             does:
>>>
>>>                 import java.net.URL;
>>>                 import java.io.File;
>>>
>>>                 public class FileURL {
>>>
>>>                     public static void main(String[] args) {
>>>                         try {
>>>                             File f = new File(args[0]);
>>>                             URL furl = f.toURI().toURL();
>>>                             System.out.println(furl.toString());
>>>                             System.out.println(furl.toExternalForm());
>>>                         }
>>>                         catch (java.net.MalformedURLException mue) {
>>>                             mue.printStackTrace();
>>>                         }
>>>                     }
>>>                 }
>>>
>>>             And that reports what I expected, an encoded path:
>>>
>>>                 java -cp . FileURL /d1/rework/acres\ install/ac47
>>>                 file:/d1/rework/acres%20install/ac47/
>>>                 file:/d1/rework/acres%20install/ac47/
>>>
>>>
>>>             I hope someone has a better plan.
>>>
>>>             I do think that the FOP api should be changed to take a
>>>             URL rather than a string, but that's for another day.
>>>
>>>
>>>
>>
>>
>
>


Mime
View raw message