dirkv 01/08/13 10:09:53
Modified: org/apache/commons/httpclient/methods/PutMethod.java
Log:
Just noticed that my patch from 8 may isn't committed yet...
When you try to send data to the server with as input a byte[] or and
InputStream (is streamed to internal byte[]) then that byte[] is first
converted to a String (normal encoding) and then back to an utf-8
encoded
byte[]. For real binary data this goes horribly wrong.
From now on just stream the data directly to the server.
@@ -81,6 +81,7 @@
* PUT Method.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a>
+ * @author Dirk Verbeeck
*/
public class PutMethod
extends HttpMethodBase {
@@ -193,13 +194,13 @@
/**
- * Is the query body submitted through an InputStream of with a
String.
- * If an InputStream is available, it's used.
+ * Is the query body streamed to the server.
+ * For this method this is always true.
*
- * @return boolean True if the content is avalable in an
InputStream
+ * @return boolean true
*/
public boolean isStreamedQuery() {
- return ((file != null) || (url != null));
+ return true;
}
@@ -217,18 +218,12 @@
/**
* Generate the query body.
+ * Not used, always stream the content to the server
*
* @return String query
*/
public String generateQuery() {
- if (query != null){
- return query;
- }
- if (data == null) {
- return "";
- } else {
- return new String(data);
- }
+ return "";
}
@@ -240,12 +235,17 @@
throws IOException {
InputStream inputStream = null;
- if (file != null) {
+ if (data != null) {
+ out.write(data,0,data.length);
+ return;
+ } else if (file != null) {
inputStream = new FileInputStream(file);
} else if (url != null) {
inputStream = url.openConnection().getInputStream();
+ } else {
+ return;
}
-
+
byte[] buffer = new byte[4096];
int nb = 0;
while (true) {