You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ol...@apache.org on 2004/07/03 16:27:03 UTC
cvs commit: jakarta-commons/httpclient/src/test/org/apache/commons/httpclient TestMethodCharEncoding.java
olegk 2004/07/03 07:27:03
Modified: httpclient/src/java/org/apache/commons/httpclient/methods
EntityEnclosingMethod.java StringRequestEntity.java
httpclient/src/test/org/apache/commons/httpclient
TestMethodCharEncoding.java
Log:
PR #29883 (StringRequestEntity.getContentLength wrong for multibyte chars)
Contributed by Oleg Kalnichevski
Reviewed by Michael Becke
Revision Changes Path
1.39 +16 -8 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/EntityEnclosingMethod.java
Index: EntityEnclosingMethod.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/EntityEnclosingMethod.java,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- EntityEnclosingMethod.java 13 Jun 2004 20:22:19 -0000 1.38
+++ EntityEnclosingMethod.java 3 Jul 2004 14:27:03 -0000 1.39
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.ChunkedOutputStream;
import org.apache.commons.httpclient.Header;
@@ -176,10 +177,17 @@
requestContentLength);
this.requestStream = null;
} else if (this.requestString != null) {
- this.requestEntity = new StringRequestEntity(
- requestString,
- null,
- getRequestCharSet());
+ String charset = getRequestCharSet();
+ try {
+ this.requestEntity = new StringRequestEntity(
+ requestString, null, charset);
+ } catch (UnsupportedEncodingException e) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn(charset + " not supported");
+ }
+ this.requestEntity = new StringRequestEntity(
+ requestString);
+ }
}
return this.requestEntity;
1.3 +33 -18 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/StringRequestEntity.java
Index: StringRequestEntity.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/StringRequestEntity.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StringRequestEntity.java 13 May 2004 02:26:08 -0000 1.2
+++ StringRequestEntity.java 3 Jul 2004 14:27:03 -0000 1.3
@@ -32,8 +32,7 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
+import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.HeaderElement;
import org.apache.commons.httpclient.NameValuePair;
@@ -46,7 +45,7 @@
public class StringRequestEntity implements RequestEntity {
/** The content */
- private String content;
+ private byte[] content;
/** The charset */
private String charset;
@@ -61,7 +60,13 @@
* @param content The content to set.
*/
public StringRequestEntity(String content) {
- this(content, null, null);
+ super();
+ if (content == null) {
+ throw new IllegalArgumentException("The content cannot be null");
+ }
+ this.contentType = null;
+ this.charset = null;
+ this.content = content.getBytes();
}
/**
@@ -75,13 +80,13 @@
* content to bytes. If the content type does not contain a charset and charset is not null,
* then the charset will be appended to the content type.
*/
- public StringRequestEntity(String content, String contentType, String charset) {
+ public StringRequestEntity(String content, String contentType, String charset)
+ throws UnsupportedEncodingException {
super();
if (content == null) {
throw new IllegalArgumentException("The content cannot be null");
}
- this.content = content;
this.contentType = contentType;
this.charset = charset;
@@ -103,6 +108,11 @@
this.contentType = contentType + "; charset=" + charset;
}
}
+ if (this.charset != null) {
+ this.content = content.getBytes(this.charset);
+ } else {
+ this.content = content.getBytes();
+ }
}
/* (non-Javadoc)
@@ -123,28 +133,33 @@
* @see org.apache.commons.httpclient.RequestEntity#writeRequest(java.io.OutputStream)
*/
public void writeRequest(OutputStream out) throws IOException {
- Writer writer = null;
- if (this.charset != null) {
- writer = new OutputStreamWriter(out, this.charset);
- } else {
- writer = new OutputStreamWriter(out);
+ if (out == null) {
+ throw new IllegalArgumentException("Output stream may not be null");
}
- writer.write(content);
- writer.flush();
+ out.write(this.content);
+ out.flush();
}
/**
* @return The length of the content.
*/
public long getContentLength() {
- return content.length();
+ return this.content.length;
}
/**
* @return Returns the content.
*/
public String getContent() {
- return this.content;
+ if (this.charset != null) {
+ try {
+ return new String(this.content, this.charset);
+ } catch (UnsupportedEncodingException e) {
+ return new String(this.content);
+ }
+ } else {
+ return new String(this.content);
+ }
}
/**
1.10 +9 -0 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodCharEncoding.java
Index: TestMethodCharEncoding.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestMethodCharEncoding.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TestMethodCharEncoding.java 12 May 2004 20:43:54 -0000 1.9
+++ TestMethodCharEncoding.java 3 Jul 2004 14:27:03 -0000 1.10
@@ -277,4 +277,13 @@
assertEquals(ch_msg, params.get("ch"));
}
+ public void testRequestEntityLength() throws IOException {
+ String s = constructString(SWISS_GERMAN_STUFF_UNICODE);
+ RequestEntity requestentity =
+ new StringRequestEntity(s, "text/plain", CHARSET_UTF8);
+ assertEquals(
+ s.getBytes(CHARSET_UTF8).length,
+ requestentity.getContentLength());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org