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