Hi Jim Thanks for diving into this. Fell free to create a JIRA ticket with a patch.
Are the other tests that fail on OpenJDK on your system? On Fri, Jun 10, 2011 at 9:14 PM, Jim Talbut <jtal...@spudsoft.co.uk> wrote: > I think both the test in camel-jetty and the code in camel-http are wrong. > > In camel-http (DefaultHttpBinding) we have: > protected void populateAttachments(HttpServletRequest request, > HttpMessage message) { > // check if there is multipart files, if so will put it into > DataHandler > Enumeration names = request.getAttributeNames(); > while (names.hasMoreElements()) { > String name = (String) names.nextElement(); > Object object = request.getAttribute(name); > LOG.trace("HTTP attachment {} = {}", name, object); > if (object instanceof File) { > String fileName = request.getParameter(name); > message.addAttachment(fileName, new DataHandler(new > CamelFileDataSource((File)object, fileName))); > } > } > } > > That creates the DataHandler for the uploaded file without specifying the > content-type. > So different implementations of DataHandler may well have different defaults > (hence the difference between Sun and OpenJDK). > This is wrong, but I can't see how to get the correct content-type for the > uploaded file in order to add it to the constructor args. > > The test is explicitly testing that the DataHandler has the same defaults as > the Sun JDK, which is not helpful. > It ought to test that the content-type is application/octet-stream, but that > would require changing camel-http. > > There are two options: > 1. Fix camel-http so it does set the content-type correctly (though I > couldn't work out where to get it from). > We'd then have to fix the test to check for the correct content-type. > 2. Remove the assertion from the test. > > Jim > > > On 10/06/2011 07:20, Jim Talbut wrote: >> >> On 09/06/2011 19:54, Jim Talbut wrote: >>> >>> On 09/06/2011 15:32, James Talbut wrote: >>>> >>>> On Thu, Jun 09, 2011 at 10:13:00PM +0800, Willem Jiang wrote: >>>>> >>>>> Maybe it relates to the openjdk. >>>>> Can you try the latest SUN/Oracle JDK 1.6 to run the test ? >>>> >>>> That's possible, I should be able to try later today. >>>> >>>> I've also tried on Windows 7 and that works (breaks in camel-ftp, but >>>> that's another matter). >>>> >>>> Jim >>> >>> That was it, how interesting. >>> >>> I downloaded the Sun JDK, set JAVA_HOME to point to it and ran maven and >>> it went correctly. >>> >>> Should Camel support alternative JVMs? >>> >>> Jim >> >> Curiouser and curiouser... >> >> I'm starting to think that it's actually the OpenJDK that's right and the >> test is wrong. >> The test has: >> Part[] parts = { >> new StringPart("comment", "A binary file of some kind"), >> new FilePart(file.getName(), file) >> }; >> There is nothing there to specify the content-type and there seems to be >> an assumption that it's binary, not text (though it is actually text). >> >> The source for FilePart has: >> public static final String DEFAULT_CONTENT_TYPE = >> "application/octet-stream"; >> and that is used unless the content type is specified in the constructor >> (which it isn't). >> >> So the string part should have a content type of "text/plain" and the file >> part should have a content type of "application/octet-stream". >> >> The test has: >> DataHandler data = in.getAttachment("NOTICE.txt"); >> assertNotNull("Should get the DataHandle >> NOTICE.txt", data); >> assertEquals("Get a wrong content type", >> "text/plain", data.getContentType()); >> Verifying that the file part is "text/plain". >> >> The on-the-wire data with OpenJDK is: >> >> --lDIZtpp0tBIGfhQWzHIZ5kV7QpREJSj-Cmp3Uf8C >> Content-Disposition: form-data; name="comment" >> Content-Type: text/plain; charset=US-ASCII >> Content-Transfer-Encoding: 8bit >> >> A binary file of some kind >> --lDIZtpp0tBIGfhQWzHIZ5kV7QpREJSj-Cmp3Uf8C >> Content-Disposition: form-data; name="NOTICE.txt"; filename="NOTICE.txt" >> Content-Type: application/octet-stream; charset=ISO-8859-1 >> Content-Transfer-Encoding: binary >> >> >> ========================================================================= >> == NOTICE file corresponding to the section 4 d >> of == >> == the Apache License, Version >> 2.0, == >> == in this case for the Apache Camel >> distribution. == >> >> ========================================================================= >> >> This product includes software developed by >> The Apache Software Foundation (http://www.apache.org/). >> >> Please read the different LICENSE files present in the licenses >> directory of >> this distribution. >> >> --lDIZtpp0tBIGfhQWzHIZ5kV7QpREJSj-Cmp3Uf8C-- >> >> The on-the-wire data with Sun JDK is: >> >> --qhLzs_ECq12ft9Tp3B1ayD-jjjzshV >> Content-Disposition: form-data; name="comment" >> Content-Type: text/plain; charset=US-ASCII >> Content-Transfer-Encoding: 8bit >> >> A binary file of some kind >> --qhLzs_ECq12ft9Tp3B1ayD-jjjzshV >> Content-Disposition: form-data; name="NOTICE.txt"; filename="NOTICE.txt" >> Content-Type: application/octet-stream; charset=ISO-8859-1 >> Content-Transfer-Encoding: binary >> >> >> ========================================================================= >> == NOTICE file corresponding to the section 4 d >> of == >> == the Apache License, Version >> 2.0, == >> == in this case for the Apache Camel >> distribution. == >> >> ========================================================================= >> >> This product includes software developed by >> The Apache Software Foundation (http://www.apache.org/). >> >> Please read the different LICENSE files present in the licenses >> directory of >> this distribution. >> >> --qhLzs_ECq12ft9Tp3B1ayD-jjjzshV-- >> >> Note that both have the correct content-type (application/octet-stream) >> for the file. >> >> So I think there is a bug in camel-jetty when used with the Sun JDK. >> Still looking, but please stop me if you think I've gone wrong so far! >> >> Jim > > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/