This is an automated email from the ASF dual-hosted git repository.

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 4d158745f6 NIFI-14709 Upgraded OkHttp from 4.12.0 to 5.0.0 (#10066)
4d158745f6 is described below

commit 4d158745f68ec469455c7f9f81e3d9cc0957dde3
Author: Pierre Villard <[email protected]>
AuthorDate: Sat Jul 5 17:09:31 2025 +0200

    NIFI-14709 Upgraded OkHttp from 4.12.0 to 5.0.0 (#10066)
    
    Signed-off-by: David Handermann <[email protected]>
---
 c2/c2-client-bundle/c2-client-http/pom.xml         |   2 +-
 .../nifi/c2/client/http/C2HttpClientTest.java      |  66 +++++----
 minifi/minifi-bootstrap/pom.xml                    |   2 +-
 nifi-commons/nifi-web-client/pom.xml               |   2 +-
 .../web/client/StandardWebClientServiceTest.java   |  58 ++++----
 .../nifi-airtable-processors/pom.xml               |   2 +-
 .../airtable/TestQueryAirtableTable.java           |  37 +++--
 .../nifi-asana-bundle/nifi-asana-services/pom.xml  |   2 +-
 .../StandardAsanaClientProviderServiceTest.java    |  31 +++--
 .../nifi-aws-bundle/nifi-aws-processors/pom.xml    |   2 +-
 .../nifi-box-bundle/nifi-box-processors/pom.xml    |   5 +
 .../nifi-dropbox-processors/pom.xml                |   2 +-
 .../nifi-hubspot-processors/pom.xml                |   2 +-
 .../nifi/processors/hubspot/GetHubSpotTest.java    |  66 +++++----
 .../nifi-salesforce-processors/pom.xml             |   4 +-
 .../nifi-shopify-processors/pom.xml                |   2 +-
 .../nifi/processors/shopify/GetShopifyTest.java    |  28 ++--
 .../nifi-slack-processors/pom.xml                  |   6 +-
 .../nifi/services/slack/TestSlackRecordSink.java   |  39 ++++--
 .../nifi-snowflake-processors/pom.xml              |   2 +-
 .../nifi-twitter-processors/pom.xml                |   2 +-
 .../processors/twitter/TestConsumeTwitter.java     |  18 +--
 .../nifi-standard-processors/pom.xml               |   2 +-
 .../nifi/processors/standard/InvokeHTTPTest.java   | 150 +++++++++++++--------
 .../nifi-lookup-services/pom.xml                   |   4 +-
 .../apache/nifi/lookup/TestRestLookupService.java  |  50 ++++---
 .../nifi-oauth2-provider-service/pom.xml           |   2 +-
 .../nifi-record-sink-service/pom.xml               |   2 +-
 .../nifi/record/sink/TestHttpRecordSink.java       |  17 ++-
 .../nifi-web-client-provider-service/pom.xml       |   2 +-
 .../StandardWebClientServiceProviderTest.java      |  33 ++---
 .../nifi-workday-processors/pom.xml                |   2 +-
 .../processors/workday/GetWorkdayReportTest.java   |  51 +++++--
 .../nifi-zendesk-processors/pom.xml                |   2 +-
 .../nifi/processors/zendesk/GetZendeskTest.java    |  54 +++++---
 .../processors/zendesk/PutZendeskTicketTest.java   |  60 ++++++---
 .../nifi-zendesk-services/pom.xml                  |   2 +-
 .../services/zendesk/ZendeskRecordSinkTest.java    |  53 +++++---
 .../nifi-web/nifi-web-security/pom.xml             |   2 +-
 .../StandardRegistrationBuilderProviderTest.java   |  23 ++--
 pom.xml                                            |   7 +-
 41 files changed, 563 insertions(+), 335 deletions(-)

diff --git a/c2/c2-client-bundle/c2-client-http/pom.xml 
b/c2/c2-client-bundle/c2-client-http/pom.xml
index 31983303f4..acfbe893ea 100644
--- a/c2/c2-client-bundle/c2-client-http/pom.xml
+++ b/c2/c2-client-bundle/c2-client-http/pom.xml
@@ -71,7 +71,7 @@ limitations under the License.
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/c2/c2-client-bundle/c2-client-http/src/test/java/org/apache/nifi/c2/client/http/C2HttpClientTest.java
 
b/c2/c2-client-bundle/c2-client-http/src/test/java/org/apache/nifi/c2/client/http/C2HttpClientTest.java
index 23bf116e8d..28086c3a0a 100644
--- 
a/c2/c2-client-bundle/c2-client-http/src/test/java/org/apache/nifi/c2/client/http/C2HttpClientTest.java
+++ 
b/c2/c2-client-bundle/c2-client-http/src/test/java/org/apache/nifi/c2/client/http/C2HttpClientTest.java
@@ -16,21 +16,9 @@
  */
 package org.apache.nifi.c2.client.http;
 
-import static org.junit.jupiter.api.Assertions.assertArrayEquals;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.lenient;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.Optional;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.nifi.c2.client.C2ClientConfig;
 import org.apache.nifi.c2.protocol.api.C2Heartbeat;
 import org.apache.nifi.c2.protocol.api.C2HeartbeatResponse;
@@ -43,6 +31,19 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Optional;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.lenient;
+import static org.mockito.Mockito.when;
+
 @ExtendWith(MockitoExtension.class)
 public class C2HttpClientTest {
 
@@ -66,8 +67,9 @@ public class C2HttpClientTest {
     private String baseUrl;
 
     @BeforeEach
-    public void startServer() {
+    public void startServer() throws IOException {
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
         baseUrl = 
mockWebServer.url("/").newBuilder().host("localhost").build().toString();
         
when(c2ClientConfig.getKeepAliveDuration()).thenReturn(KEEP_ALIVE_DURATION);
         
when(c2ClientConfig.getMaxIdleConnections()).thenReturn(MAX_IDLE_CONNECTIONS);
@@ -77,13 +79,15 @@ public class C2HttpClientTest {
 
     @AfterEach
     public void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
     void testPublishHeartbeatSuccess() throws InterruptedException {
         C2HeartbeatResponse hbResponse = new C2HeartbeatResponse();
-        mockWebServer.enqueue(new MockResponse().setBody("responseBody"));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .body("responseBody")
+                .build());
 
         
when(serializer.serialize(any(C2Heartbeat.class))).thenReturn(Optional.of("Heartbeat"));
         when(serializer.deserialize(any(), 
any(Class.class))).thenReturn(Optional.of(hbResponse));
@@ -95,7 +99,7 @@ public class C2HttpClientTest {
         assertEquals(response.get(), hbResponse);
 
         RecordedRequest request = mockWebServer.takeRequest();
-        assertEquals("/" + HEARTBEAT_PATH, request.getPath());
+        assertEquals("/" + HEARTBEAT_PATH, request.getTarget());
     }
 
     @Test
@@ -121,7 +125,10 @@ public class C2HttpClientTest {
 
     @Test
     void testRetrieveUpdateContentReturnsEmptyWhenServerErrorResponse() throws 
InterruptedException {
-        mockWebServer.enqueue(new 
MockResponse().setBody("updateContent").setResponseCode(HTTP_STATUS_BAD_REQUEST));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .body("updateContent")
+                .code(HTTP_STATUS_BAD_REQUEST)
+                .build());
 
         C2HttpClient c2HttpClient = C2HttpClient.create(c2ClientConfig, 
serializer);
         Optional<byte[]> response = 
c2HttpClient.retrieveUpdateConfigurationContent(baseUrl + UPDATE_PATH);
@@ -129,13 +136,16 @@ public class C2HttpClientTest {
         assertFalse(response.isPresent());
 
         RecordedRequest request = mockWebServer.takeRequest();
-        assertEquals("/" + UPDATE_PATH, request.getPath());
+        assertEquals("/" + UPDATE_PATH, request.getTarget());
     }
 
     @Test
     void testRetrieveUpdateContentReturnsResponseWithBody() throws 
InterruptedException {
         String content = "updateContent";
-        mockWebServer.enqueue(new 
MockResponse().setBody(content).setResponseCode(HTTP_STATUS_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .body(content)
+                .code(HTTP_STATUS_OK)
+                .build());
 
         C2HttpClient c2HttpClient = C2HttpClient.create(c2ClientConfig, 
serializer);
         Optional<byte[]> response = 
c2HttpClient.retrieveUpdateConfigurationContent(baseUrl + UPDATE_PATH);
@@ -144,21 +154,23 @@ public class C2HttpClientTest {
         assertArrayEquals(content.getBytes(StandardCharsets.UTF_8), 
response.get());
 
         RecordedRequest request = mockWebServer.takeRequest();
-        assertEquals("/" + UPDATE_PATH, request.getPath());
+        assertEquals("/" + UPDATE_PATH, request.getTarget());
     }
 
     @Test
     void testAcknowledgeOperation() throws InterruptedException {
         String ackContent = "ack";
         
when(serializer.serialize(any(C2OperationAck.class))).thenReturn(Optional.of(ackContent));
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_STATUS_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_STATUS_OK)
+                .build());
 
         C2HttpClient c2HttpClient = C2HttpClient.create(c2ClientConfig, 
serializer);
         c2HttpClient.acknowledgeOperation(new C2OperationAck());
 
         RecordedRequest request = mockWebServer.takeRequest();
-        assertEquals("/" + ACK_PATH, request.getPath());
-        
assertTrue(request.getHeader("Content-Type").contains("application/json"));
-        assertArrayEquals(ackContent.getBytes(StandardCharsets.UTF_8), 
request.getBody().readByteArray());
+        assertEquals("/" + ACK_PATH, request.getTarget());
+        
assertTrue(request.getHeaders().get("Content-Type").contains("application/json"));
+        assertArrayEquals(ackContent.getBytes(StandardCharsets.UTF_8), 
request.getBody().toByteArray());
     }
 }
diff --git a/minifi/minifi-bootstrap/pom.xml b/minifi/minifi-bootstrap/pom.xml
index b650d19fbb..3916eefb42 100644
--- a/minifi/minifi-bootstrap/pom.xml
+++ b/minifi/minifi-bootstrap/pom.xml
@@ -97,7 +97,7 @@ limitations under the License.
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
+            <artifactId>okhttp-jvm</artifactId>
         </dependency>
         <dependency>
             <groupId>commons-io</groupId>
diff --git a/nifi-commons/nifi-web-client/pom.xml 
b/nifi-commons/nifi-web-client/pom.xml
index 0f9197f13d..fef4c29be7 100644
--- a/nifi-commons/nifi-web-client/pom.xml
+++ b/nifi-commons/nifi-web-client/pom.xml
@@ -31,7 +31,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardWebClientServiceTest.java
 
b/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardWebClientServiceTest.java
index 5be2f36b87..2656ebb13e 100644
--- 
a/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardWebClientServiceTest.java
+++ 
b/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardWebClientServiceTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.nifi.web.client;
 
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.nifi.web.client.api.HttpEntityHeaders;
 import org.apache.nifi.web.client.api.HttpRequestMethod;
 import org.apache.nifi.web.client.api.HttpRequestUriSpec;
@@ -54,6 +54,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.OptionalLong;
+import java.util.concurrent.TimeUnit;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -112,14 +113,16 @@ public class StandardWebClientServiceTest {
     StandardWebClientService service;
 
     @BeforeEach
-    void setServer() {
+    void setServer() throws IOException {
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
+
         service = new StandardWebClientService();
     }
 
     @AfterEach
     void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -139,8 +142,13 @@ public class StandardWebClientServiceTest {
     }
 
     @Test
-    void testHttpTimeoutException() throws IOException {
-        mockWebServer.shutdown();
+    void testHttpTimeoutException() {
+        final MockResponse delayedResponse = new MockResponse.Builder()
+                .headersDelay(FAILURE_TIMEOUT.toMillis() * 2, 
TimeUnit.MILLISECONDS)
+                .body(RESPONSE_BODY)
+                .code(HttpResponseStatus.OK.getCode())
+                .build();
+        mockWebServer.enqueue(delayedResponse);
 
         service.setConnectTimeout(FAILURE_TIMEOUT);
         service.setReadTimeout(FAILURE_TIMEOUT);
@@ -160,7 +168,7 @@ public class StandardWebClientServiceTest {
 
     @Test
     void testProxyAuthorization() throws IOException, InterruptedException {
-        final Proxy proxy = mockWebServer.toProxyAddress();
+        final Proxy proxy = mockWebServer.getProxyAddress();
         when(proxyContext.getProxy()).thenReturn(proxy);
         final String username = String.class.getSimpleName();
         final String password = String.class.getName();
@@ -168,15 +176,16 @@ public class StandardWebClientServiceTest {
         when(proxyContext.getPassword()).thenReturn(Optional.of(password));
         service.setProxyContext(proxyContext);
 
-        mockWebServer.enqueue(new MockResponse()
-                
.setResponseCode(HttpResponseStatus.PROXY_AUTHENTICATION_REQUIRED.getCode())
-                .setHeader(PROXY_AUTHENTICATE_HEADER, 
PROXY_AUTHENTICATE_BASIC_REALM)
-        );
+        final MockResponse proxyAuthRequiredResponse = new 
MockResponse.Builder()
+                
.code(HttpResponseStatus.PROXY_AUTHENTICATION_REQUIRED.getCode())
+                .addHeader(PROXY_AUTHENTICATE_HEADER, 
PROXY_AUTHENTICATE_BASIC_REALM)
+                .build();
+        mockWebServer.enqueue(proxyAuthRequiredResponse);
 
         runRequestMethod(service.get(), StandardHttpRequestMethod.GET, 
HttpResponseStatus.OK);
 
         final RecordedRequest proxyAuthorizationRequest = 
mockWebServer.takeRequest();
-        final String proxyAuthorization = 
proxyAuthorizationRequest.getHeader(PROXY_AUTHORIZATION_HEADER);
+        final String proxyAuthorization = 
proxyAuthorizationRequest.getHeaders().get(PROXY_AUTHORIZATION_HEADER);
 
         final String formatted = String.format("%s:%s", username, password);
         final String encoded = 
Base64.getEncoder().encodeToString(formatted.getBytes(StandardCharsets.UTF_8));
@@ -190,9 +199,10 @@ public class StandardWebClientServiceTest {
 
         final String location = 
mockWebServer.url(ROOT_PATH).newBuilder().host(LOCALHOST).build().toString();
 
-        final MockResponse movedResponse = new MockResponse()
-                
.setResponseCode(HttpResponseStatus.MOVED_PERMANENTLY.getCode())
-                .setHeader(LOCATION_HEADER, location);
+        final MockResponse movedResponse = new MockResponse.Builder()
+                .code(HttpResponseStatus.MOVED_PERMANENTLY.getCode())
+                .addHeader(LOCATION_HEADER, location)
+                .build();
         mockWebServer.enqueue(movedResponse);
 
         final HttpResponseStatus httpResponseStatus = HttpResponseStatus.OK;
@@ -360,10 +370,10 @@ public class StandardWebClientServiceTest {
             final RecordedRequest recordedRequest = 
assertRecordedRequestResponseStatus(httpResponseEntity, httpRequestMethod, 
httpResponseStatus);
 
             assertEquals(TEXT_BODY.length, recordedRequest.getBodySize());
-            final byte[] requestBody = 
recordedRequest.getBody().readByteArray();
+            final byte[] requestBody = recordedRequest.getBody().toByteArray();
             assertArrayEquals(TEXT_BODY, requestBody);
 
-            final String acceptHeader = 
recordedRequest.getHeader(ACCEPT_HEADER);
+            final String acceptHeader = 
recordedRequest.getHeaders().get(ACCEPT_HEADER);
             assertEquals(ACCEPT_ANY_TYPE, acceptHeader);
         }
     }
@@ -433,14 +443,16 @@ public class StandardWebClientServiceTest {
     }
 
     private void enqueueResponseStatus(final HttpResponseStatus 
httpResponseStatus) {
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(httpResponseStatus.getCode()));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(httpResponseStatus.getCode())
+                .build());
     }
 
     private void enqueueResponseStatusBody(final HttpResponseStatus 
httpResponseStatus) {
-        mockWebServer.enqueue(new MockResponse()
-                .setResponseCode(httpResponseStatus.getCode())
-                .setBody(RESPONSE_BODY)
-        );
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(httpResponseStatus.getCode())
+                .body(RESPONSE_BODY)
+                .build());
     }
 
     private URI getRootUri() {
diff --git 
a/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/pom.xml 
b/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/pom.xml
index b59a1d01af..f62f6d806d 100644
--- 
a/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/pom.xml
+++ 
b/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/pom.xml
@@ -55,7 +55,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/src/test/java/org/apache/nifi/processors/airtable/TestQueryAirtableTable.java
 
b/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/src/test/java/org/apache/nifi/processors/airtable/TestQueryAirtableTable.java
index 330d7a3161..941f8fb926 100644
--- 
a/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/src/test/java/org/apache/nifi/processors/airtable/TestQueryAirtableTable.java
+++ 
b/nifi-extension-bundles/nifi-airtable-bundle/nifi-airtable-processors/src/test/java/org/apache/nifi/processors/airtable/TestQueryAirtableTable.java
@@ -17,13 +17,9 @@
 
 package org.apache.nifi.processors.airtable;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.List;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
 import org.apache.nifi.processor.Processor;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
@@ -34,6 +30,11 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 public class TestQueryAirtableTable {
 
     public static final String RECORDS_JSON_BODY = "{\"records\":[{"
@@ -75,7 +76,9 @@ public class TestQueryAirtableTable {
     @Test
     void retrievesAndWritesRecords() throws Exception {
         try (final MockWebServer server = new MockWebServer()) {
-            server.enqueue(new MockResponse().setBody(RECORDS_JSON_BODY));
+            server.enqueue(new MockResponse.Builder()
+                    .body(RECORDS_JSON_BODY)
+                    .build());
 
             server.start();
             final HttpUrl httpUrl = server.url(API_URL_PATH);
@@ -95,8 +98,12 @@ public class TestQueryAirtableTable {
     @Test
     void retrievesAndWritesPagedRecords() throws Exception {
         try (final MockWebServer server = new MockWebServer()) {
-            server.enqueue(new 
MockResponse().setBody(RECORDS_WITH_OFFSET_JSON_BODY));
-            server.enqueue(new MockResponse().setBody(RECORDS_JSON_BODY));
+            server.enqueue(new MockResponse.Builder()
+                    .body(RECORDS_WITH_OFFSET_JSON_BODY)
+                    .build());
+            server.enqueue(new MockResponse.Builder()
+                    .body(RECORDS_JSON_BODY)
+                    .build());
 
             server.start();
             final HttpUrl httpUrl = server.url(API_URL_PATH);
@@ -116,8 +123,12 @@ public class TestQueryAirtableTable {
     @Test
     void retrievesAndWritesPagedRecordsInMultipleFlowFiles() throws Exception {
         try (final MockWebServer server = new MockWebServer()) {
-            server.enqueue(new 
MockResponse().setBody(RECORDS_WITH_OFFSET_JSON_BODY));
-            server.enqueue(new MockResponse().setBody(RECORDS_JSON_BODY));
+            server.enqueue(new MockResponse.Builder()
+                    .body(RECORDS_WITH_OFFSET_JSON_BODY)
+                    .build());
+            server.enqueue(new MockResponse.Builder()
+                    .body(RECORDS_JSON_BODY)
+                    .build());
 
             server.start();
             final HttpUrl httpUrl = server.url(API_URL_PATH);
@@ -143,7 +154,9 @@ public class TestQueryAirtableTable {
     @Test
     void doesNotWriteEmptyRecords() throws Exception {
         try (final MockWebServer server = new MockWebServer()) {
-            server.enqueue(new MockResponse().setBody("{\"records\":[]}"));
+            server.enqueue(new MockResponse.Builder()
+                    .body("{\"records\":[]}")
+                    .build());
 
             server.start();
             final HttpUrl httpUrl = server.url(API_URL_PATH);
diff --git 
a/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/pom.xml 
b/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/pom.xml
index 02c7cd75f0..6dbc5d1a92 100644
--- a/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/pom.xml
+++ b/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/pom.xml
@@ -39,7 +39,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/src/test/java/org/apache/nifi/controller/asana/StandardAsanaClientProviderServiceTest.java
 
b/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/src/test/java/org/apache/nifi/controller/asana/StandardAsanaClientProviderServiceTest.java
index 768f8b8d66..b75df42d24 100644
--- 
a/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/src/test/java/org/apache/nifi/controller/asana/StandardAsanaClientProviderServiceTest.java
+++ 
b/nifi-extension-bundles/nifi-asana-bundle/nifi-asana-services/src/test/java/org/apache/nifi/controller/asana/StandardAsanaClientProviderServiceTest.java
@@ -17,8 +17,8 @@
 package org.apache.nifi.controller.asana;
 
 import com.asana.models.Project;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.util.NoOpProcessor;
 import org.apache.nifi.util.StringUtils;
@@ -87,16 +87,17 @@ public class StandardAsanaClientProviderServiceTest {
     private MockWebServer mockWebServer;
 
     @BeforeEach
-    public void init() throws InitializationException {
+    public void init() throws InitializationException, IOException {
         runner = newTestRunner(NoOpProcessor.class);
         service = new StandardAsanaClientProviderService();
         
runner.addControllerService(AsanaClientProviderService.class.getName(), 
service);
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
     }
 
     @AfterEach
     public void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -145,8 +146,14 @@ public class StandardAsanaClientProviderServiceTest {
         runner.setProperty(service, PROP_ASANA_WORKSPACE_NAME, "My Workspace");
         runner.setProperty(service, PROP_ASANA_API_BASE_URL, 
getMockWebServerUrl());
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(WORKSPACES));
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(PROJECTS));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(WORKSPACES)
+                .build());
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(PROJECTS)
+                .build());
 
         runner.enableControllerService(service);
         final Map<String, Project> projects = 
service.createClient().getProjects()
@@ -157,7 +164,7 @@ public class StandardAsanaClientProviderServiceTest {
         assertEquals("Another Project Again", 
projects.get("1202986168388325").name);
 
         assertEquals(2, mockWebServer.getRequestCount());
-        assertEquals("Bearer 12345", 
mockWebServer.takeRequest().getHeader("Authorization"));
+        assertEquals("Bearer 12345", 
mockWebServer.takeRequest().getHeaders().get("Authorization"));
         
assertTrue(mockWebServer.takeRequest().getRequestLine().contains("workspace=1202898619267352"));
     }
 
@@ -167,8 +174,14 @@ public class StandardAsanaClientProviderServiceTest {
         runner.setProperty(service, PROP_ASANA_WORKSPACE_NAME, "Company or 
Team Name");
         runner.setProperty(service, PROP_ASANA_API_BASE_URL, 
getMockWebServerUrl());
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(WORKSPACES));
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(PROJECTS));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(WORKSPACES)
+                .build());
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(PROJECTS)
+                .build());
 
         runner.enableControllerService(service);
         assertThrows(RuntimeException.class, service::createClient);
diff --git a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
index 17086900f9..2823ecf270 100644
--- a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
@@ -151,7 +151,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/pom.xml 
b/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/pom.xml
index 109798ec4f..be323ebac4 100644
--- a/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/pom.xml
@@ -69,5 +69,10 @@
             <artifactId>nifi-mock-record-utils</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp-jvm</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git 
a/nifi-extension-bundles/nifi-dropbox-bundle/nifi-dropbox-processors/pom.xml 
b/nifi-extension-bundles/nifi-dropbox-bundle/nifi-dropbox-processors/pom.xml
index ae3987aa72..b1fc258689 100644
--- a/nifi-extension-bundles/nifi-dropbox-bundle/nifi-dropbox-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-dropbox-bundle/nifi-dropbox-processors/pom.xml
@@ -52,7 +52,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
+            <artifactId>okhttp-jvm</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git 
a/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/pom.xml 
b/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/pom.xml
index 49c2e614d9..255c8a5223 100644
--- a/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/pom.xml
@@ -59,7 +59,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/src/test/java/org/apache/nifi/processors/hubspot/GetHubSpotTest.java
 
b/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/src/test/java/org/apache/nifi/processors/hubspot/GetHubSpotTest.java
index c5d2302599..ecf742bba9 100644
--- 
a/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/src/test/java/org/apache/nifi/processors/hubspot/GetHubSpotTest.java
+++ 
b/nifi-extension-bundles/nifi-hubspot-bundle/nifi-hubspot-processors/src/test/java/org/apache/nifi/processors/hubspot/GetHubSpotTest.java
@@ -16,30 +16,13 @@
  */
 package org.apache.nifi.processors.hubspot;
 
-import static org.apache.nifi.processors.hubspot.GetHubSpot.CURSOR_KEY;
-import static 
org.apache.nifi.processors.hubspot.GetHubSpot.END_INCREMENTAL_KEY;
-import static 
org.apache.nifi.processors.hubspot.GetHubSpot.START_INCREMENTAL_KEY;
-import static org.apache.nifi.processors.hubspot.HubSpotObjectType.COMPANIES;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import java.io.IOException;
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
 import org.apache.commons.io.IOUtils;
 import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.state.Scope;
@@ -56,6 +39,24 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.io.IOException;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import static org.apache.nifi.processors.hubspot.GetHubSpot.CURSOR_KEY;
+import static 
org.apache.nifi.processors.hubspot.GetHubSpot.END_INCREMENTAL_KEY;
+import static 
org.apache.nifi.processors.hubspot.GetHubSpot.START_INCREMENTAL_KEY;
+import static org.apache.nifi.processors.hubspot.HubSpotObjectType.COMPANIES;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 class GetHubSpotTest {
 
     private static final long TEST_EPOCH_TIME = 1662665787;
@@ -87,7 +88,7 @@ class GetHubSpotTest {
     @AfterEach
     void tearDown() throws IOException {
         if (server != null) {
-            server.shutdown();
+            server.close();
             server = null;
         }
     }
@@ -96,7 +97,9 @@ class GetHubSpotTest {
     void testFlowFileContainsResultsArray() throws IOException {
 
         final String response = getResourceAsString("simple_response.json");
-        server.enqueue(new MockResponse().setBody(response));
+        server.enqueue(new MockResponse.Builder()
+                .body(response)
+                .build());
 
         runner.run(1);
 
@@ -118,7 +121,9 @@ class GetHubSpotTest {
     void testFlowFileNotCreatedWhenZeroResult() throws IOException {
 
         final String response = getResourceAsString("zero_result.json");
-        server.enqueue(new MockResponse().setBody(response));
+        server.enqueue(new MockResponse.Builder()
+                .body(response)
+                .build());
 
         runner.run(1);
 
@@ -132,7 +137,10 @@ class GetHubSpotTest {
     void testExceptionIsThrownWhenTooManyRequest() throws IOException {
 
         final String response = getResourceAsString("zero_result.json");
-        server.enqueue(new 
MockResponse().setBody(response).setResponseCode(429));
+        server.enqueue(new MockResponse.Builder()
+                .code(429)
+                .body(response)
+                .build());
 
         assertThrows(AssertionError.class, () -> runner.run(1));
         assertTrue(runner.getProvenanceEvents().isEmpty());
@@ -141,7 +149,9 @@ class GetHubSpotTest {
     @Test
     void testSimpleIncrementalLoadingFilter() throws IOException, 
InterruptedException {
         final String response = getResourceAsString("simple_response.json");
-        server.enqueue(new MockResponse().setBody(response));
+        server.enqueue(new MockResponse.Builder()
+                .body(response)
+                .build());
 
         final String limit = "2";
         final int defaultDelay = 30000;
@@ -155,7 +165,7 @@ class GetHubSpotTest {
 
         runner.run(1);
 
-        final String requestBodyString = new 
String(server.takeRequest().getBody().readByteArray());
+        final String requestBodyString = new 
String(server.takeRequest().getBody().toByteArray());
 
         final ObjectNode startTimeNode = OBJECT_MAPPER.createObjectNode();
         startTimeNode.put("propertyName", "hs_lastmodifieddate");
@@ -185,7 +195,9 @@ class GetHubSpotTest {
     @Test
     void testIncrementalLoadingFilterWithPagingCursor() throws IOException, 
InterruptedException {
         final String response = getResourceAsString("simple_response.json");
-        server.enqueue(new MockResponse().setBody(response));
+        server.enqueue(new MockResponse.Builder()
+                .body(response)
+                .build());
 
         final String limit = "2";
         final String after = "nextPage";
@@ -203,7 +215,7 @@ class GetHubSpotTest {
 
         runner.run(1);
 
-        final String requestBodyString = new 
String(server.takeRequest().getBody().readByteArray());
+        final String requestBodyString = new 
String(server.takeRequest().getBody().toByteArray());
 
         final ObjectNode startTimeNode = OBJECT_MAPPER.createObjectNode();
         startTimeNode.put("propertyName", "hs_lastmodifieddate");
diff --git 
a/nifi-extension-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/pom.xml
 
b/nifi-extension-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/pom.xml
index 8b194fc2c1..a471e48861 100644
--- 
a/nifi-extension-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/pom.xml
+++ 
b/nifi-extension-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/pom.xml
@@ -28,7 +28,7 @@
 
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
+            <artifactId>okhttp-jvm</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.nifi</groupId>
@@ -80,7 +80,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/pom.xml 
b/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/pom.xml
index 39af02640d..39190e98db 100644
--- a/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/pom.xml
@@ -50,7 +50,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/src/test/java/org/apache/nifi/processors/shopify/GetShopifyTest.java
 
b/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/src/test/java/org/apache/nifi/processors/shopify/GetShopifyTest.java
index a6f526fe82..940f206abf 100644
--- 
a/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/src/test/java/org/apache/nifi/processors/shopify/GetShopifyTest.java
+++ 
b/nifi-extension-bundles/nifi-shopify-bundle/nifi-shopify-processors/src/test/java/org/apache/nifi/processors/shopify/GetShopifyTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.nifi.processors.shopify;
 
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
 import org.apache.commons.io.IOUtils;
 import org.apache.nifi.flowfile.attributes.CoreAttributes;
 import org.apache.nifi.processors.shopify.model.IncrementalLoadingParameter;
@@ -65,7 +65,7 @@ class GetShopifyTest {
     @AfterEach
     void tearDown() throws IOException {
         if (server != null) {
-            server.shutdown();
+            server.close();
             server = null;
         }
     }
@@ -73,9 +73,10 @@ class GetShopifyTest {
     @Test
     void testStateIsUpdatedIfIncrementalAndNotPaging() throws 
InitializationException, IOException {
 
-        final MockResponse mockResponse = new MockResponse()
-                .setResponseCode(200)
-                .setBody(getResourceAsString("simple_response.json"));
+        final MockResponse mockResponse = new MockResponse.Builder()
+                .code(200)
+                .body(getResourceAsString("simple_response.json"))
+                .build();
 
         server.enqueue(mockResponse);
 
@@ -107,7 +108,9 @@ class GetShopifyTest {
 
     @Test
     void testHttpError429() throws InitializationException {
-        server.enqueue(new MockResponse().setResponseCode(429));
+        server.enqueue(new MockResponse.Builder()
+                .code(429)
+                .build());
 
         final StandardWebClientServiceProvider 
standardWebClientServiceProvider =
                 new StandardWebClientServiceProvider();
@@ -131,7 +134,9 @@ class GetShopifyTest {
 
     @Test
     void testHttpError404() throws InitializationException {
-        server.enqueue(new MockResponse().setResponseCode(404));
+        server.enqueue(new MockResponse.Builder()
+                .code(404)
+                .build());
 
         final StandardWebClientServiceProvider 
standardWebClientServiceProvider =
                 new StandardWebClientServiceProvider();
@@ -156,9 +161,10 @@ class GetShopifyTest {
 
     @Test
     void testNonEmptyJsonResponseSentToSuccess() throws 
InitializationException, IOException {
-        final MockResponse mockResponse = new MockResponse()
-                .setResponseCode(200)
-                .setBody(getResourceAsString("collection_listings.json"));
+        final MockResponse mockResponse = new MockResponse.Builder()
+                .code(200)
+                .body(getResourceAsString("collection_listings.json"))
+                .build();
         server.enqueue(mockResponse);
 
         final StandardWebClientServiceProvider 
standardWebClientServiceProvider =
diff --git 
a/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml 
b/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml
index 705f43f585..d783ed3299 100644
--- a/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml
@@ -45,7 +45,11 @@
 
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>okhttp-jvm</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/services/slack/TestSlackRecordSink.java
 
b/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/services/slack/TestSlackRecordSink.java
index 8ab2896d7b..90057e246f 100644
--- 
a/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/services/slack/TestSlackRecordSink.java
+++ 
b/nifi-extension-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/services/slack/TestSlackRecordSink.java
@@ -18,9 +18,9 @@ package org.apache.nifi.services.slack;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.serialization.SimpleRecordSchema;
 import org.apache.nifi.serialization.WriteResult;
@@ -119,7 +119,7 @@ public class TestSlackRecordSink {
 
     @AfterEach
     public void cleanUp() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -128,7 +128,10 @@ public class TestSlackRecordSink {
         testRunner.assertValid(slackRecordSink);
         testRunner.enableControllerService(slackRecordSink);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(RESPONSE_SUCCESS_TEXT_MSG_WITH_TIMESTAMP));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(RESPONSE_SUCCESS_TEXT_MSG_WITH_TIMESTAMP)
+                .build());
 
         final WriteResult writeResult = slackRecordSink.sendData(recordSet, 
Collections.emptyMap(), false);
 
@@ -162,7 +165,9 @@ public class TestSlackRecordSink {
         testRunner.assertValid(slackRecordSink);
         testRunner.enableControllerService(slackRecordSink);
 
-        mockWebServer.enqueue(new MockResponse().setResponseCode(500));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(500)
+                .build());
 
         final IOException e = assertThrows(IOException.class, () -> 
slackRecordSink.sendData(recordSet, Collections.emptyMap(), false));
         assertTrue(e.getCause().getMessage().contains("500"));
@@ -174,7 +179,10 @@ public class TestSlackRecordSink {
         testRunner.assertValid(slackRecordSink);
         testRunner.enableControllerService(slackRecordSink);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(RESPONSE_ERROR));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(RESPONSE_ERROR)
+                .build());
 
         final IOException e = assertThrows(IOException.class, () -> 
slackRecordSink.sendData(recordSet, Collections.emptyMap(), false));
         assertTrue(e.getCause().getMessage().contains("slack-error"));
@@ -186,7 +194,10 @@ public class TestSlackRecordSink {
         testRunner.assertValid(slackRecordSink);
         testRunner.enableControllerService(slackRecordSink);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(RESPONSE_WARNING));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(RESPONSE_WARNING)
+                .build());
 
         assertDoesNotThrow(() -> {
             slackRecordSink.sendData(recordSet, Collections.emptyMap(), false);
@@ -199,7 +210,10 @@ public class TestSlackRecordSink {
         testRunner.assertValid(slackRecordSink);
         testRunner.enableControllerService(slackRecordSink);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(RESPONSE_EMPTY_JSON));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(RESPONSE_EMPTY_JSON)
+                .build());
 
         final IOException e = assertThrows(IOException.class, () -> 
slackRecordSink.sendData(recordSet, Collections.emptyMap(), false));
         assertTrue(e.getCause().getMessage().contains("null"));
@@ -211,7 +225,10 @@ public class TestSlackRecordSink {
         testRunner.assertValid(slackRecordSink);
         testRunner.enableControllerService(slackRecordSink);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(RESPONSE_INVALID_JSON));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(RESPONSE_INVALID_JSON)
+                .build());
 
         final IOException e = assertThrows(IOException.class, () -> 
slackRecordSink.sendData(recordSet, Collections.emptyMap(), false));
         assertTrue(e.getCause().getMessage().contains("parsing"));
@@ -220,7 +237,7 @@ public class TestSlackRecordSink {
     private JsonNode getRequestBodyJson() {
         try {
             final RecordedRequest recordedRequest = 
mockWebServer.takeRequest();
-            return mapper.readTree(recordedRequest.getBody().inputStream());
+            return mapper.readTree(recordedRequest.getBody().toByteArray());
         } catch (final Exception e) {
             throw new RuntimeException(e);
         }
diff --git 
a/nifi-extension-bundles/nifi-snowflake-bundle/nifi-snowflake-processors/pom.xml
 
b/nifi-extension-bundles/nifi-snowflake-bundle/nifi-snowflake-processors/pom.xml
index 52dc6408b2..0ae3cd5010 100644
--- 
a/nifi-extension-bundles/nifi-snowflake-bundle/nifi-snowflake-processors/pom.xml
+++ 
b/nifi-extension-bundles/nifi-snowflake-bundle/nifi-snowflake-processors/pom.xml
@@ -56,7 +56,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
index 068b1ed3d9..05c4ebabc2 100644
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
+++ 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
@@ -48,7 +48,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
index 10d0383e3f..5d177b283d 100644
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
+++ 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
@@ -16,8 +16,8 @@
  */
 package org.apache.nifi.processors.twitter;
 
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
 import org.apache.nifi.flowfile.attributes.CoreAttributes;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
@@ -35,8 +35,9 @@ public class TestConsumeTwitter {
     private TestRunner runner;
 
     @BeforeEach
-    public void setRunnerAndAPI() {
+    public void setRunnerAndAPI() throws IOException {
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
 
         runner = TestRunners.newTestRunner(ConsumeTwitter.class);
 
@@ -47,17 +48,18 @@ public class TestConsumeTwitter {
 
     @AfterEach
     public void shutdownServerAndAPI() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
     @Timeout(60)
     public void testReceiveSingleTweetInStream() {
         String sampleTweet = "{\"data\":{\"id\":\"123\",\"text\":\"This is a 
sample tweet and is not real!\"}}";
-        MockResponse response = new MockResponse()
-                .setResponseCode(200)
-                .setBody(sampleTweet)
-                .addHeader("Content-Type", "application/json");
+        MockResponse response = new MockResponse.Builder()
+                .code(200)
+                .body(sampleTweet)
+                .addHeader("Content-Type", "application/json")
+                .build();
         mockWebServer.enqueue(response);
 
 
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml
index 486576c605..49cde8b812 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml
@@ -554,7 +554,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/InvokeHTTPTest.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/InvokeHTTPTest.java
index 2c1015e325..c7b06094e1 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/InvokeHTTPTest.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/InvokeHTTPTest.java
@@ -16,10 +16,9 @@
  */
 package org.apache.nifi.processors.standard;
 
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
-import okio.Buffer;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -62,6 +61,7 @@ import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.X509ExtendedTrustManager;
 import javax.security.auth.x500.X500Principal;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.net.Proxy;
 import java.net.URI;
@@ -196,8 +196,10 @@ public class InvokeHTTPTest {
     }
 
     @BeforeEach
-    public void setRunner() {
+    public void setRunner() throws IOException {
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
+
         runner = TestRunners.newTestRunner(new InvokeHTTP());
         // Disable Connection Pooling
         runner.setProperty(InvokeHTTP.SOCKET_IDLE_CONNECTIONS, 
Integer.toString(0));
@@ -205,7 +207,7 @@ public class InvokeHTTPTest {
 
     @AfterEach
     public void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -327,7 +329,10 @@ public class InvokeHTTPTest {
         setUrlProperty();
 
         final String body = String.class.getName();
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(body));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(body)
+                .build());
         runner.enqueue(FLOW_FILE_CONTENT);
         runner.run();
 
@@ -346,7 +351,10 @@ public class InvokeHTTPTest {
         runner.setNonLoopConnection(false);
 
         final String body = String.class.getName();
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(body));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(body)
+                .build());
         runner.run();
 
         assertRelationshipStatusCodeEquals(InvokeHTTP.ORIGINAL, HTTP_OK);
@@ -361,7 +369,9 @@ public class InvokeHTTPTest {
         runner.setNonLoopConnection(false);
         setUrlProperty();
 
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
         runner.run();
 
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
@@ -388,7 +398,9 @@ public class InvokeHTTPTest {
         runner.setProperty(InvokeHTTP.HTTP_URL, mockWebServerUrl);
         
runner.setProperty(ProxyConfigurationService.PROXY_CONFIGURATION_SERVICE, 
proxyConfigurationServiceId);
 
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
         runner.enqueue(FLOW_FILE_CONTENT);
         runner.run();
 
@@ -402,7 +414,10 @@ public class InvokeHTTPTest {
 
     @Test
     public void testRunGetHttp200SuccessContentTypeHeaderMimeType() {
-        final MockResponse response = new 
MockResponse().setResponseCode(HTTP_OK).setHeader(CONTENT_TYPE_HEADER, 
TEXT_PLAIN);
+        final MockResponse response = new MockResponse.Builder()
+                .code(HTTP_OK)
+                .addHeader(CONTENT_TYPE_HEADER, TEXT_PLAIN)
+                .build();
         mockWebServer.enqueue(response);
 
         setUrlProperty();
@@ -426,7 +441,7 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String dateHeader = request.getHeader(DATE_HEADER);
+        final String dateHeader = request.getHeaders().get(DATE_HEADER);
         assertNotNull(dateHeader, "Request Date not found");
 
         final Pattern rfcDatePattern = Pattern.compile("^.+? \\d{4} 
\\d{2}:\\d{2}:\\d{2} GMT$");
@@ -442,7 +457,9 @@ public class InvokeHTTPTest {
         final String defaultContentTypeHeader = "Default-Content-Type";
         runner.setProperty(defaultContentTypeHeader, 
InvokeHTTP.DEFAULT_CONTENT_TYPE);
         setUrlProperty();
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
 
         final Map<String, String> attributes = new HashMap<>();
         attributes.put(ACCEPT_HEADER, TEXT_PLAIN);
@@ -453,21 +470,23 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String acceptHeader = request.getHeader(ACCEPT_HEADER);
+        final String acceptHeader = request.getHeaders().get(ACCEPT_HEADER);
         assertEquals(TEXT_PLAIN, acceptHeader);
 
-        final String contentType = request.getHeader(defaultContentTypeHeader);
+        final String contentType = 
request.getHeaders().get(defaultContentTypeHeader);
         assertEquals(InvokeHTTP.DEFAULT_CONTENT_TYPE, contentType);
 
         runner.removeProperty(InvokeHTTP.REQUEST_HEADER_ATTRIBUTES_PATTERN);
         runner.removeProperty(defaultContentTypeHeader);
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
         runner.enqueue(FLOW_FILE_CONTENT, attributes);
         runner.run();
 
         final RecordedRequest secondRequest = takeRequestCompleted();
-        assertNull(secondRequest.getHeader(ACCEPT_HEADER), "Accept Header 
found");
-        assertNull(secondRequest.getHeader(defaultContentTypeHeader), 
"Default-Content-Type Header found");
+        assertNull(secondRequest.getHeaders().get(ACCEPT_HEADER), "Accept 
Header found");
+        assertNull(secondRequest.getHeaders().get(defaultContentTypeHeader), 
"Default-Content-Type Header found");
     }
 
     @Test
@@ -479,10 +498,11 @@ public class InvokeHTTPTest {
 
         final String firstHeader = String.class.getSimpleName();
         final String secondHeader = Integer.class.getSimpleName();
-        final MockResponse response = new MockResponse()
-                .setResponseCode(HTTP_OK)
+        final MockResponse response = new MockResponse.Builder()
+                .code(HTTP_OK)
                 .addHeader(REPEATED_HEADER, firstHeader)
-                .addHeader(REPEATED_HEADER, secondHeader);
+                .addHeader(REPEATED_HEADER, secondHeader)
+                .build();
 
         mockWebServer.enqueue(response);
         runner.enqueue(FLOW_FILE_CONTENT);
@@ -525,7 +545,7 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String authorization = request.getHeader(AUTHORIZATION_HEADER);
+        final String authorization = 
request.getHeaders().get(AUTHORIZATION_HEADER);
         assertNotNull(authorization, "Authorization Header not found");
 
         final Pattern basicAuthPattern = Pattern.compile("^Basic \\S+$");
@@ -542,17 +562,20 @@ public class InvokeHTTPTest {
         final String nonce = UUID.randomUUID().toString();
         final String digestHeader = String.format("Digest realm=\"%s\", 
nonce=\"%s\"", realm, nonce);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_UNAUTHORIZED).setHeader(AUTHENTICATE_HEADER,
 digestHeader));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_UNAUTHORIZED)
+                .addHeader(AUTHENTICATE_HEADER, digestHeader)
+                .build());
         enqueueResponseCodeAndRun(HTTP_OK);
 
         assertResponseSuccessRelationships();
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        assertNull(request.getHeader(AUTHORIZATION_HEADER), "Authorization 
Header found");
+        assertNull(request.getHeaders().get(AUTHORIZATION_HEADER), 
"Authorization Header found");
 
         final RecordedRequest authenticatedRequest = takeRequestCompleted();
-        final String authorization = 
authenticatedRequest.getHeader(AUTHORIZATION_HEADER);
+        final String authorization = 
authenticatedRequest.getHeaders().get(AUTHORIZATION_HEADER);
         assertNotNull(authorization, "Authorization Header not found");
         assertTrue(authorization.contains(realm), "Digest Realm not found");
         assertTrue(authorization.contains(nonce), "Digest Nonce not found");
@@ -595,7 +618,7 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String userAgentHeader = request.getHeader(USER_AGENT_HEADER);
+        final String userAgentHeader = 
request.getHeaders().get(USER_AGENT_HEADER);
         assertEquals(userAgent, userAgentHeader);
     }
 
@@ -606,7 +629,9 @@ public class InvokeHTTPTest {
         final String encodedUrl = 
URLValidator.createURL(nonEncodedUrl).toExternalForm();
 
         runner.setProperty(InvokeHTTP.HTTP_URL, nonEncodedUrl);
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
         runner.enqueue(FLOW_FILE_CONTENT);
         runner.run();
 
@@ -630,7 +655,10 @@ public class InvokeHTTPTest {
 
     @Test
     public void testRunGetHttp302NoRetryResponseRedirectsDefaultEnabled() {
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_MOVED_TEMP).setHeader(LOCATION_HEADER, 
getMockWebServerUrl()));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_MOVED_TEMP)
+                .addHeader(LOCATION_HEADER, getMockWebServerUrl())
+                .build());
         enqueueResponseCodeAndRun(HTTP_OK);
 
         runner.assertTransferCount(InvokeHTTP.FAILURE, 0);
@@ -651,18 +679,20 @@ public class InvokeHTTPTest {
     @Test
     public void testRunGetHttp302CookieStrategyAcceptAll() throws 
InterruptedException {
         runner.setProperty(InvokeHTTP.RESPONSE_COOKIE_STRATEGY, 
CookieStrategy.ACCEPT_ALL.name());
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_MOVED_TEMP)
-            .addHeader(SET_COOKIE_HEADER, COOKIE_1)
-            .addHeader(SET_COOKIE_HEADER, COOKIE_2)
-            .addHeader(LOCATION_HEADER, getMockWebServerUrl()));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_MOVED_TEMP)
+                .addHeader(SET_COOKIE_HEADER, COOKIE_1)
+                .addHeader(SET_COOKIE_HEADER, COOKIE_2)
+                .addHeader(LOCATION_HEADER, getMockWebServerUrl())
+                .build());
         enqueueResponseCodeAndRun(HTTP_OK);
 
         RecordedRequest request1 = mockWebServer.takeRequest();
-        assertNull(request1.getHeader(COOKIE_HEADER));
+        assertNull(request1.getHeaders().get(COOKIE_HEADER));
 
         RecordedRequest request2 = mockWebServer.takeRequest();
         final String expectedHeader = String.format("%s; %s", COOKIE_1, 
COOKIE_2);
-        assertEquals(expectedHeader, request2.getHeader(COOKIE_HEADER));
+        assertEquals(expectedHeader, request2.getHeaders().get(COOKIE_HEADER));
 
         runner.assertTransferCount(InvokeHTTP.FAILURE, 0);
         runner.assertTransferCount(InvokeHTTP.NO_RETRY, 0);
@@ -671,17 +701,19 @@ public class InvokeHTTPTest {
 
     @Test
     public void testRunGetHttp302CookieStrategyDefaultDisabled() throws 
InterruptedException {
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_MOVED_TEMP)
-            .addHeader(SET_COOKIE_HEADER, COOKIE_1)
-            .addHeader(SET_COOKIE_HEADER, COOKIE_2)
-            .addHeader(LOCATION_HEADER, getMockWebServerUrl()));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_MOVED_TEMP)
+                .addHeader(SET_COOKIE_HEADER, COOKIE_1)
+                .addHeader(SET_COOKIE_HEADER, COOKIE_2)
+                .addHeader(LOCATION_HEADER, getMockWebServerUrl())
+                .build());
         enqueueResponseCodeAndRun(HTTP_OK);
 
         RecordedRequest request1 = mockWebServer.takeRequest();
-        assertNull(request1.getHeader(COOKIE_HEADER));
+        assertNull(request1.getHeaders().get(COOKIE_HEADER));
 
         RecordedRequest request2 = mockWebServer.takeRequest();
-        assertNull(request2.getHeader(COOKIE_HEADER));
+        assertNull(request2.getHeaders().get(COOKIE_HEADER));
 
         runner.assertTransferCount(InvokeHTTP.FAILURE, 0);
         runner.assertTransferCount(InvokeHTTP.NO_RETRY, 0);
@@ -771,14 +803,14 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String contentLength = request.getHeader(CONTENT_LENGTH_HEADER);
+        final String contentLength = 
request.getHeaders().get(CONTENT_LENGTH_HEADER);
         assertNull(contentLength, "Content-Length Request Header found");
 
-        final String contentEncoding = 
request.getHeader(CONTENT_ENCODING_HEADER);
+        final String contentEncoding = 
request.getHeaders().get(CONTENT_ENCODING_HEADER);
         assertEquals(ContentEncodingStrategy.GZIP.getValue().toLowerCase(), 
contentEncoding);
 
-        final Buffer body = request.getBody();
-        try (final GZIPInputStream gzipInputStream = new 
GZIPInputStream(body.inputStream())) {
+        final byte[] body = request.getBody().toByteArray();
+        try (final GZIPInputStream gzipInputStream = new GZIPInputStream(new 
ByteArrayInputStream(body))) {
             final String decompressed = IOUtils.toString(gzipInputStream, 
StandardCharsets.UTF_8);
             assertEquals(FLOW_FILE_CONTENT, decompressed);
         }
@@ -795,10 +827,10 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String contentLength = request.getHeader(CONTENT_LENGTH_HEADER);
+        final String contentLength = 
request.getHeaders().get(CONTENT_LENGTH_HEADER);
         assertNull(contentLength, "Content-Length Request Header found");
 
-        final String transferEncoding = 
request.getHeader(TRANSFER_ENCODING_HEADER);
+        final String transferEncoding = 
request.getHeaders().get(TRANSFER_ENCODING_HEADER);
         assertEquals("chunked", transferEncoding);
     }
 
@@ -815,7 +847,9 @@ public class InvokeHTTPTest {
         runner.setProperty(formDataPropertyName, formDataParameter);
 
         setUrlProperty();
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
         runner.enqueue(FLOW_FILE_CONTENT);
         runner.run();
 
@@ -823,13 +857,13 @@ public class InvokeHTTPTest {
         assertRelationshipStatusCodeEquals(InvokeHTTP.RESPONSE, HTTP_OK);
 
         final RecordedRequest request = takeRequestCompleted();
-        final String contentType = request.getHeader(CONTENT_TYPE_HEADER);
+        final String contentType = 
request.getHeaders().get(CONTENT_TYPE_HEADER);
         assertNotNull(contentType, "Content Type not found");
 
         final Pattern multipartPattern = 
Pattern.compile("^multipart/form-data.+$");
         assertTrue(multipartPattern.matcher(contentType).matches(), "Content 
Type not matched");
 
-        final String body = request.getBody().readUtf8();
+        final String body = request.getBody().utf8();
         assertTrue(body.contains(formDataParameter), "Form Data Parameter not 
found");
     }
 
@@ -852,7 +886,9 @@ public class InvokeHTTPTest {
         ffAttributes.put(CoreAttributes.FILENAME.key(), 
FLOW_FILE_INITIAL_FILENAME);
         runner.enqueue(FLOW_FILE_CONTENT, ffAttributes);
 
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
 
         runner.run();
 
@@ -952,7 +988,7 @@ public class InvokeHTTPTest {
 
         setUrlProperty();
 
-        mockWebServer.enqueue(new MockResponse());
+        mockWebServer.enqueue(new MockResponse.Builder().build());
 
         runner.setProperty(InvokeHTTP.REQUEST_OAUTH2_ACCESS_TOKEN_PROVIDER, 
oauth2AccessTokenProviderId);
         runner.enqueue("unimportant");
@@ -960,7 +996,7 @@ public class InvokeHTTPTest {
 
         RecordedRequest recordedRequest = mockWebServer.takeRequest();
 
-        String actualAuthorizationHeader = 
recordedRequest.getHeader(HttpHeader.AUTHORIZATION.getHeader());
+        String actualAuthorizationHeader = 
recordedRequest.getHeaders().get(HttpHeader.AUTHORIZATION.getHeader());
         assertEquals("Bearer " + accessToken, actualAuthorizationHeader);
 
     }
@@ -983,7 +1019,7 @@ public class InvokeHTTPTest {
         enqueueResponseCodeAndRun(HTTP_UNAUTHORIZED);
 
         RecordedRequest recordedRequest = mockWebServer.takeRequest();
-        String actualAuthorizationHeader = 
recordedRequest.getHeader(HttpHeader.AUTHORIZATION.getHeader());
+        String actualAuthorizationHeader = 
recordedRequest.getHeaders().get(HttpHeader.AUTHORIZATION.getHeader());
         assertEquals("Bearer " + accessToken, actualAuthorizationHeader);
 
         assertRelationshipStatusCodeEquals(InvokeHTTP.NO_RETRY, 
HTTP_UNAUTHORIZED);
@@ -994,7 +1030,7 @@ public class InvokeHTTPTest {
         enqueueResponseCodeAndRun(HTTP_OK);
 
         recordedRequest = mockWebServer.takeRequest();
-        actualAuthorizationHeader = 
recordedRequest.getHeader(HttpHeader.AUTHORIZATION.getHeader());
+        actualAuthorizationHeader = 
recordedRequest.getHeaders().get(HttpHeader.AUTHORIZATION.getHeader());
         assertEquals("Bearer " + refreshedAccessToken, 
actualAuthorizationHeader);
 
         assertResponseSuccessRelationships();
@@ -1011,7 +1047,9 @@ public class InvokeHTTPTest {
 
     private void enqueueResponseCodeAndRun(final int responseCode) {
         setUrlProperty();
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(responseCode));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(responseCode)
+                .build());
         runner.enqueue(FLOW_FILE_CONTENT);
         runner.run();
     }
@@ -1113,6 +1151,6 @@ public class InvokeHTTPTest {
         if (sslSocketFactory == null) {
             throw new IllegalArgumentException("Socket Factory not found");
         }
-        mockWebServer.useHttps(sslSocketFactory, false);
+        mockWebServer.useHttps(sslSocketFactory);
     }
 }
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/pom.xml
 
b/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/pom.xml
index 605215cfc0..0731b51bbd 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/pom.xml
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/pom.xml
@@ -88,7 +88,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
+            <artifactId>okhttp-jvm</artifactId>
         </dependency>
         <dependency>
             <groupId>com.squareup.okio</groupId>
@@ -124,7 +124,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/test/java/org/apache/nifi/lookup/TestRestLookupService.java
 
b/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/test/java/org/apache/nifi/lookup/TestRestLookupService.java
index 04901cc123..b8ba05777a 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/test/java/org/apache/nifi/lookup/TestRestLookupService.java
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/test/java/org/apache/nifi/lookup/TestRestLookupService.java
@@ -16,9 +16,9 @@
  */
 package org.apache.nifi.lookup;
 
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.nifi.oauth2.OAuth2AccessTokenProvider;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.serialization.RecordReader;
@@ -27,9 +27,9 @@ import org.apache.nifi.serialization.record.Record;
 import org.apache.nifi.util.NoOpProcessor;
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
-import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Answers;
@@ -38,7 +38,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.io.IOException;
 import java.net.SocketTimeoutException;
-import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -96,8 +95,9 @@ class TestRestLookupService {
     private RestLookupService restLookupService;
 
     @BeforeEach
-    void setRunner() throws InitializationException {
+    void setRunner() throws InitializationException, IOException {
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
 
         runner = TestRunners.newTestRunner(NoOpProcessor.class);
 
@@ -116,7 +116,7 @@ class TestRestLookupService {
 
     @AfterEach
     void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -133,7 +133,9 @@ class TestRestLookupService {
         runner.enableControllerService(restLookupService);
 
         when(recordReaderFactory.createRecordReader(any(), any(), anyLong(), 
any())).thenReturn(recordReader);
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
 
         final Optional<Record> recordFound = 
restLookupService.lookup(Collections.emptyMap());
         assertFalse(recordFound.isPresent());
@@ -147,7 +149,9 @@ class TestRestLookupService {
 
         when(recordReaderFactory.createRecordReader(any(), any(), anyLong(), 
any())).thenReturn(recordReader);
         when(recordReader.nextRecord()).thenReturn(record);
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
 
         final Optional<Record> recordFound = 
restLookupService.lookup(Collections.emptyMap());
         assertTrue(recordFound.isPresent());
@@ -161,7 +165,9 @@ class TestRestLookupService {
 
         when(recordReaderFactory.createRecordReader(any(), any(), anyLong(), 
any())).thenReturn(recordReader);
         when(recordReader.nextRecord()).thenReturn(record);
-        mockWebServer.enqueue(new MockResponse().setResponseCode(HTTP_OK));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .build());
 
         final Map<String, Object> coordinates = new LinkedHashMap<>();
         coordinates.put(RestLookupService.METHOD_KEY, POST_METHOD);
@@ -182,9 +188,11 @@ class TestRestLookupService {
         when(recordReaderFactory.createRecordReader(any(), any(), anyLong(), 
any())).thenReturn(recordReader);
         when(recordReader.nextRecord()).thenReturn(record);
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_NOT_FOUND)
-                .setHeader("Content-type", "application/json")
-                .setBody("{\"error\": { \"code\": 404 } }"));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_NOT_FOUND)
+                .addHeader("Content-type", "application/json")
+                .body("{\"error\": { \"code\": 404 } }")
+                .build());
 
         final Optional<Record> recordFound = 
restLookupService.lookup(Collections.emptyMap());
         assertTrue(recordFound.isPresent());
@@ -194,7 +202,9 @@ class TestRestLookupService {
     void testLookupResponseHandlingStrategyEvaluated() {
         runner.setProperty(restLookupService, 
RestLookupService.RESPONSE_HANDLING_STRATEGY, 
ResponseHandlingStrategy.EVALUATED);
         runner.enableControllerService(restLookupService);
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(HTTP_NOT_FOUND));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(HTTP_NOT_FOUND)
+                .build());
 
         final LookupFailureException exception = 
assertThrows(LookupFailureException.class, () -> 
restLookupService.lookup(Collections.emptyMap()));
         assertInstanceOf(IOException.class, exception.getCause());
@@ -217,14 +227,14 @@ class TestRestLookupService {
 
         when(recordReaderFactory.createRecordReader(any(), any(), anyLong(), 
any())).thenReturn(recordReader);
         when(recordReader.nextRecord()).thenReturn(record);
-        mockWebServer.enqueue(new MockResponse());
+        mockWebServer.enqueue(new MockResponse.Builder().build());
 
         final Optional<Record> recordFound = 
restLookupService.lookup(Collections.emptyMap());
         assertTrue(recordFound.isPresent());
 
         RecordedRequest recordedRequest = mockWebServer.takeRequest();
 
-        String actualAuthorizationHeader = 
recordedRequest.getHeader("Authorization");
+        String actualAuthorizationHeader = 
recordedRequest.getHeaders().get("Authorization");
         assertEquals("Bearer " + accessToken, actualAuthorizationHeader);
 
     }
@@ -233,17 +243,17 @@ class TestRestLookupService {
         final RecordedRequest request = mockWebServer.takeRequest();
 
         assertEquals(GET_METHOD, request.getMethod());
-        assertEquals(ROOT_PATH, request.getPath());
+        assertEquals(ROOT_PATH, request.getTarget());
     }
 
     private void assertPostRecordedRequestFound() throws InterruptedException {
         final RecordedRequest request = mockWebServer.takeRequest();
 
         assertEquals(POST_METHOD, request.getMethod());
-        assertEquals(ROOT_PATH, request.getPath());
-        assertEquals(APPLICATION_JSON, request.getHeader(CONTENT_TYPE_HEADER));
+        assertEquals(ROOT_PATH, request.getTarget());
+        assertEquals(APPLICATION_JSON, 
request.getHeaders().get(CONTENT_TYPE_HEADER));
 
-        final String body = 
request.getBody().readString(StandardCharsets.UTF_8);
+        final String body = request.getBody().utf8();
         assertEquals(POST_BODY, body);
     }
 }
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
 
b/nifi-extension-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
index 8148059019..5f421b82b0 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-oauth2-provider-bundle/nifi-oauth2-provider-service/pom.xml
@@ -49,7 +49,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
+            <artifactId>okhttp-jvm</artifactId>
         </dependency>
         <dependency>
             <groupId>com.nimbusds</groupId>
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/pom.xml
 
b/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/pom.xml
index 060981c484..0705217aa7 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/pom.xml
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/pom.xml
@@ -59,7 +59,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/src/test/java/org/apache/nifi/record/sink/TestHttpRecordSink.java
 
b/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/src/test/java/org/apache/nifi/record/sink/TestHttpRecordSink.java
index 8c5ada3f3b..5c8bd6cccb 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/src/test/java/org/apache/nifi/record/sink/TestHttpRecordSink.java
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-record-sink-service-bundle/nifi-record-sink-service/src/test/java/org/apache/nifi/record/sink/TestHttpRecordSink.java
@@ -18,9 +18,9 @@
 package org.apache.nifi.record.sink;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.nifi.json.JsonRecordSetWriter;
 import org.apache.nifi.oauth2.OAuth2AccessTokenProvider;
 import org.apache.nifi.reporting.InitializationException;
@@ -46,7 +46,6 @@ import org.junit.jupiter.api.Test;
 import org.mockito.Answers;
 
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -146,7 +145,7 @@ public class TestHttpRecordSink {
 
     @AfterEach
     public void cleanUpEachTest() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -250,7 +249,7 @@ public class TestHttpRecordSink {
         testRunner.enableControllerService(httpRecordSink);
 
         for (int i = 0; i < expectedRequestCount; i++) {
-            mockWebServer.enqueue(new MockResponse());
+            mockWebServer.enqueue(new MockResponse.Builder().build());
         }
 
         final WriteResult writeResult = httpRecordSink.sendData(recordSetIn, 
Collections.emptyMap(), false);
@@ -263,7 +262,7 @@ public class TestHttpRecordSink {
 
         for (int i = 0; i < expectedRequestCount; i++) {
             RecordedRequest recordedRequest = mockWebServer.takeRequest();
-            String requestBody = 
recordedRequest.getBody().readString(StandardCharsets.UTF_8);
+            String requestBody = recordedRequest.getBody().utf8();
             Person[] people =
                     (maxBatchSize == 1)
                             ? new Person[] {
@@ -277,10 +276,10 @@ public class TestHttpRecordSink {
                 assertTrue(people[personIndex].equals(records[compareIndex]), 
"Mismatch - Expected: " + records[compareIndex].toMap().toString() +
                         " Actual: {" + people[personIndex].toString() + "} 
order of fields can be ignored.");
             }
-            String actualContentTypeHeader = 
recordedRequest.getHeader(HttpHeader.CONTENT_TYPE.toString());
+            String actualContentTypeHeader = 
recordedRequest.getHeaders().get(HttpHeader.CONTENT_TYPE.toString());
             assertEquals(expectedContentType != null ? expectedContentType : 
"application/json", actualContentTypeHeader);
 
-            String actualAuthorizationHeader = 
recordedRequest.getHeader(HttpHeader.AUTHORIZATION.toString());
+            String actualAuthorizationHeader = 
recordedRequest.getHeaders().get(HttpHeader.AUTHORIZATION.toString());
             assertEquals("Bearer " + (expectedAuthorization != null ? 
expectedAuthorization : OAUTH_ACCESS_TOKEN),
                     actualAuthorizationHeader);
         }
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/pom.xml
 
b/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/pom.xml
index 6c4f3b3f4f..457ac2c7a8 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/pom.xml
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/pom.xml
@@ -61,7 +61,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/src/test/java/org/apache/nifi/web/client/provider/service/StandardWebClientServiceProviderTest.java
 
b/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/src/test/java/org/apache/nifi/web/client/provider/service/StandardWebClientServiceProviderTest.java
index b8564b713d..d067d54937 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/src/test/java/org/apache/nifi/web/client/provider/service/StandardWebClientServiceProviderTest.java
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-web-client-provider-bundle/nifi-web-client-provider-service/src/test/java/org/apache/nifi/web/client/provider/service/StandardWebClientServiceProviderTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.nifi.web.client.provider.service;
 
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import okhttp3.Credentials;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
 import org.apache.nifi.proxy.ProxyConfiguration;
 import org.apache.nifi.proxy.ProxyConfigurationService;
 import org.apache.nifi.reporting.InitializationException;
@@ -48,6 +48,7 @@ import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.X509TrustManager;
 import javax.security.auth.x500.X500Principal;
+
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
@@ -93,8 +94,6 @@ class StandardWebClientServiceProviderTest {
 
     private static final String PROXY_AUTHORIZATION_HEADER = 
"Proxy-Authorization";
 
-    private static final boolean TUNNEL_PROXY_DISABLED = false;
-
     static SSLContext sslContext;
 
     static X509TrustManager trustManager;
@@ -130,8 +129,9 @@ class StandardWebClientServiceProviderTest {
     }
 
     @BeforeEach
-    void setRunner() throws InitializationException {
+    void setRunner() throws InitializationException, IOException {
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
 
         runner = TestRunners.newTestRunner(NoOpProcessor.class);
 
@@ -141,7 +141,7 @@ class StandardWebClientServiceProviderTest {
 
     @AfterEach
     void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -193,14 +193,14 @@ class StandardWebClientServiceProviderTest {
         assertNotNull(webClientService);
 
         final SSLSocketFactory sslSocketFactory = 
sslContext.getSocketFactory();
-        mockWebServer.useHttps(sslSocketFactory, TUNNEL_PROXY_DISABLED);
+        mockWebServer.useHttps(sslSocketFactory);
 
         assertGetUriCompleted(webClientService);
     }
 
     @Test
     void testGetWebServiceClientProxyConfigurationGetUri() throws 
InitializationException, InterruptedException {
-        final Proxy proxy = mockWebServer.toProxyAddress();
+        final Proxy proxy = mockWebServer.getProxyAddress();
         final InetSocketAddress proxyAddress = (InetSocketAddress) 
proxy.address();
 
         final ProxyConfiguration proxyConfiguration = new ProxyConfiguration();
@@ -216,9 +216,10 @@ class StandardWebClientServiceProviderTest {
         
when(proxyConfigurationService.getIdentifier()).thenReturn(PROXY_SERVICE_ID);
         
when(proxyConfigurationService.getConfiguration()).thenReturn(proxyConfiguration);
 
-        mockWebServer.enqueue(new MockResponse()
-                
.setResponseCode(HttpResponseStatus.PROXY_AUTHENTICATION_REQUIRED.getCode())
-                .setHeader(PROXY_AUTHENTICATE_HEADER, 
PROXY_AUTHENTICATE_BASIC_REALM)
+        mockWebServer.enqueue(new MockResponse.Builder()
+                
.code(HttpResponseStatus.PROXY_AUTHENTICATION_REQUIRED.getCode())
+                .addHeader(PROXY_AUTHENTICATE_HEADER, 
PROXY_AUTHENTICATE_BASIC_REALM)
+                .build()
         );
 
         runner.addControllerService(PROXY_SERVICE_ID, 
proxyConfigurationService);
@@ -234,7 +235,7 @@ class StandardWebClientServiceProviderTest {
         assertGetUriCompleted(webClientService);
 
         final RecordedRequest proxyAuthorizationRequest = 
mockWebServer.takeRequest();
-        final String proxyAuthorization = 
proxyAuthorizationRequest.getHeader(PROXY_AUTHORIZATION_HEADER);
+        final String proxyAuthorization = 
proxyAuthorizationRequest.getHeaders().get(PROXY_AUTHORIZATION_HEADER);
         final String credentials = Credentials.basic(username, password);
         assertEquals(credentials, proxyAuthorization);
     }
@@ -243,7 +244,9 @@ class StandardWebClientServiceProviderTest {
         final URI uri = 
mockWebServer.url(ROOT_PATH).newBuilder().host(LOCALHOST).build().uri();
 
         final HttpResponseStatus httpResponseStatus = HttpResponseStatus.OK;
-        final MockResponse mockResponse = new 
MockResponse().setResponseCode(httpResponseStatus.getCode());
+        final MockResponse mockResponse = new MockResponse.Builder()
+                .code(httpResponseStatus.getCode())
+                .build();
         mockWebServer.enqueue(mockResponse);
 
         final HttpResponseEntity httpResponseEntity = 
webClientService.get().uri(uri).retrieve();
@@ -252,7 +255,7 @@ class StandardWebClientServiceProviderTest {
         assertEquals(httpResponseStatus.getCode(), 
httpResponseEntity.statusCode());
 
         final RecordedRequest request = mockWebServer.takeRequest();
-        final HttpUrl requestUrl = request.getRequestUrl();
+        final HttpUrl requestUrl = request.getUrl();
         assertNotNull(requestUrl);
 
         final URI requestUri = requestUrl.uri();
diff --git 
a/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/pom.xml 
b/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/pom.xml
index c3355d2ade..2fc7ad30ae 100644
--- a/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/pom.xml
@@ -52,7 +52,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git 
a/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/test/java/org/apache/nifi/processors/workday/GetWorkdayReportTest.java
 
b/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/test/java/org/apache/nifi/processors/workday/GetWorkdayReportTest.java
index 12e932d82c..c6bb368294 100644
--- 
a/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/test/java/org/apache/nifi/processors/workday/GetWorkdayReportTest.java
+++ 
b/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/test/java/org/apache/nifi/processors/workday/GetWorkdayReportTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.nifi.processors.workday;
 
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import org.apache.nifi.csv.CSVRecordSetWriter;
 import org.apache.nifi.flowfile.attributes.CoreAttributes;
 import org.apache.nifi.json.JsonTreeReader;
@@ -80,14 +80,15 @@ class GetWorkdayReportTest {
     private MockWebServer mockWebServer;
 
     @BeforeEach
-    public void setRunner() {
+    public void setRunner() throws IOException {
         runner = TestRunners.newTestRunner(new GetWorkdayReport());
         mockWebServer = new MockWebServer();
+        mockWebServer.start();
     }
 
     @AfterEach
     public void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Nested
@@ -222,7 +223,9 @@ class GetWorkdayReportTest {
         withWebClientService();
         runner.setProperty(GetWorkdayReport.REPORT_URL, getMockWebServerUrl());
 
-        mockWebServer.enqueue(new MockResponse().setResponseCode(500));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(500)
+                .build());
 
         runner.run();
 
@@ -240,7 +243,9 @@ class GetWorkdayReportTest {
         withWebClientService();
         runner.setProperty(GetWorkdayReport.REPORT_URL, getMockWebServerUrl());
 
-        mockWebServer.enqueue(new MockResponse().setResponseCode(500));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(500)
+                .build());
 
         runner.enqueue("test");
         runner.run();
@@ -280,7 +285,11 @@ class GetWorkdayReportTest {
         runner.setProperty(GetWorkdayReport.REPORT_URL, getMockWebServerUrl());
 
         String content = "id,name\n1,2";
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(content).setHeader(CONTENT_TYPE, 
TEXT_CSV));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(content)
+                .addHeader(CONTENT_TYPE, TEXT_CSV)
+                .build());
 
         runner.run();
 
@@ -305,7 +314,11 @@ class GetWorkdayReportTest {
         runner.setProperty(GetWorkdayReport.REPORT_URL, getMockWebServerUrl());
 
         String content = "id,name\n1,2";
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(content).setHeader(CONTENT_TYPE, 
TEXT_CSV));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(content)
+                .addHeader(CONTENT_TYPE, TEXT_CSV)
+                .build());
         runner.enqueue("");
 
         runner.run();
@@ -337,7 +350,11 @@ class GetWorkdayReportTest {
 
         String jsonContent = "{\"id\": 1, \"name\": \"test\"}";
         String csvContent = "id,name\n1,test\n";
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setBody(jsonContent).setHeader(CONTENT_TYPE,
 APPLICATION_JSON));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .body(jsonContent)
+                .addHeader(CONTENT_TYPE, APPLICATION_JSON)
+                .build());
 
         runner.run();
 
@@ -362,12 +379,15 @@ class GetWorkdayReportTest {
         runner.setProperty(GetWorkdayReport.AUTH_TYPE, 
GetWorkdayReport.OAUTH_TYPE);
         withAccessTokenProvider();
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setHeader(CONTENT_TYPE, APPLICATION_JSON));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .addHeader(CONTENT_TYPE, APPLICATION_JSON)
+                .build());
 
         runner.run();
 
         RecordedRequest recordedRequest = mockWebServer.takeRequest(1, 
TimeUnit.SECONDS);
-        String authorization = recordedRequest.getHeader(HEADER_AUTHORIZATION);
+        String authorization = 
recordedRequest.getHeaders().get(HEADER_AUTHORIZATION);
         assertNotNull(authorization, "Authorization Header not found");
 
         Pattern bearerPattern = Pattern.compile("^Bearer \\S+$");
@@ -382,12 +402,15 @@ class GetWorkdayReportTest {
         withWebClientService();
         runner.setProperty(GetWorkdayReport.REPORT_URL, getMockWebServerUrl());
 
-        mockWebServer.enqueue(new 
MockResponse().setResponseCode(200).setHeader(CONTENT_TYPE, APPLICATION_JSON));
+        mockWebServer.enqueue(new MockResponse.Builder()
+                .code(200)
+                .addHeader(CONTENT_TYPE, APPLICATION_JSON)
+                .build());
 
         runner.run();
 
         RecordedRequest recordedRequest = mockWebServer.takeRequest(1, 
TimeUnit.SECONDS);
-        String authorization = recordedRequest.getHeader(HEADER_AUTHORIZATION);
+        String authorization = 
recordedRequest.getHeaders().get(HEADER_AUTHORIZATION);
         assertNotNull(authorization, "Authorization Header not found");
 
         Pattern basicAuthPattern = Pattern.compile("^Basic \\S+$");
diff --git 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/pom.xml 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/pom.xml
index a6d3c83d7b..264fae2845 100644
--- a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/pom.xml
@@ -59,7 +59,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/GetZendeskTest.java
 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/GetZendeskTest.java
index 3ec43431f6..42795b53a6 100644
--- 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/GetZendeskTest.java
+++ 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/GetZendeskTest.java
@@ -17,10 +17,10 @@
 
 package org.apache.nifi.processors.zendesk;
 
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
 import org.apache.nifi.common.zendesk.ZendeskAuthenticationType;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.util.MockFlowFile;
@@ -50,9 +50,9 @@ import static 
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTIC
 import static 
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_SUBDOMAIN;
 import static org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_USER;
 import static org.apache.nifi.components.state.Scope.CLUSTER;
+import static 
org.apache.nifi.processors.zendesk.AbstractZendesk.RECORD_COUNT_ATTRIBUTE_NAME;
+import static org.apache.nifi.processors.zendesk.AbstractZendesk.REL_SUCCESS;
 import static 
org.apache.nifi.processors.zendesk.GetZendesk.HTTP_TOO_MANY_REQUESTS;
-import static 
org.apache.nifi.processors.zendesk.GetZendesk.RECORD_COUNT_ATTRIBUTE_NAME;
-import static org.apache.nifi.processors.zendesk.GetZendesk.REL_SUCCESS;
 import static 
org.apache.nifi.processors.zendesk.GetZendesk.ZENDESK_EXPORT_METHOD;
 import static 
org.apache.nifi.processors.zendesk.GetZendesk.ZENDESK_QUERY_START_TIMESTAMP;
 import static org.apache.nifi.processors.zendesk.GetZendesk.ZENDESK_RESOURCE;
@@ -118,14 +118,17 @@ public class GetZendeskTest {
 
     @AfterEach
     void tearDown() throws IOException {
-        server.shutdown();
+        server.close();
     }
 
     @ParameterizedTest
     @MethodSource("supportedZendeskResourcesExportMethodCombinations")
     public void 
testQueryStartTimestampIsUsedWhenNoStateIsAvailable(ZendeskResource 
zendeskResource, ZendeskExportMethod exportMethod) throws InterruptedException {
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, zendeskResource);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, exportMethod);
 
@@ -136,14 +139,17 @@ public class GetZendeskTest {
         RecordedRequest request = server.takeRequest();
         assertEquals(
             zendeskResource.apiPath(exportMethod) + "?" + 
exportMethod.getInitialCursorQueryParameterName() + "=" + 
DEFAULT_QUERY_START_TIMESTAMP,
-            request.getPath());
+                request.getTarget());
     }
 
     @ParameterizedTest
     @MethodSource("supportedZendeskResourcesExportMethodCombinations")
     public void testCursorFromStateIsUsedWhenStateIsAvailable(ZendeskResource 
zendeskResource, ZendeskExportMethod exportMethod) throws InterruptedException, 
IOException {
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, zendeskResource);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, exportMethod);
         
testRunner.getStateManager().setState(singletonMap(zendeskResource.getValue() + 
exportMethod.getValue(), DEFAULT_CURSOR_VALUE), CLUSTER);
@@ -155,15 +161,17 @@ public class GetZendeskTest {
         RecordedRequest request = server.takeRequest();
         assertEquals(
             zendeskResource.apiPath(exportMethod) + "?" + 
exportMethod.getCursorQueryParameterName() + "=" + DEFAULT_CURSOR_VALUE,
-            request.getPath());
+                request.getTarget());
     }
 
     @ParameterizedTest
     @MethodSource("supportedZendeskResourcesExportMethodCombinations")
     public void testCursorPositionIsStoredInState(ZendeskResource 
zendeskResource, ZendeskExportMethod exportMethod) throws IOException {
         // given
-        server.enqueue(new MockResponse().setResponseCode(HTTP_OK)
-            .setBody(format(RESPONSE_WITH_CURSOR_FIELD_TEMPLATE, 
exportMethod.getCursorJsonFieldName())));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(format(RESPONSE_WITH_CURSOR_FIELD_TEMPLATE, 
exportMethod.getCursorJsonFieldName()))
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, zendeskResource);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, exportMethod);
         String stateKey = zendeskResource.getValue() + exportMethod.getValue();
@@ -180,8 +188,10 @@ public class GetZendeskTest {
     @MethodSource("supportedZendeskResourcesExportMethodCombinations")
     public void 
testFlowFileIsCreatedAndContentIsAddedAndFlowFileAttributeIsSet(ZendeskResource 
zendeskResource, ZendeskExportMethod exportMethod) throws InterruptedException {
         // given
-        server.enqueue(new MockResponse().setResponseCode(HTTP_OK)
-            .setBody(format(RESPONSE_WITH_THREE_RECORDS_TEMPLATE, 
zendeskResource.getResponseFieldName())));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(format(RESPONSE_WITH_THREE_RECORDS_TEMPLATE, 
zendeskResource.getResponseFieldName()))
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, zendeskResource);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, exportMethod);
 
@@ -200,8 +210,10 @@ public class GetZendeskTest {
     @MethodSource("supportedZendeskResourcesExportMethodCombinations")
     public void testNoFlowFileIsEmittedWhenZeroRecordsAreSent(ZendeskResource 
zendeskResource, ZendeskExportMethod exportMethod) throws InterruptedException {
         // given
-        server.enqueue(new MockResponse().setResponseCode(HTTP_OK)
-            .setBody(format(RESPONSE_WITH_ZERO_RECORDS_TEMPLATE, 
zendeskResource.getResponseFieldName())));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(format(RESPONSE_WITH_ZERO_RECORDS_TEMPLATE, 
zendeskResource.getResponseFieldName()))
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, zendeskResource);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, exportMethod);
 
@@ -216,7 +228,9 @@ public class GetZendeskTest {
     @Test
     public void 
testNoFlowFileIsEmittedWhenTooManyRequestResponseCodeReceived() {
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_TOO_MANY_REQUESTS));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_TOO_MANY_REQUESTS)
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, TICKETS);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, CURSOR);
 
@@ -231,8 +245,10 @@ public class GetZendeskTest {
     @Test
     public void testNoFlowFileIsEmittedWhenNonOkHttpResponseIsSent() {
         // given
-        server.enqueue(new MockResponse().setResponseCode(HTTP_BAD_REQUEST)
-            .setBody(format(RESPONSE_WITH_ZERO_RECORDS_TEMPLATE, 
TICKETS.getResponseFieldName())));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_BAD_REQUEST)
+                .body(format(RESPONSE_WITH_ZERO_RECORDS_TEMPLATE, 
TICKETS.getResponseFieldName()))
+                .build());
         testRunner.setProperty(ZENDESK_RESOURCE, TICKETS);
         testRunner.setProperty(ZENDESK_EXPORT_METHOD, CURSOR);
 
diff --git 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/PutZendeskTicketTest.java
 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/PutZendeskTicketTest.java
index e1c6763bef..98b2963610 100644
--- 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/PutZendeskTicketTest.java
+++ 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/test/java/org/apache/nifi/processors/zendesk/PutZendeskTicketTest.java
@@ -17,10 +17,10 @@
 package org.apache.nifi.processors.zendesk;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
 import org.apache.nifi.common.zendesk.ZendeskAuthenticationType;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.serialization.record.MockRecordParser;
@@ -49,9 +49,9 @@ import static 
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_TICKET_SU
 import static 
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_TICKET_TYPE;
 import static org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_USER;
 import static 
org.apache.nifi.processors.zendesk.AbstractZendesk.RECORD_COUNT_ATTRIBUTE_NAME;
+import static org.apache.nifi.processors.zendesk.AbstractZendesk.REL_SUCCESS;
 import static 
org.apache.nifi.processors.zendesk.PutZendeskTicket.RECORD_READER;
 import static org.apache.nifi.processors.zendesk.PutZendeskTicket.REL_FAILURE;
-import static org.apache.nifi.processors.zendesk.PutZendeskTicket.REL_SUCCESS;
 import static org.apache.nifi.util.TestRunners.newTestRunner;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -86,7 +86,7 @@ public class PutZendeskTicketTest {
 
     @AfterEach
     void tearDown() throws IOException {
-        server.shutdown();
+        server.close();
     }
 
     @Test
@@ -107,7 +107,10 @@ public class PutZendeskTicketTest {
         flowFile.setData(flowFileContent.getBytes());
 
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
 
         // when
         testRunner.enqueue(flowFile);
@@ -115,8 +118,8 @@ public class PutZendeskTicketTest {
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
-        assertEquals(OBJECT_MAPPER.readTree(flowFileContent), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
+        assertEquals(OBJECT_MAPPER.readTree(flowFileContent), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
         testRunner.assertAllFlowFilesTransferred(REL_SUCCESS);
     }
 
@@ -134,7 +137,10 @@ public class PutZendeskTicketTest {
         testRunner.setProperty(RECORD_READER, "mock-reader-factory");
 
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_TICKET_COMMENT_BODY, "@{/description}");
         testRunner.setProperty(ZENDESK_TICKET_SUBJECT, "@{/subject}");
         testRunner.setProperty(ZENDESK_TICKET_PRIORITY, "@{/priority}");
@@ -146,7 +152,7 @@ public class PutZendeskTicketTest {
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         String expectedBody =
                 "{\n" +
@@ -160,7 +166,7 @@ public class PutZendeskTicketTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
         testRunner.assertAllFlowFilesTransferred(REL_SUCCESS);
     }
 
@@ -176,7 +182,10 @@ public class PutZendeskTicketTest {
         testRunner.setProperty(RECORD_READER, "mock-reader-factory");
 
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_TICKET_COMMENT_BODY, "@{/description}");
 
         // when
@@ -185,7 +194,7 @@ public class PutZendeskTicketTest {
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKETS_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKETS_RESOURCE, 
recordedRequest.getTarget());
 
         String expectedBody =
                 "{\n" +
@@ -200,7 +209,7 @@ public class PutZendeskTicketTest {
                 "  } ]\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
         testRunner.assertAllFlowFilesTransferred(REL_SUCCESS);
     }
 
@@ -217,7 +226,10 @@ public class PutZendeskTicketTest {
         testRunner.setProperty(RECORD_READER, "mock-reader-factory");
 
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_TICKET_COMMENT_BODY, "@{/description}");
         testRunner.setProperty("/dp1/dynamicPropertyTarget1", 
"@{/dynamicPropertySource1}");
         testRunner.setProperty("/dp1/dp2/dp3/dynamicPropertyTarget2", 
"@{/dynamicPropertySource2}");
@@ -228,7 +240,7 @@ public class PutZendeskTicketTest {
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         String expectedBody =
                 "{\n" +
@@ -247,7 +259,7 @@ public class PutZendeskTicketTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
         testRunner.assertAllFlowFilesTransferred(REL_SUCCESS);
     }
 
@@ -264,7 +276,10 @@ public class PutZendeskTicketTest {
         testRunner.setProperty(RECORD_READER, "mock-reader-factory");
 
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_TICKET_COMMENT_BODY, "@{/description}");
         testRunner.setProperty("/dp1/dynamicPropertyTarget1", "Constant 1");
         testRunner.setProperty("/dp1/dp2/dp3/dynamicPropertyTarget2", 
"Constant2");
@@ -275,7 +290,7 @@ public class PutZendeskTicketTest {
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         String expectedBody =
                 "{\n" +
@@ -294,7 +309,7 @@ public class PutZendeskTicketTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
         testRunner.assertAllFlowFilesTransferred(REL_SUCCESS);
     }
 
@@ -309,7 +324,10 @@ public class PutZendeskTicketTest {
         testRunner.setProperty(RECORD_READER, "mock-reader-factory");
 
         // given
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_BAD_REQUEST).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_BAD_REQUEST)
+                .body(EMPTY_RESPONSE)
+                .build());
         testRunner.setProperty(ZENDESK_TICKET_COMMENT_BODY, "@{/description}");
 
         // when
diff --git 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/pom.xml 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/pom.xml
index f20fe4f1e4..75c0bc8b83 100644
--- a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/pom.xml
+++ b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/pom.xml
@@ -64,7 +64,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/test/java/org/apache/nifi/services/zendesk/ZendeskRecordSinkTest.java
 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/test/java/org/apache/nifi/services/zendesk/ZendeskRecordSinkTest.java
index ccaf608e59..ccf4f0d358 100644
--- 
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/test/java/org/apache/nifi/services/zendesk/ZendeskRecordSinkTest.java
+++ 
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/test/java/org/apache/nifi/services/zendesk/ZendeskRecordSinkTest.java
@@ -17,10 +17,10 @@
 package org.apache.nifi.services.zendesk;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
+import mockwebserver3.RecordedRequest;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
 import org.apache.nifi.common.zendesk.ZendeskAuthenticationType;
 import org.apache.nifi.reporting.InitializationException;
 import org.apache.nifi.serialization.SimpleRecordSchema;
@@ -98,7 +98,7 @@ public class ZendeskRecordSinkTest {
 
     @AfterEach
     void tearDown() throws IOException {
-        server.shutdown();
+        server.close();
     }
 
     private void initSingleTestRecord() {
@@ -170,14 +170,17 @@ public class ZendeskRecordSinkTest {
         testRunner.assertValid(sinkZendeskTicket);
         testRunner.enableControllerService(sinkZendeskTicket);
 
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
 
         initSingleTestRecord();
         WriteResult writeResult = sinkZendeskTicket.sendData(recordSet, 
Collections.emptyMap(), false);
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         assertNotNull(writeResult);
         assertEquals(1, writeResult.getRecordCount());
@@ -195,7 +198,7 @@ public class ZendeskRecordSinkTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
     }
 
     @Test
@@ -205,14 +208,17 @@ public class ZendeskRecordSinkTest {
         testRunner.assertValid(sinkZendeskTicket);
         testRunner.enableControllerService(sinkZendeskTicket);
 
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
 
         initMultipleTestRecord();
         WriteResult writeResult = sinkZendeskTicket.sendData(recordSet, 
Collections.emptyMap(), false);
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKETS_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKETS_RESOURCE, 
recordedRequest.getTarget());
 
         assertNotNull(writeResult);
         assertEquals(2, writeResult.getRecordCount());
@@ -233,7 +239,7 @@ public class ZendeskRecordSinkTest {
                 "  } ]\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
     }
 
     @Test
@@ -245,14 +251,17 @@ public class ZendeskRecordSinkTest {
         testRunner.assertValid(sinkZendeskTicket);
         testRunner.enableControllerService(sinkZendeskTicket);
 
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
 
         initSingleTestRecord();
         WriteResult writeResult = sinkZendeskTicket.sendData(recordSet, 
Collections.emptyMap(), false);
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         assertNotNull(writeResult);
         assertEquals(1, writeResult.getRecordCount());
@@ -275,7 +284,7 @@ public class ZendeskRecordSinkTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
     }
 
     @Test
@@ -287,14 +296,17 @@ public class ZendeskRecordSinkTest {
         testRunner.assertValid(sinkZendeskTicket);
         testRunner.enableControllerService(sinkZendeskTicket);
 
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
 
         initSingleTestRecord();
         WriteResult writeResult = sinkZendeskTicket.sendData(recordSet, 
Collections.emptyMap(), false);
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         assertNotNull(writeResult);
         assertEquals(1, writeResult.getRecordCount());
@@ -317,7 +329,7 @@ public class ZendeskRecordSinkTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
     }
 
     @Test
@@ -326,14 +338,17 @@ public class ZendeskRecordSinkTest {
         testRunner.assertValid(sinkZendeskTicket);
         testRunner.enableControllerService(sinkZendeskTicket);
 
-        server.enqueue(new 
MockResponse().setResponseCode(HTTP_OK).setBody(EMPTY_RESPONSE));
+        server.enqueue(new MockResponse.Builder()
+                .code(HTTP_OK)
+                .body(EMPTY_RESPONSE)
+                .build());
 
         initDuplicateRecords();
         WriteResult writeResult = sinkZendeskTicket.sendData(recordSet, 
Collections.emptyMap(), false);
 
         // then
         RecordedRequest recordedRequest = server.takeRequest();
-        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getPath());
+        assertEquals(ZENDESK_CREATE_TICKET_RESOURCE, 
recordedRequest.getTarget());
 
         assertNotNull(writeResult);
         assertEquals(1, writeResult.getRecordCount());
@@ -348,7 +363,7 @@ public class ZendeskRecordSinkTest {
                 "  }\n" +
                 "}";
 
-        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().inputStream()));
+        assertEquals(OBJECT_MAPPER.readTree(expectedBody), 
OBJECT_MAPPER.readTree(recordedRequest.getBody().toByteArray()));
     }
 
     class TestZendeskRecordSink extends ZendeskRecordSink {
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/pom.xml 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/pom.xml
index e8d87efacb..737532e2d2 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/pom.xml
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/pom.xml
@@ -315,7 +315,7 @@
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver</artifactId>
+            <artifactId>mockwebserver3</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/saml2/registration/StandardRegistrationBuilderProviderTest.java
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/saml2/registration/StandardRegistrationBuilderProviderTest.java
index bf12ae313f..5cd5532a85 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/saml2/registration/StandardRegistrationBuilderProviderTest.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/saml2/registration/StandardRegistrationBuilderProviderTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.nifi.web.security.saml2.registration;
 
+import mockwebserver3.MockResponse;
+import mockwebserver3.MockWebServer;
 import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
 import org.apache.commons.io.IOUtils;
 import org.apache.nifi.security.cert.builder.StandardCertificateBuilder;
 import org.apache.nifi.security.ssl.EphemeralKeyStoreBuilder;
@@ -38,6 +38,7 @@ import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.X509KeyManager;
 import javax.net.ssl.X509TrustManager;
 import javax.security.auth.x500.X500Principal;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -63,8 +64,6 @@ class StandardRegistrationBuilderProviderTest {
 
     private static final int HTTP_NOT_FOUND = 404;
 
-    private static final boolean PROXY_DISABLED = false;
-
     private MockWebServer mockWebServer;
 
     @BeforeEach
@@ -75,7 +74,7 @@ class StandardRegistrationBuilderProviderTest {
 
     @AfterEach
     void shutdownServer() throws IOException {
-        mockWebServer.shutdown();
+        mockWebServer.close();
     }
 
     @Test
@@ -88,7 +87,9 @@ class StandardRegistrationBuilderProviderTest {
     @Test
     void testGetRegistrationBuilderHttpUrl() throws IOException {
         final String metadata = getMetadata();
-        final MockResponse response = new MockResponse().setBody(metadata);
+        final MockResponse response = new MockResponse.Builder()
+                .body(metadata)
+                .build();
         mockWebServer.enqueue(response);
         final String metadataUrl = getMetadataUrl();
 
@@ -99,7 +100,9 @@ class StandardRegistrationBuilderProviderTest {
 
     @Test
     void testGetRegistrationBuilderHttpUrlNotFound() {
-        final MockResponse response = new 
MockResponse().setResponseCode(HTTP_NOT_FOUND);
+        final MockResponse response = new MockResponse.Builder()
+                .code(HTTP_NOT_FOUND)
+                .build();
         mockWebServer.enqueue(response);
         final String metadataUrl = getMetadataUrl();
 
@@ -128,10 +131,12 @@ class StandardRegistrationBuilderProviderTest {
                 .build();
 
         final SSLSocketFactory sslSocketFactory = 
Objects.requireNonNull(sslContext.getSocketFactory());
-        mockWebServer.useHttps(sslSocketFactory, PROXY_DISABLED);
+        mockWebServer.useHttps(sslSocketFactory);
 
         final String metadata = getMetadata();
-        final MockResponse response = new MockResponse().setBody(metadata);
+        final MockResponse response = new MockResponse.Builder()
+                .body(metadata)
+                .build();
         mockWebServer.enqueue(response);
         final String metadataUrl = getMetadataUrl();
 
diff --git a/pom.xml b/pom.xml
index 78413931f2..75b1f3ab0a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,7 +114,7 @@
         <gson.version>2.13.1</gson.version>
         
<io.fabric8.kubernetes.client.version>7.3.1</io.fabric8.kubernetes.client.version>
         <kotlin.version>2.2.0</kotlin.version>
-        <okhttp.version>4.12.0</okhttp.version>
+        <okhttp.version>5.0.0</okhttp.version>
         <okio.version>3.15.0</okio.version>
         <org.apache.commons.cli.version>1.9.0</org.apache.commons.cli.version>
         
<org.apache.commons.codec.version>1.18.0</org.apache.commons.codec.version>
@@ -494,6 +494,11 @@
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
+            <dependency>
+                <groupId>com.squareup.okhttp3</groupId>
+                <artifactId>okhttp-jvm</artifactId>
+                <version>${okhttp.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.squareup.okio</groupId>
                 <artifactId>okio</artifactId>

Reply via email to