From 31d3bfbde958ac6cd7b0fe479def3840820a6913 Mon Sep 17 00:00:00 2001 From: agarcia Date: Wed, 8 Jul 2020 18:15:28 +0200 Subject: [PATCH] Move RequestBody to constructor to avoid npe --- .../lib/common/http/methods/HttpBaseMethod.kt | 8 +------- .../lib/common/http/methods/nonwebdav/PostMethod.kt | 6 ++++-- .../lib/common/http/methods/nonwebdav/PutMethod.kt | 1 - .../lib/common/http/methods/webdav/PutMethod.kt | 6 ++++-- .../resources/files/UploadRemoteFileOperation.java | 11 +++++------ .../chunks/ChunkedUploadRemoteFileOperation.java | 13 ++++++------- 6 files changed, 20 insertions(+), 25 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.kt index 4f9541ef..0c4c7ada 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.kt @@ -7,7 +7,6 @@ import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient import okhttp3.Request -import okhttp3.RequestBody import okhttp3.Response import java.io.InputStream import java.net.MalformedURLException @@ -18,7 +17,6 @@ abstract class HttpBaseMethod constructor(url: URL) { var okHttpClient: OkHttpClient var httpUrl: HttpUrl = url.toHttpUrlOrNull() ?: throw MalformedURLException() var request: Request - var requestBody: RequestBody? = null abstract var response: Response var call: Call? = null @@ -45,17 +43,13 @@ abstract class HttpBaseMethod constructor(url: URL) { *** Requests *** ****************/ - // Headers - val requestHeaders: Headers - get() = request.headers - fun getRequestHeader(name: String): String? { return request.header(name) } fun getRequestHeadersAsHashMap(): HashMap { val headers: HashMap = HashMap() - val superHeaders: Set = requestHeaders.names() + val superHeaders: Set = request.headers.names() superHeaders.forEach { headers[it] = getRequestHeader(it) } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.kt index 995b906e..ba4f6d4d 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.kt @@ -32,10 +32,12 @@ import java.net.URL * * @author David González Verdugo */ -class PostMethod(url: URL, private val postRequestBody: RequestBody) : HttpMethod(url) { +class PostMethod( + url: URL, + private val postRequestBody: RequestBody +) : HttpMethod(url) { @Throws(IOException::class) override fun onExecute(): Int { - requestBody = postRequestBody request = request.newBuilder() .post(postRequestBody) .build() diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.kt index a8fdd67e..98be1503 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.kt @@ -38,7 +38,6 @@ class PutMethod( ) : HttpMethod(url) { @Throws(IOException::class) override fun onExecute(): Int { - requestBody = putRequestBody request = request.newBuilder() .put(putRequestBody) .build() diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.kt index 4d482652..70dea1de 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.kt @@ -25,6 +25,7 @@ package com.owncloud.android.lib.common.http.methods.webdav import at.bitfire.dav4jvm.exception.HttpException import com.owncloud.android.lib.common.http.HttpConstants +import okhttp3.RequestBody import java.io.IOException import java.net.URL @@ -34,12 +35,13 @@ import java.net.URL * @author David González Verdugo */ class PutMethod( - url: URL + url: URL, + private val putRequestBody: RequestBody ) : DavMethod(url) { @Throws(IOException::class, HttpException::class) public override fun onExecute(): Int { davResource.put( - requestBody!!, + putRequestBody, super.getRequestHeader(HttpConstants.IF_MATCH_HEADER), getRequestHeadersAsHashMap() ) { callBackResponse -> diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java index 939eafee..43181b28 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java @@ -84,10 +84,6 @@ public class UploadRemoteFileOperation extends RemoteOperation { RemoteOperationResult result; try { - mPutMethod = new PutMethod( - new URL(client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mRemotePath))); - - mPutMethod.setRetryOnConnectionFailure(false); if (mCancellationRequested.get()) { // the operation was cancelled before getting it's turn to be executed in the queue of uploads @@ -125,6 +121,11 @@ public class UploadRemoteFileOperation extends RemoteOperation { mFileRequestBody.addDatatransferProgressListeners(mDataTransferListeners); } + mPutMethod = new PutMethod( + new URL(client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mRemotePath)), mFileRequestBody); + + mPutMethod.setRetryOnConnectionFailure(false); + if (mRequiredEtag != null && mRequiredEtag.length() > 0) { mPutMethod.addRequestHeader(HttpConstants.IF_MATCH_HEADER, mRequiredEtag); } @@ -132,8 +133,6 @@ public class UploadRemoteFileOperation extends RemoteOperation { mPutMethod.addRequestHeader(HttpConstants.OC_TOTAL_LENGTH_HEADER, String.valueOf(fileToUpload.length())); mPutMethod.addRequestHeader(HttpConstants.OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); - mPutMethod.setRequestBody(mFileRequestBody); - int status = client.executeHttpMethod(mPutMethod); if (isSuccess(status)) { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java index a7f33549..14d0fbf5 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java @@ -86,11 +86,6 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation long chunkCount = (long) Math.ceil((double) totalLength / CHUNK_SIZE); for (int chunkIndex = 0; chunkIndex < chunkCount; chunkIndex++, offset += CHUNK_SIZE) { - mPutMethod = new PutMethod(new URL(uriPrefix + File.separator + chunkIndex)); - - if (mRequiredEtag != null && mRequiredEtag.length() > 0) { - mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); - } ((ChunkFromFileRequestBody) mFileRequestBody).setOffset(offset); @@ -98,6 +93,12 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation result = new RemoteOperationResult<>(new OperationCancelledException()); break; } else { + mPutMethod = new PutMethod(new URL(uriPrefix + File.separator + chunkIndex), mFileRequestBody); + + if (mRequiredEtag != null && mRequiredEtag.length() > 0) { + mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); + } + if (chunkIndex == chunkCount - 1) { // Added a high timeout to the last chunk due to when the last chunk // arrives to the server with the last PUT, all chunks get assembled @@ -105,8 +106,6 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation mPutMethod.setReadTimeout(LAST_CHUNK_TIMEOUT, TimeUnit.MILLISECONDS); } - mPutMethod.setRequestBody(mFileRequestBody); - status = client.executeHttpMethod(mPutMethod); Timber.d("Upload of " + mLocalPath + " to " + mRemotePath +