Argh yes, I missed that :) Do you want me to fix it or can you do it? Thanks, Florent
2010/3/16 Dominique Pfister <[email protected]>: > Hi Florent, > > Your valid mime-type check now produces a log messages for every > non-document or document that has no content stream mime type set > (cmis:contentStreamMimeType is null), such as: > > 17:22:52,231 ERROR [CMISObjectsCollection] Object > 2e683c0a-f0e3-43fd-bbef-4b88745275af has invalid > cmis:contentStreamMimeType 'null', will be served as > 'application/octet-stream' > > I guess the object value should first be checked against null, what do > you think? > > Kind regards > Dominique > > On Fri, Mar 12, 2010 at 1:17 PM, <[email protected]> wrote: >> Author: fguillaume >> Date: Fri Mar 12 12:17:37 2010 >> New Revision: 922231 >> >> URL: http://svn.apache.org/viewvc?rev=922231&view=rev >> Log: >> CMIS-156: don't crash on invalid MIME types >> >> Modified: >> >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java >> >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java >> >> Modified: >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java >> URL: >> http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java?rev=922231&r1=922230&r2=922231&view=diff >> ============================================================================== >> --- >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java >> (original) >> +++ >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISObjectsCollection.java >> Fri Mar 12 12:17:37 2010 >> @@ -31,6 +31,7 @@ import java.util.LinkedList; >> import java.util.List; >> import java.util.Map; >> >> +import javax.activation.MimeType; >> import javax.xml.namespace.QName; >> >> import org.apache.abdera.factory.Factory; >> @@ -552,7 +553,7 @@ public abstract class CMISObjectsCollect >> } catch (ResponseContextException e) { >> return createErrorResponse(e); >> } catch (IllegalArgumentException e) { >> - return createErrorResponse(new ResponseContextException(400, e)); >> + return createErrorResponse(new ResponseContextException(400, >> e)); >> } catch (ConstraintViolationException e) { >> return createErrorResponse(new ResponseContextException(409, e)); >> } catch (CMISRuntimeException e) { >> @@ -758,7 +759,17 @@ public abstract class CMISObjectsCollect >> @Override >> public String getContentType(ObjectEntry object) { >> try { >> - return (String) >> object.getValue(Property.CONTENT_STREAM_MIME_TYPE); >> + String mimeType = (String) >> object.getValue(Property.CONTENT_STREAM_MIME_TYPE); >> + // make sure it's a valid MIME type otherwise Abdera will throw >> + try { >> + new MimeType(mimeType).toString(); >> + } catch (Exception e) { >> + log.error("Object " + object.getId() + " has invalid " >> + + Property.CONTENT_STREAM_MIME_TYPE + " '" + >> mimeType >> + + "', will be served as >> 'application/octet-stream'"); >> + mimeType = "application/octet-stream"; >> + } >> + return mimeType; >> } catch (IllegalArgumentException e) { >> return null; >> } >> >> Modified: >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java >> URL: >> http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java?rev=922231&r1=922230&r2=922231&view=diff >> ============================================================================== >> --- >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java >> (original) >> +++ >> incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/test/java/org/apache/chemistry/atompub/server/AtomPubServerTestCase.java >> Fri Mar 12 12:17:37 2010 >> @@ -83,6 +83,8 @@ public abstract class AtomPubServerTestC >> >> protected static String doc3id; >> >> + protected static String doc4id; >> + >> protected RepositoryService repositoryService; >> >> public Server server; >> @@ -188,6 +190,15 @@ public abstract class AtomPubServerTestC >> doc3.save(); >> doc3id = doc3.getId(); >> >> + Document doc4 = folder2.newDocument("doc"); >> + doc4.setName("doc4"); >> + doc4.setValue("title", "doc 4 title"); >> + cs = new SimpleContentStream(TEST_FILE_CONTENT.getBytes("UTF-8"), >> + "invalid_mime", "doc4.txt"); >> + doc4.setContentStream(cs); >> + doc4.save(); >> + doc4id = doc4.getId(); >> + >> conn.close(); >> return repo; >> } >> @@ -453,6 +464,17 @@ public abstract class AtomPubServerTestC >> method.releaseConnection(); >> } >> >> + public void testBadContentType() throws Exception { >> + HttpMethod method = new GetMethod(base + "/file/" + doc4id); >> + int status = new HttpClient().executeMethod(method); >> + assertEquals(HttpStatus.SC_OK, status); >> + assertEquals("application/octet-stream", method.getResponseHeader( >> + "Content-Type").getValue()); >> + byte[] body = method.getResponseBody(); >> + assertEquals(TEST_FILE_CONTENT, new String(body, "UTF-8")); >> + method.releaseConnection(); >> + } >> + >> public void testQueryPOST() throws Exception { >> EntityProvider provider = new QueryEntityProvider("SELECT * FROM >> doc", >> true, null, null); >> >> >> > -- Florent Guillaume, Director of R&D, Nuxeo Open Source, Java EE based, Enterprise Content Management (ECM) http://www.nuxeo.com http://www.nuxeo.org +33 1 40 33 79 87
