You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2012/10/14 16:55:12 UTC
svn commit: r1398094 - in /httpcomponents/httpclient/trunk:
httpclient/src/main/java/org/apache/http/client/entity/
httpmime/src/main/java/org/apache/http/entity/mime/
httpmime/src/main/java/org/apache/http/entity/mime/content/
httpmime/src/test/java/o...
Author: olegk
Date: Sun Oct 14 14:55:11 2012
New Revision: 1398094
URL: http://svn.apache.org/viewvc?rev=1398094&view=rev
Log:
Refactored HttpMime ContentBody classes to use ContentType at construction time; added MultipartEntityBuilder
Added:
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java (with props)
httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java (with props)
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/entity/EntityBuilder.java
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntity.java
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/ByteArrayBody.java
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java
httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java
httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java
httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartForm.java
httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartFormHttpEntity.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/entity/EntityBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/entity/EntityBuilder.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/entity/EntityBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/entity/EntityBuilder.java Sun Oct 14 14:55:11 2012
@@ -31,6 +31,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
+import java.util.Arrays;
import java.util.List;
import org.apache.http.HttpEntity;
@@ -70,10 +71,6 @@ public class EntityBuilder {
return new EntityBuilder();
}
- public String getText() {
- return text;
- }
-
private void clearContent() {
this.text = null;
this.binary = null;
@@ -83,6 +80,10 @@ public class EntityBuilder {
this.file = null;
}
+ public String getText() {
+ return text;
+ }
+
public EntityBuilder setText(final String text) {
clearContent();
this.text = text;
@@ -119,6 +120,10 @@ public class EntityBuilder {
return this;
}
+ public EntityBuilder setParameters(final NameValuePair... parameters) {
+ return setParameters(Arrays.asList(parameters));
+ }
+
public Serializable getSerializable() {
return serializable;
}
Modified: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntity.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntity.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntity.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntity.java Sun Oct 14 14:55:11 2012
@@ -123,6 +123,13 @@ public class MultipartEntity implements
return buffer.toString();
}
+ /**
+ * @since 4.3
+ */
+ protected HttpMultipart getMultipart() {
+ return multipart;
+ }
+
public void addPart(final FormBodyPart bodyPart) {
this.multipart.addBodyPart(bodyPart);
this.dirty = true;
Added: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java?rev=1398094&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java (added)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java Sun Oct 14 14:55:11 2012
@@ -0,0 +1,156 @@
+/*
+ * ====================================================================
+ * 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.File;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.content.ByteArrayBody;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.entity.mime.content.InputStreamBody;
+import org.apache.http.entity.mime.content.StringBody;
+
+/**
+ * @since 4.3
+ */
+public class MultipartEntityBuilder {
+
+ private boolean lax;
+ private String boundary;
+ private Charset charset;
+ private List<FormBodyPart> bodyParts;
+
+ public static MultipartEntityBuilder create() {
+ return new MultipartEntityBuilder();
+ }
+
+ MultipartEntityBuilder() {
+ super();
+ }
+
+ public MultipartEntityBuilder setLaxMode() {
+ this.lax = true;
+ return this;
+ }
+
+ public MultipartEntityBuilder setStrictMode() {
+ this.lax = false;
+ return this;
+ }
+
+ public MultipartEntityBuilder setBoundary(final String boundary) {
+ this.boundary = boundary;
+ return this;
+ }
+
+ public MultipartEntityBuilder setCharset(final Charset charset) {
+ this.charset = charset;
+ return this;
+ }
+
+ public MultipartEntityBuilder addTextBody(
+ final String name, final String text, final ContentType contentType) {
+ if (name == null) {
+ throw new IllegalArgumentException("Name may not be null");
+ }
+ if (text == null) {
+ throw new IllegalArgumentException("Text may not be null");
+ }
+ if (this.bodyParts == null) {
+ this.bodyParts = new ArrayList<FormBodyPart>();
+ }
+ this.bodyParts.add(new FormBodyPart(name, new StringBody(text, contentType)));
+ return this;
+ }
+
+ public MultipartEntityBuilder addTextBody(
+ final String name, final String text) {
+ return addTextBody(name, text, ContentType.DEFAULT_TEXT);
+ }
+
+ public MultipartEntityBuilder addBinaryBody(
+ final String name, final byte[] b, final ContentType contentType, final String filename) {
+ if (this.bodyParts == null) {
+ this.bodyParts = new ArrayList<FormBodyPart>();
+ }
+ this.bodyParts.add(new FormBodyPart(name, new ByteArrayBody(b, contentType, filename)));
+ return this;
+ }
+
+ public MultipartEntityBuilder addBinaryBody(
+ final String name, final byte[] b) {
+ return addBinaryBody(name, b, ContentType.DEFAULT_BINARY, null);
+ }
+
+ public MultipartEntityBuilder addBinaryBody(
+ final String name, final File file, final ContentType contentType, final String filename) {
+ if (this.bodyParts == null) {
+ this.bodyParts = new ArrayList<FormBodyPart>();
+ }
+ this.bodyParts.add(
+ new FormBodyPart(name, new FileBody(file, contentType, filename)));
+ return this;
+ }
+
+ public MultipartEntityBuilder addBinaryBody(
+ final String name, final File file) {
+ return addBinaryBody(name, file, ContentType.DEFAULT_BINARY, null);
+ }
+
+ public MultipartEntityBuilder addBinaryBody(
+ final String name, final InputStream stream, final ContentType contentType,
+ final String filename) {
+ if (this.bodyParts == null) {
+ this.bodyParts = new ArrayList<FormBodyPart>();
+ }
+ this.bodyParts.add(
+ new FormBodyPart(name, new InputStreamBody(stream, contentType, filename)));
+ return this;
+ }
+
+ public MultipartEntityBuilder addBinaryBody(final String name, final InputStream stream) {
+ return addBinaryBody(name, stream, ContentType.DEFAULT_BINARY, null);
+ }
+
+ public MultipartEntity build() {
+ MultipartEntity e = new MultipartEntity(
+ this.lax ? HttpMultipartMode.BROWSER_COMPATIBLE : HttpMultipartMode.STRICT,
+ this.boundary, this.charset);
+ if (this.bodyParts != null) {
+ for (FormBodyPart bp: this.bodyParts) {
+ e.addPart(bp);
+ }
+ }
+ return e;
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/MultipartEntityBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/AbstractContentBody.java Sun Oct 14 14:55:11 2012
@@ -27,42 +27,71 @@
package org.apache.http.entity.mime.content;
+import java.nio.charset.Charset;
+
+import org.apache.http.entity.ContentType;
+
/**
*
* @since 4.0
*/
public abstract class AbstractContentBody implements ContentBody {
- private final String mimeType;
- private final String mediaType;
- private final String subType;
+ private final ContentType contentType;
- public AbstractContentBody(final String mimeType) {
+ /**
+ * @since 4.3
+ */
+ public AbstractContentBody(final ContentType contentType) {
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;
+ if (contentType == null) {
+ throw new IllegalArgumentException("Content type may not be null");
}
+ this.contentType = contentType;
+ }
+
+ /**
+ * @deprecated (4.3) use {@link AbstractContentBody#AbstractContentBody(ContentType)}
+ */
+ @Deprecated
+ public AbstractContentBody(final String mimeType) {
+ this(ContentType.parse(mimeType));
+ }
+
+ /**
+ * @since 4.3
+ */
+ public ContentType getContentType() {
+ return this.contentType;
}
public String getMimeType() {
- return this.mimeType;
+ return this.contentType.getMimeType();
}
public String getMediaType() {
- return this.mediaType;
+ String mimeType = this.contentType.getMimeType();
+ int i = mimeType.indexOf('/');
+ if (i != -1) {
+ return mimeType.substring(0, i);
+ } else {
+ return mimeType;
+ }
}
public String getSubType() {
- return this.subType;
+ String mimeType = this.contentType.getMimeType();
+ int i = mimeType.indexOf('/');
+ if (i != -1) {
+ return mimeType.substring(i + 1);
+ } else {
+ return null;
+ }
+ }
+
+ public String getCharset() {
+ Charset charset = this.contentType.getCharset();
+ return charset != null ? charset.name() : null;
}
}
Modified: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/ByteArrayBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/ByteArrayBody.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/ByteArrayBody.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/ByteArrayBody.java Sun Oct 14 14:55:11 2012
@@ -29,11 +29,15 @@ package org.apache.http.entity.mime.cont
import java.io.IOException;
import java.io.OutputStream;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MIME;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.AbstractContentBody;
/**
- * Body part that is built using a byte array containing a file.
+ * Binary body part backed by a byte array.
+ *
+ * @see MultipartEntityBuilder
*
* @since 4.1
*/
@@ -55,9 +59,19 @@ public class ByteArrayBody extends Abstr
* @param data The contents of the file contained in this part.
* @param mimeType The mime type of the file contained in this part.
* @param filename The name of the file contained in this part.
+ *
+ * @deprecated (4.3) use {@link ByteArrayBody#ByteArrayBody(byte[], ContentType, String)}
+ * or {@link MultipartEntityBuilder}
*/
public ByteArrayBody(final byte[] data, final String mimeType, final String filename) {
- super(mimeType);
+ this(data, ContentType.create(mimeType), filename);
+ }
+
+ /**
+ * @since 4.3
+ */
+ public ByteArrayBody(final byte[] data, final ContentType contentType, final String filename) {
+ super(contentType);
if (data == null) {
throw new IllegalArgumentException("byte[] may not be null");
}
Modified: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/FileBody.java Sun Oct 14 14:55:11 2012
@@ -33,9 +33,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MIME;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
/**
+ * Binary body part backed by a file.
+ *
+ * @see MultipartEntityBuilder
*
* @since 4.0
*/
@@ -43,42 +48,64 @@ public class FileBody extends AbstractCo
private final File file;
private final String filename;
- private final String charset;
/**
* @since 4.1
+ *
+ * @deprecated (4.3) use {@link FileBody#FileBody(File, ContentType, String)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public FileBody(final File file,
final String filename,
final String mimeType,
final String charset) {
- super(mimeType);
- if (file == null) {
- throw new IllegalArgumentException("File may not be null");
- }
- this.file = file;
- if (filename != null)
- this.filename = filename;
- else
- this.filename = file.getName();
- this.charset = charset;
+ this(file, ContentType.create(mimeType, charset), filename);
}
/**
* @since 4.1
+ *
+ * @deprecated (4.3) use {@link FileBody#FileBody(File, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public FileBody(final File file,
final String mimeType,
final String charset) {
this(file, null, mimeType, charset);
}
+ /**
+ * @deprecated (4.3) use {@link FileBody#FileBody(File, ContentType)}
+ * or {@link MultipartEntityBuilder}
+ */
+ @Deprecated
public FileBody(final File file, final String mimeType) {
- this(file, mimeType, null);
+ this(file, ContentType.create(mimeType), null);
}
public FileBody(final File file) {
- this(file, "application/octet-stream");
+ this(file, ContentType.DEFAULT_BINARY, file != null ? file.getName() : null);
+ }
+
+ /**
+ * @since 4.3
+ */
+ public FileBody(final File file, final ContentType contentType, final String filename) {
+ super(contentType);
+ if (file == null) {
+ throw new IllegalArgumentException("File may not be null");
+ }
+ this.file = file;
+ this.filename = filename;
+ }
+
+ /**
+ * @since 4.3
+ */
+ public FileBody(final File file, final ContentType contentType) {
+ this(file, contentType, null);
}
public InputStream getInputStream() throws IOException {
@@ -106,10 +133,6 @@ public class FileBody extends AbstractCo
return MIME.ENC_BINARY;
}
- public String getCharset() {
- return charset;
- }
-
public long getContentLength() {
return this.file.length();
}
Modified: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/InputStreamBody.java Sun Oct 14 14:55:11 2012
@@ -31,9 +31,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MIME;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
/**
+ * Binary body part backed by an input stream.
+ *
+ * @see MultipartEntityBuilder
*
* @since 4.0
*/
@@ -42,8 +47,25 @@ public class InputStreamBody extends Abs
private final InputStream in;
private final String filename;
+ /**
+ * @since 4.1
+ *
+ * @deprecated (4.3) use {@link InputStreamBody#InputStreamBody(InputStream, ContentType,
+ * String)} or {@link MultipartEntityBuilder}
+ */
public InputStreamBody(final InputStream in, final String mimeType, final String filename) {
- super(mimeType);
+ this(in, ContentType.create(mimeType), filename);
+ }
+
+ public InputStreamBody(final InputStream in, final String filename) {
+ this(in, ContentType.DEFAULT_BINARY, filename);
+ }
+
+ /**
+ * @since 4.3
+ */
+ public InputStreamBody(final InputStream in, final ContentType contentType, final String filename) {
+ super(contentType);
if (in == null) {
throw new IllegalArgumentException("Input stream may not be null");
}
@@ -51,8 +73,11 @@ public class InputStreamBody extends Abs
this.filename = filename;
}
- public InputStreamBody(final InputStream in, final String filename) {
- this(in, "application/octet-stream", filename);
+ /**
+ * @since 4.3
+ */
+ public InputStreamBody(final InputStream in, final ContentType contentType) {
+ this(in, contentType, null);
}
public InputStream getInputStream() {
@@ -79,10 +104,6 @@ public class InputStreamBody extends Abs
return MIME.ENC_BINARY;
}
- public String getCharset() {
- return null;
- }
-
public long getContentLength() {
return -1;
}
Modified: httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/main/java/org/apache/http/entity/mime/content/StringBody.java Sun Oct 14 14:55:11 2012
@@ -35,21 +35,31 @@ import java.io.OutputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
+import java.nio.charset.UnsupportedCharsetException;
+import org.apache.http.Consts;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MIME;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
/**
+ * Text body part backed by a String.
+ *
+ * @see MultipartEntityBuilder
*
* @since 4.0
*/
public class StringBody extends AbstractContentBody {
private final byte[] content;
- private final Charset charset;
/**
* @since 4.1
+ *
+ * @deprecated (4.3) use {@link StringBody#StringBody(String, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public static StringBody create(
final String text,
final String mimeType,
@@ -63,7 +73,11 @@ public class StringBody extends Abstract
/**
* @since 4.1
+ *
+ * @deprecated (4.3) use {@link StringBody#StringBody(String, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public static StringBody create(
final String text, final Charset charset) throws IllegalArgumentException {
return create(text, null, charset);
@@ -71,7 +85,11 @@ public class StringBody extends Abstract
/**
* @since 4.1
+ *
+ * @deprecated (4.3) use {@link StringBody#StringBody(String, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public static StringBody create(final String text) throws IllegalArgumentException {
return create(text, null, null);
}
@@ -84,20 +102,16 @@ public class StringBody extends Abstract
* @param charset the character set, may be {@code null}, in which case the US-ASCII charset is used
* @throws UnsupportedEncodingException
* @throws IllegalArgumentException if the {@code text} parameter is null
+ *
+ * @deprecated (4.3) use {@link StringBody#StringBody(String, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
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");
- }
- if (charset == null) {
- charset = Charset.forName("US-ASCII");
- }
- this.content = text.getBytes(charset.name());
- this.charset = charset;
+ this(text, ContentType.create(mimeType, charset));
}
/**
@@ -108,7 +122,11 @@ public class StringBody extends Abstract
* @param charset the character set, may be {@code null}, in which case the US-ASCII charset is used
* @throws UnsupportedEncodingException
* @throws IllegalArgumentException if the {@code text} parameter is null
+ *
+ * @deprecated (4.3) use {@link StringBody#StringBody(String, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public StringBody(final String text, final Charset charset) throws UnsupportedEncodingException {
this(text, "text/plain", charset);
}
@@ -121,15 +139,35 @@ public class StringBody extends Abstract
* @param text to be used for the body, not {@code null}
* @throws UnsupportedEncodingException
* @throws IllegalArgumentException if the {@code text} parameter is null
+ *
+ * @deprecated (4.3) use {@link StringBody#StringBody(String, ContentType)}
+ * or {@link MultipartEntityBuilder}
*/
+ @Deprecated
public StringBody(final String text) throws UnsupportedEncodingException {
- this(text, "text/plain", null);
+ this(text, "text/plain", Consts.ASCII);
+ }
+
+ /**
+ * @since 4.3
+ */
+ public StringBody(final String text, final ContentType contentType) {
+ super(contentType);
+ Charset charset = contentType.getCharset();
+ String csname = charset != null ? charset.name() : Consts.ASCII.name();
+ try {
+ this.content = text.getBytes(csname);
+ } catch (UnsupportedEncodingException ex) {
+ // Should never happen
+ throw new UnsupportedCharsetException(csname);
+ }
}
public Reader getReader() {
+ Charset charset = getContentType().getCharset();
return new InputStreamReader(
new ByteArrayInputStream(this.content),
- this.charset);
+ charset != null ? charset : Consts.ASCII);
}
public void writeTo(final OutputStream out) throws IOException {
@@ -149,10 +187,6 @@ public class StringBody extends Abstract
return MIME.ENC_8BIT;
}
- public String getCharset() {
- return this.charset.name();
- }
-
public long getContentLength() {
return this.content.length;
}
Modified: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartContentBody.java Sun Oct 14 14:55:11 2012
@@ -29,6 +29,7 @@ package org.apache.http.entity.mime;
import java.io.ByteArrayInputStream;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.entity.mime.content.StringBody;
import org.junit.Assert;
@@ -38,10 +39,10 @@ public class TestMultipartContentBody {
@Test
public void testStringBody() throws Exception {
- StringBody b1 = new StringBody("text");
+ StringBody b1 = new StringBody("text", ContentType.DEFAULT_TEXT);
Assert.assertEquals(4, b1.getContentLength());
- Assert.assertEquals("US-ASCII", b1.getCharset());
+ Assert.assertEquals("ISO-8859-1", b1.getCharset());
Assert.assertNull(b1.getFilename());
Assert.assertEquals("text/plain", b1.getMimeType());
@@ -50,7 +51,8 @@ public class TestMultipartContentBody {
Assert.assertEquals(MIME.ENC_8BIT, b1.getTransferEncoding());
- StringBody b2 = new StringBody("more text", "text/other", MIME.DEFAULT_CHARSET);
+ StringBody b2 = new StringBody("more text",
+ ContentType.create("text/other", MIME.DEFAULT_CHARSET));
Assert.assertEquals(9, b2.getContentLength());
Assert.assertEquals(MIME.DEFAULT_CHARSET.name(), b2.getCharset());
@@ -77,7 +79,7 @@ public class TestMultipartContentBody {
Assert.assertEquals(MIME.ENC_BINARY, b1.getTransferEncoding());
InputStreamBody b2 = new InputStreamBody(
- new ByteArrayInputStream(stuff), "some/stuff", "stuff");
+ new ByteArrayInputStream(stuff), ContentType.create("some/stuff"), "stuff");
Assert.assertEquals(-1, b2.getContentLength());
Assert.assertNull(b2.getCharset());
Assert.assertEquals("stuff", b2.getFilename());
Added: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java?rev=1398094&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java (added)
+++ httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java Sun Oct 14 14:55:11 2012
@@ -0,0 +1,75 @@
+/*
+ * ====================================================================
+ * 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.File;
+import java.util.List;
+
+import org.apache.http.Consts;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestMultipartEntityBuilder {
+
+ @Test
+ public void testBasics() throws Exception {
+ MultipartEntity entity = MultipartEntityBuilder.create().build();
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(HttpMultipartMode.STRICT, entity.getMultipart().getMode());
+ Assert.assertEquals(0, entity.getMultipart().getBodyParts().size());
+ }
+
+ @Test
+ public void testMultipartOptions() throws Exception {
+ MultipartEntity entity = MultipartEntityBuilder.create()
+ .setBoundary("blah-blah")
+ .setCharset(Consts.UTF_8)
+ .setLaxMode()
+ .build();
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(HttpMultipartMode.BROWSER_COMPATIBLE, entity.getMultipart().getMode());
+ Assert.assertEquals("blah-blah", entity.getMultipart().getBoundary());
+ Assert.assertEquals(Consts.UTF_8, entity.getMultipart().getCharset());
+ }
+
+ @Test
+ public void testAddBodyParts() throws Exception {
+ MultipartEntity entity = MultipartEntityBuilder.create()
+ .addTextBody("p1", "stuff")
+ .addBinaryBody("p2", new File("stuff"))
+ .addBinaryBody("p3", new byte[] {})
+ .addBinaryBody("p4", new ByteArrayInputStream(new byte[] {}))
+ .build();
+ Assert.assertNotNull(entity);
+ List<FormBodyPart> bodyParts = entity.getMultipart().getBodyParts();
+ Assert.assertNotNull(bodyParts);
+ Assert.assertEquals(4, bodyParts.size());
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartEntityBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartForm.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartForm.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartForm.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartForm.java Sun Oct 14 14:55:11 2012
@@ -34,6 +34,8 @@ import java.io.FileWriter;
import java.io.Writer;
import java.nio.charset.Charset;
+import org.apache.http.Consts;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.FormBodyPart;
import org.apache.http.entity.mime.HttpMultipart;
import org.apache.http.entity.mime.HttpMultipartMode;
@@ -50,13 +52,14 @@ public class TestMultipartForm {
HttpMultipart multipart = new HttpMultipart("form-data", "foo");
FormBodyPart p1 = new FormBodyPart(
"field1",
- new StringBody("this stuff"));
+ new StringBody("this stuff", ContentType.DEFAULT_TEXT));
FormBodyPart p2 = new FormBodyPart(
"field2",
- new StringBody("that stuff", Charset.forName("UTF-8")));
+ new StringBody("that stuff", ContentType.create(
+ ContentType.TEXT_PLAIN.getMimeType(), Consts.UTF_8)));
FormBodyPart p3 = new FormBodyPart(
"field3",
- new StringBody("all kind of stuff"));
+ new StringBody("all kind of stuff", ContentType.DEFAULT_TEXT));
multipart.addBodyPart(p1);
multipart.addBodyPart(p2);
@@ -69,7 +72,7 @@ public class TestMultipartForm {
String expected =
"--foo\r\n" +
"Content-Disposition: form-data; name=\"field1\"\r\n" +
- "Content-Type: text/plain; charset=US-ASCII\r\n" +
+ "Content-Type: text/plain; charset=ISO-8859-1\r\n" +
"Content-Transfer-Encoding: 8bit\r\n" +
"\r\n" +
"this stuff\r\n" +
@@ -81,7 +84,7 @@ public class TestMultipartForm {
"that stuff\r\n" +
"--foo\r\n" +
"Content-Disposition: form-data; name=\"field3\"\r\n" +
- "Content-Type: text/plain; charset=US-ASCII\r\n" +
+ "Content-Type: text/plain; charset=ISO-8859-1\r\n" +
"Content-Transfer-Encoding: 8bit\r\n" +
"\r\n" +
"all kind of stuff\r\n" +
@@ -157,7 +160,7 @@ public class TestMultipartForm {
new FileBody(tmpfile));
FormBodyPart p2 = new FormBodyPart(
"field2",
- new FileBody(tmpfile, "test-file", "text/plain", "ANSI_X3.4-1968"));
+ new FileBody(tmpfile, ContentType.create("text/plain", "ANSI_X3.4-1968"), "test-file"));
FormBodyPart p3 = new FormBodyPart(
"field3",
new InputStreamBody(new FileInputStream(tmpfile), "file.tmp"));
@@ -181,7 +184,7 @@ public class TestMultipartForm {
"--foo\r\n" +
"Content-Disposition: form-data; name=\"field2\"; " +
"filename=\"test-file\"\r\n" +
- "Content-Type: text/plain; charset=ANSI_X3.4-1968\r\n" +
+ "Content-Type: text/plain; charset=US-ASCII\r\n" +
"Content-Transfer-Encoding: binary\r\n" +
"\r\n" +
"some random whatever\r\n" +
@@ -277,10 +280,10 @@ public class TestMultipartForm {
HttpMultipart multipart = new HttpMultipart("form-data", "foo");
FormBodyPart p1 = new FormBodyPart(
"field1",
- new StringBody(s1, Charset.forName("ISO-8859-1")));
+ new StringBody(s1, ContentType.create("text/plain", Charset.forName("ISO-8859-1"))));
FormBodyPart p2 = new FormBodyPart(
"field2",
- new StringBody(s2, Charset.forName("KOI8-R")));
+ new StringBody(s2, ContentType.create("text/plain", Charset.forName("KOI8-R"))));
multipart.addBodyPart(p1);
multipart.addBodyPart(p2);
Modified: httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartFormHttpEntity.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartFormHttpEntity.java?rev=1398094&r1=1398093&r2=1398094&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartFormHttpEntity.java (original)
+++ httpcomponents/httpclient/trunk/httpmime/src/test/java/org/apache/http/entity/mime/TestMultipartFormHttpEntity.java Sun Oct 14 14:55:11 2012
@@ -34,6 +34,7 @@ import java.nio.charset.Charset;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.NameValuePair;
+import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.InputStreamBody;
@@ -95,8 +96,8 @@ public class TestMultipartFormHttpEntity
@Test
public void testRepeatable() throws Exception {
MultipartEntity entity = new MultipartEntity();
- entity.addPart("p1", new StringBody("blah blah"));
- entity.addPart("p2", new StringBody("yada yada"));
+ entity.addPart("p1", new StringBody("blah blah", ContentType.DEFAULT_TEXT));
+ entity.addPart("p2", new StringBody("yada yada", ContentType.DEFAULT_TEXT));
Assert.assertTrue(entity.isRepeatable());
Assert.assertFalse(entity.isChunked());
Assert.assertFalse(entity.isStreaming());
@@ -127,9 +128,9 @@ public class TestMultipartFormHttpEntity
public void testNonRepeatable() throws Exception {
MultipartEntity entity = new MultipartEntity();
entity.addPart("p1", new InputStreamBody(
- new ByteArrayInputStream("blah blah".getBytes()), null));
+ new ByteArrayInputStream("blah blah".getBytes()), ContentType.DEFAULT_BINARY));
entity.addPart("p2", new InputStreamBody(
- new ByteArrayInputStream("yada yada".getBytes()), null));
+ new ByteArrayInputStream("yada yada".getBytes()), ContentType.DEFAULT_BINARY));
Assert.assertFalse(entity.isRepeatable());
Assert.assertTrue(entity.isChunked());
Assert.assertTrue(entity.isStreaming());