On Tue, Jul 30, 2013 at 9:10 PM, Chris Snyder <[email protected]>wrote:
> Good catch - thanks. Though it turns out that the mailcap stuff is all a > red herring - they're just a stub for some code that somebody (probably in > 1996 or thereabouts) thought they'd implement someday: > > // For backward compatibility -- mailcap format files > > // This is not currently used, but may in the future when we add ability > > // to read BOTH the properties format and the mailcap format. > > Here's where the actual content-type loading takes place: > > http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/net/www/MimeTable.java#229 > > To get this working, I copied the content-types.properties file from the > Java lib directory to in the package next to the Wicket Start class, added > an entry for SVG (the stock file is quite sparse), and added the following > line in Start#main: > > System.setProperty("content.types.user.table", > Start.class.getResource("content-types.properties").getPath()); > > After doing that, it works properly - the correct mime-type is served, and > Chrome displays the image. This is hardly a good solution for a production > environment, but it will suffice for now. > > Given how much of a mess that Java code is, it seems to me that Wicket's > UrlResourceStream#getData method should be modified to not call > URLConnection#getContentType at all. The behavior for when getContentType > returns null - ask the Application [if it exists], or consult > URLConnection#getFileNameMap - looks to be better for all cases. > I agree with you. I think the code should first consult with Application#getMineType(), then urlConnection#getContentType and finally UrlConnection#getFileNameMap. urlConnection#getContentType uses #getHeaderName() and for HttpUrlConnection this would matter because the http server can set something custom. Please file a ticket. > > Thanks so much for your help. I'm just getting into Wicket programming, > and am very impressed with the helpfulness of the community. > > Thanks, > Chris > -- > Chris Snyder > Web Developer, BioLogos > 616.328.5208 x203 > biologos.org > > On Jul 30, 2013, at 14:23, Martin Grigorov <[email protected]> wrote: > > > You are right. > > It tries with getHeaderName(String) which looks in MimeTable and falls > back > > to by stream. > > I think you need to set the type in your mailcap file. > > > > > > On Tue, Jul 30, 2013 at 8:16 PM, Chris Snyder <[email protected] > >wrote: > > > >> Except that URLConnection#getContentType doesn't even use MimeTable: > >> > >> > http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/net/www/URLConnection.java?av=f#147 > >> > >> URLConnection#guessContentTypeFromStream is what it's using: > >> > >> > http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/net/URLConnection.java#URLConnection.guessContentTypeFromStream%28java.io.InputStream%29 > >> Ugh - what a mess. That seems like a very arbitrary set of filetypes to > >> test for (FlashPix?). It sees that the SVG file starts with <?xml…, so > it > >> returns application/xml - not wrong, per se - but not accurate enough. > >> > >>> On my > >>> machine > >> > System.err.println(URLConnection.getFileNameMap().getContentTypeFor("file.svg")); > >>> prints null > >> Same here. However, the following returns "application/xml" (test.svg > must > >> be an SVG file, of course): > >> > >> > System.err.println(URLConnection.guessContentTypeFromStream(getClass().getResourceAsStream("test.svg"))); > >> > >> Thanks, > >> Chris > >> -- > >> Chris Snyder > >> Web Developer, BioLogos > >> 616.328.5208 x203 > >> biologos.org > >> > >> On Jul 30, 2013, at 13:52, Martin Grigorov <[email protected]> > wrote: > >> > >>> This is nasty indeed! > >>> > >>> According to > >>> > >> > http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/net/www/MimeTable.java#MimeTable > >>> the > >>> mime types are loaded from mailcap files. > >>> See "man update-mime" > >>> > >>> > >>> On Tue, Jul 30, 2013 at 7:40 PM, Chris Snyder < > [email protected] > >>> wrote: > >>> > >>>> However, just above that (line 122) it gets the contentType from the > >>>> URLConnection, which returns "application/xml". Since > >>>> streamData.contentType is not null, it never gets to line 126. > >>>> > >>>> Thanks so much for your help! > >>>> > >>>> -Chris > >>>> -- > >>>> Chris Snyder > >>>> Web Developer, BioLogos > >>>> 616.328.5208 x203 > >>>> biologos.org > >>>> > >>>> On Jul 30, 2013, at 13:30, Martin Grigorov <[email protected]> > >> wrote: > >>>> > >>>>> Hi, > >>>>> > >>>>> According to > >>>>> > >>>> > >> > https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/core/util/resource/UrlResourceStream.java?source=cc#L126 > >>>>> if > >>>>> theere is an application then it should be used before falling back. > >>>> > >>>> > >> > >> > >
