HTTPCLIENT-807: Added means to set mime type on default ContentBody implementations

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@709485 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Oleg Kalnichevski 2008-10-31 17:16:08 +00:00
parent e6a8741780
commit 997d0e0694
5 changed files with 220 additions and 61 deletions

View File

@ -0,0 +1,77 @@
/*
* $HeadURL:$
* $Revision:$
* $Date:$
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.http.entity.mime.content;
import java.util.Collections;
import java.util.Map;
import org.apache.james.mime4j.message.AbstractBody;
public abstract class AbstractContentBody extends AbstractBody implements ContentBody {
private final String mimeType;
private final String mediaType;
private final String subType;
public AbstractContentBody(final String mimeType) {
super();
if (mimeType == null) {
throw new IllegalArgumentException("MIME type may not be null");
}
this.mimeType = mimeType;
int i = mimeType.indexOf('/');
if (i != -1) {
this.mediaType = mimeType.substring(0, i);
this.subType = mimeType.substring(i + 1);
} else {
this.mediaType = mimeType;
this.subType = null;
}
}
public String getMimeType() {
return this.mimeType;
}
public String getMediaType() {
return this.mediaType;
}
public String getSubType() {
return this.subType;
}
public Map<?, ?> getContentTypeParameters() {
return Collections.EMPTY_MAP;
}
}

View File

@ -36,25 +36,26 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collections;
import java.util.Map;
import org.apache.http.entity.mime.MIME;
import org.apache.james.mime4j.message.AbstractBody;
import org.apache.james.mime4j.message.BinaryBody;
public class FileBody extends AbstractBody implements BinaryBody, ContentBody {
public class FileBody extends AbstractContentBody implements BinaryBody {
private final File file;
public FileBody(final File file) {
super();
public FileBody(final File file, final String mimeType) {
super(mimeType);
if (file == null) {
throw new IllegalArgumentException("File may not be null");
}
this.file = file;
}
public FileBody(final File file) {
this(file, "application/octet-stream");
}
public InputStream getInputStream() throws IOException {
return new FileInputStream(this.file);
}
@ -84,22 +85,6 @@ public class FileBody extends AbstractBody implements BinaryBody, ContentBody {
return null;
}
public String getMimeType() {
return "application/octet-stream";
}
public Map<?, ?> getContentTypeParameters() {
return Collections.EMPTY_MAP;
}
public String getMediaType() {
return "application";
}
public String getSubType() {
return "octet-stream";
}
public long getContentLength() {
return this.file.length();
}

View File

@ -34,20 +34,17 @@ package org.apache.http.entity.mime.content;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collections;
import java.util.Map;
import org.apache.http.entity.mime.MIME;
import org.apache.james.mime4j.message.AbstractBody;
import org.apache.james.mime4j.message.BinaryBody;
public class InputStreamBody extends AbstractBody implements BinaryBody, ContentBody {
public class InputStreamBody extends AbstractContentBody implements BinaryBody {
private final InputStream in;
private final String filename;
public InputStreamBody(final InputStream in, final String filename) {
super();
public InputStreamBody(final InputStream in, final String mimeType, final String filename) {
super(mimeType);
if (in == null) {
throw new IllegalArgumentException("Input stream may not be null");
}
@ -55,6 +52,10 @@ public class InputStreamBody extends AbstractBody implements BinaryBody, Content
this.filename = filename;
}
public InputStreamBody(final InputStream in, final String filename) {
this(in, "application/octet-stream", filename);
}
public InputStream getInputStream() throws IOException {
return this.in;
}
@ -83,22 +84,6 @@ public class InputStreamBody extends AbstractBody implements BinaryBody, Content
return null;
}
public String getMimeType() {
return "application/octet-stream";
}
public Map<?, ?> getContentTypeParameters() {
return Collections.EMPTY_MAP;
}
public String getMediaType() {
return "application";
}
public String getSubType() {
return "octet-stream";
}
public long getContentLength() {
return -1;
}

View File

@ -43,16 +43,18 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.http.entity.mime.MIME;
import org.apache.james.mime4j.message.AbstractBody;
import org.apache.james.mime4j.message.TextBody;
public class StringBody extends AbstractBody implements TextBody, ContentBody {
public class StringBody extends AbstractContentBody implements TextBody {
private final byte[] content;
private final Charset charset;
public StringBody(final String text, Charset charset) throws UnsupportedEncodingException {
super();
public StringBody(
final String text,
final String mimeType,
Charset charset) throws UnsupportedEncodingException {
super(mimeType);
if (text == null) {
throw new IllegalArgumentException("Text may not be null");
}
@ -63,8 +65,12 @@ public class StringBody extends AbstractBody implements TextBody, ContentBody {
this.charset = charset;
}
public StringBody(final String text, Charset charset) throws UnsupportedEncodingException {
this(text, "text/plain", charset);
}
public StringBody(final String text) throws UnsupportedEncodingException {
this(text, null);
this(text, "text/plain", null);
}
public Reader getReader() throws IOException {
@ -94,18 +100,7 @@ public class StringBody extends AbstractBody implements TextBody, ContentBody {
return this.charset.name();
}
public String getMimeType() {
return "text/plain";
}
public String getMediaType() {
return "text";
}
public String getSubType() {
return "plain";
}
@Override
public Map<?, ?> getContentTypeParameters() {
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("charset", this.charset.name());

View File

@ -0,0 +1,117 @@
/*
* $HeadURL:$
* $Revision:$
* $Date:$
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.http.entity.mime;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.entity.mime.content.StringBody;
public class TestMultipartContentBody extends TestCase {
// ------------------------------------------------------------ Constructor
public TestMultipartContentBody(final String testName) throws IOException {
super(testName);
}
// ------------------------------------------------------------------- Main
public static void main(String args[]) {
String[] testCaseName = { TestMultipartContentBody.class.getName() };
junit.textui.TestRunner.main(testCaseName);
}
// ------------------------------------------------------- TestCase Methods
public static Test suite() {
return new TestSuite(TestMultipartContentBody.class);
}
public void testStringBody() throws Exception {
StringBody b1 = new StringBody("text");
assertEquals(4, b1.getContentLength());
Charset defCharset = Charset.defaultCharset();
assertEquals(defCharset.name(), b1.getCharset());
assertEquals(defCharset.name(), b1.getContentTypeParameters().get("charset"));
assertNull(b1.getFilename());
assertEquals("text/plain", b1.getMimeType());
assertEquals("text", b1.getMediaType());
assertEquals("plain", b1.getSubType());
assertEquals(MIME.ENC_8BIT, b1.getTransferEncoding());
StringBody b2 = new StringBody("more text", "text/other", MIME.DEFAULT_CHARSET);
assertEquals(9, b2.getContentLength());
assertEquals(MIME.DEFAULT_CHARSET.name(), b2.getCharset());
assertEquals(MIME.DEFAULT_CHARSET.name(), b2.getContentTypeParameters().get("charset"));
assertNull(b2.getFilename());
assertEquals("text/other", b2.getMimeType());
assertEquals("text", b2.getMediaType());
assertEquals("other", b2.getSubType());
assertEquals(MIME.ENC_8BIT, b2.getTransferEncoding());
}
public void testInputStreamBody() throws Exception {
byte[] stuff = "Stuff".getBytes("US-ASCII");
InputStreamBody b1 = new InputStreamBody(new ByteArrayInputStream(stuff), "stuff");
assertEquals(-1, b1.getContentLength());
assertNull(b1.getCharset());
assertEquals("stuff", b1.getFilename());
assertEquals("application/octet-stream", b1.getMimeType());
assertEquals("application", b1.getMediaType());
assertEquals("octet-stream", b1.getSubType());
assertEquals(MIME.ENC_BINARY, b1.getTransferEncoding());
InputStreamBody b2 = new InputStreamBody(
new ByteArrayInputStream(stuff), "some/stuff", "stuff");
assertEquals(-1, b2.getContentLength());
assertNull(b2.getCharset());
assertEquals("stuff", b2.getFilename());
assertEquals("some/stuff", b2.getMimeType());
assertEquals("some", b2.getMediaType());
assertEquals("stuff", b2.getSubType());
assertEquals(MIME.ENC_BINARY, b2.getTransferEncoding());
}
}