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); > > >
