1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 07:56:19 +00:00

Move RequestBody to constructor to avoid npe

This commit is contained in:
agarcia 2020-07-08 18:15:28 +02:00
parent f89cfd91a9
commit 31d3bfbde9
6 changed files with 20 additions and 25 deletions

View File

@ -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<String, String?> {
val headers: HashMap<String, String?> = HashMap()
val superHeaders: Set<String> = requestHeaders.names()
val superHeaders: Set<String> = request.headers.names()
superHeaders.forEach {
headers[it] = getRequestHeader(it)
}

View File

@ -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()

View File

@ -38,7 +38,6 @@ class PutMethod(
) : HttpMethod(url) {
@Throws(IOException::class)
override fun onExecute(): Int {
requestBody = putRequestBody
request = request.newBuilder()
.put(putRequestBody)
.build()

View File

@ -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 ->

View File

@ -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)) {

View File

@ -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 +