You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ol...@apache.org on 2010/02/04 21:32:26 UTC
svn commit: r906641 - in /james/mime4j/trunk/core/src:
main/java/org/apache/james/mime4j/message/
main/java/org/apache/james/mime4j/stream/
test/java/org/apache/james/mime4j/message/
test/java/org/apache/james/mime4j/parser/ test/java/org/apache/james/...
Author: olegk
Date: Thu Feb 4 20:32:25 2010
New Revision: 906641
URL: http://svn.apache.org/viewvc?rev=906641&view=rev
Log:
MIME4J-158: Eliminates dependency on commons-logging in 'stream' classes
Modified:
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java
james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptorFactory.java
james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/DefaultBodyDescriptorTest.java
james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/stream/BaseTestForBodyDescriptors.java
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java Thu Feb 4 20:32:25 2010
@@ -25,6 +25,7 @@
import java.util.Map;
import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.dom.datetime.DateTime;
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
import org.apache.james.mime4j.field.datetime.parser.ParseException;
@@ -74,11 +75,11 @@
private boolean isContentMD5Set;
protected MaximalBodyDescriptor() {
- this(null);
+ this(null, null);
}
- public MaximalBodyDescriptor(BodyDescriptor parent) {
- super(parent);
+ public MaximalBodyDescriptor(final BodyDescriptor parent, final DecodeMonitor monitor) {
+ super(parent, monitor);
isMimeVersionSet = false;
mimeMajorVersion = DEFAULT_MAJOR_VERSION;
mimeMinorVersion = DEFAULT_MINOR_VERSION;
@@ -108,11 +109,11 @@
}
public MutableBodyDescriptor newChild() {
- return new MaximalBodyDescriptor(this);
+ return new MaximalBodyDescriptor(this, getDecodeMonitor());
}
@Override
- public void addField(RawField field) {
+ public void addField(RawField field) throws MimeException {
String name = field.getName();
String value = field.getBody();
name = name.trim().toLowerCase();
@@ -174,9 +175,9 @@
}
}
- private void parseContentDisposition(final String value) {
+ private void parseContentDisposition(final String value) throws MimeException {
isContentDispositionSet = true;
- contentDispositionParameters = DefaultBodyDescriptor.getHeaderParams(value);
+ contentDispositionParameters = DefaultBodyDescriptor.getHeaderParams(value, getDecodeMonitor());
contentDispositionType = contentDispositionParameters.get("");
final String contentDispositionModificationDate
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java Thu Feb 4 20:32:25 2010
@@ -19,13 +19,14 @@
package org.apache.james.mime4j.message;
+import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.stream.MutableBodyDescriptor;
import org.apache.james.mime4j.stream.MutableBodyDescriptorFactory;
public class MaximalBodyDescriptorFactory implements MutableBodyDescriptorFactory {
- public MutableBodyDescriptor newInstance() {
- return new MaximalBodyDescriptor(null);
+ public MutableBodyDescriptor newInstance(DecodeMonitor monitor) {
+ return new MaximalBodyDescriptor(null, monitor);
}
}
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java Thu Feb 4 20:32:25 2010
@@ -22,8 +22,8 @@
import java.util.HashMap;
import java.util.Map;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.util.MimeUtil;
/**
@@ -47,7 +47,7 @@
private static final String DEFAULT_MIME_TYPE = DEFAULT_MEDIA_TYPE + "/" + DEFAULT_SUB_TYPE;
- private static Log log = LogFactory.getLog(DefaultBodyDescriptor.class);
+ private final DecodeMonitor monitor;
private String mediaType = DEFAULT_MEDIA_TYPE;
private String subType = DEFAULT_SUB_TYPE;
@@ -64,7 +64,7 @@
* Creates a new root <code>BodyDescriptor</code> instance.
*/
public DefaultBodyDescriptor() {
- this(null);
+ this(null, null);
}
/**
@@ -73,20 +73,25 @@
* @param parent the descriptor of the parent or <code>null</code> if this
* is the root descriptor.
*/
- public DefaultBodyDescriptor(BodyDescriptor parent) {
+ public DefaultBodyDescriptor(final BodyDescriptor parent, final DecodeMonitor monitor) {
if (parent != null && MimeUtil.isSameMimeType("multipart/digest", parent.getMimeType())) {
- mimeType = EMAIL_MESSAGE_MIME_TYPE;
- subType = SUB_TYPE_EMAIL;
- mediaType = MEDIA_TYPE_MESSAGE;
+ this.mimeType = EMAIL_MESSAGE_MIME_TYPE;
+ this.subType = SUB_TYPE_EMAIL;
+ this.mediaType = MEDIA_TYPE_MESSAGE;
} else {
- mimeType = DEFAULT_MIME_TYPE;
- subType = DEFAULT_SUB_TYPE;
- mediaType = DEFAULT_MEDIA_TYPE;
+ this.mimeType = DEFAULT_MIME_TYPE;
+ this.subType = DEFAULT_SUB_TYPE;
+ this.mediaType = DEFAULT_MEDIA_TYPE;
}
+ this.monitor = monitor != null ? monitor : DecodeMonitor.SILENT;
+ }
+
+ protected DecodeMonitor getDecodeMonitor() {
+ return monitor;
}
public MutableBodyDescriptor newChild() {
- return new DefaultBodyDescriptor(this);
+ return new DefaultBodyDescriptor(this, getDecodeMonitor());
}
/**
@@ -95,7 +100,7 @@
*
* @param field the MIME field.
*/
- public void addField(RawField field) {
+ public void addField(RawField field) throws MimeException {
String name = field.getName();
String value = field.getBody();
@@ -113,17 +118,20 @@
try {
contentLength = Long.parseLong(value.trim());
} catch (NumberFormatException e) {
- log.error("Invalid content-length: " + value);
+ if (monitor.warn("Invalid content length: " + value,
+ "ignoring Content-Length header")) {
+ throw new MimeException("Invalid Content-Length header: " + value);
+ }
}
} else if (name.equals("content-type") && !contentTypeSet) {
parseContentType(value);
}
}
- private void parseContentType(String value) {
+ private void parseContentType(String value) throws MimeException {
contentTypeSet = true;
- Map<String, String> params = DefaultBodyDescriptor.getHeaderParams(value);
+ Map<String, String> params = DefaultBodyDescriptor.getHeaderParams(value, getDecodeMonitor());
String main = params.get("");
String type = null;
@@ -258,7 +266,8 @@
* @param pValue The field value to parse.
* @return The result map; use the key "" to retrieve the first value.
*/
- public static Map<String, String> getHeaderParams(String pValue) {
+ public static Map<String, String> getHeaderParams(
+ String pValue, DecodeMonitor monitor) throws MimeException {
pValue = pValue.trim();
Map<String, String> result = new HashMap<String, String>();
@@ -299,7 +308,9 @@
case READY_FOR_NAME:
if (c == '=') {
- log.error("Expected header param name, got '='");
+ if (monitor.warn("Expected header param name, got '='", "ignoring")) {
+ throw new MimeException("Expected header param name, got '='");
+ }
state = ERROR;
break;
}
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java Thu Feb 4 20:32:25 2010
@@ -120,7 +120,7 @@
* internal state.
*/
public void parse(InputStream stream) {
- doParse(stream, null);
+ doParse(stream, newBodyDescriptor(), T_START_MESSAGE);
}
/** Instructs the {@code MimeTokenStream} to parse the given content with
@@ -136,17 +136,14 @@
if (contentType == null) {
throw new IllegalArgumentException("Content type may not be null");
}
- doParse(stream, contentType);
- }
-
- protected void doParse(InputStream stream, String contentType) {
MutableBodyDescriptor newBodyDescriptor = newBodyDescriptor();
- int start = T_START_MESSAGE;
- if (contentType != null) {
- start = T_END_HEADER;
+ try {
newBodyDescriptor.addField(new RawField("Content-Type", contentType));
+ } catch (MimeException ex) {
+ // should never happen
+ throw new IllegalArgumentException(ex.getMessage());
}
- doParse(stream, newBodyDescriptor, start);
+ doParse(stream, newBodyDescriptor, T_END_HEADER);
}
/**
@@ -157,9 +154,9 @@
protected MutableBodyDescriptor newBodyDescriptor() {
final MutableBodyDescriptor result;
if (bodyDescFactory != null) {
- result = bodyDescFactory.newInstance();
+ result = bodyDescFactory.newInstance(monitor);
} else {
- result = new DefaultBodyDescriptor(null);
+ result = new DefaultBodyDescriptor(null, monitor);
}
return result;
}
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java Thu Feb 4 20:32:25 2010
@@ -20,6 +20,7 @@
package org.apache.james.mime4j.stream;
+import org.apache.james.mime4j.MimeException;
/**
* Adds mutator.
@@ -30,7 +31,7 @@
* Adds a field to the body descriptor.
* @param field the MIME field.
*/
- void addField(RawField field);
+ void addField(RawField field) throws MimeException;
MutableBodyDescriptor newChild();
Modified: james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptorFactory.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptorFactory.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptorFactory.java (original)
+++ james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptorFactory.java Thu Feb 4 20:32:25 2010
@@ -19,11 +19,13 @@
package org.apache.james.mime4j.stream;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+
/**
* {@link MutableBodyDescriptor} factory.
*/
public interface MutableBodyDescriptorFactory {
- MutableBodyDescriptor newInstance();
+ MutableBodyDescriptor newInstance(DecodeMonitor monitor);
}
Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java Thu Feb 4 20:32:25 2010
@@ -192,6 +192,6 @@
@Override
protected MutableBodyDescriptor newBodyDescriptor(BodyDescriptor parent) {
- return new MaximalBodyDescriptor(parent);
+ return new MaximalBodyDescriptor(parent, null);
}
}
Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/DefaultBodyDescriptorTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/DefaultBodyDescriptorTest.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/DefaultBodyDescriptorTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/DefaultBodyDescriptorTest.java Thu Feb 4 20:32:25 2010
@@ -32,6 +32,6 @@
@Override
protected MutableBodyDescriptor newBodyDescriptor(BodyDescriptor parent) {
- return new DefaultBodyDescriptor(parent);
+ return new DefaultBodyDescriptor(parent, null);
}
}
Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/stream/BaseTestForBodyDescriptors.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/stream/BaseTestForBodyDescriptors.java?rev=906641&r1=906640&r2=906641&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/stream/BaseTestForBodyDescriptors.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/stream/BaseTestForBodyDescriptors.java Thu Feb 4 20:32:25 2010
@@ -27,7 +27,7 @@
protected abstract MutableBodyDescriptor newBodyDescriptor(BodyDescriptor parent);
- public void testGetParameters() {
+ public void testGetParameters() throws Exception {
MutableBodyDescriptor bd = null;
bd = newBodyDescriptor();
@@ -64,7 +64,7 @@
assertEquals("\\n\\\"", bd.getContentTypeParameters().get("param"));
}
- public void testAddField() {
+ public void testAddField() throws Exception {
MutableBodyDescriptor bd = null;
/*
@@ -79,7 +79,7 @@
assertEquals("iso-8859-1", bd.getCharset());
}
- public void testGetMimeType() {
+ public void testGetMimeType() throws Exception {
MutableBodyDescriptor bd = null;
bd = newBodyDescriptor();
@@ -135,7 +135,7 @@
}
- public void testParameters() {
+ public void testParameters() throws Exception {
MutableBodyDescriptor bd = null;
/*