From 26f628576551960e70a1af4743211184b3ed7ed1 Mon Sep 17 00:00:00 2001 From: Rahul Chavan Date: Tue, 22 Oct 2024 18:37:07 +0700 Subject: [PATCH] support higher java version - fix error on master 'The method setHttpClient(HttpClient) in the type HttpComponentsClientHttpRequestFactory is not applicable for the arguments (CloseableHttpClient)', - in spring version to 6.1.14 and other Dependencies version - Java version support as Spring Framework 6.1.x: JDK 17 to 23 --- pom.xml | 54 ++++++------------- .../rest/PLGSharepointClientOnline.java | 10 ++-- .../rest/PLGSharepointOnPremisesClient.java | 41 +++++++++----- .../sharepoint/rest/StreamRestTemplate.java | 6 +-- .../rest/helper/AuthTokenHelperOnline.java | 4 +- .../helper/CloudTokenForClientIdGetter.java | 45 ++++++++-------- .../rest/helper/HeadersOnPremiseHelper.java | 2 +- 7 files changed, 77 insertions(+), 85 deletions(-) diff --git a/pom.xml b/pom.xml index 22ae0dd..d9878eb 100644 --- a/pom.xml +++ b/pom.xml @@ -32,31 +32,28 @@ http://github.com/kikovalle - + - 8 + 17 - 6.0.0 - 2.8.1 - 5.1.3 - 2.11.0 - 2.0.2 - 20220924 - [31.1-jre,) + 6.1.14 + 5.4 + 2.17.0 + 2.0.16 + 20240303 + 33.3.1-jre 4.13.2 - 7.6.1 - 1.33 - 2.9.1 - 4.5.13 - 4.0.0 + 7.10.2 + 2.11.0 + 4.0.2 - 3.2.1 - 3.4.1 - 3.10.1 - 1.6.13 - 1.6 + 3.3.1 + 3.10.1 + 3.13.0 + 1.7.0 + 3.2.7 @@ -170,32 +167,13 @@ testng ${testng.version} test - - - - org.yaml - snakeyaml - - - - - - org.yaml - snakeyaml - ${snakeyaml.version} - com.google.code.gson gson ${gson.version} compile - - org.apache.httpcomponents - httpmime - ${httpmime.version} - jakarta.xml.ws diff --git a/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointClientOnline.java b/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointClientOnline.java index 3fb47fe..3727ed6 100644 --- a/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointClientOnline.java +++ b/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointClientOnline.java @@ -7,9 +7,9 @@ import java.util.Objects; import java.util.function.Supplier; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; @@ -681,7 +681,7 @@ public JSONObject createFolder(String baseFolderRemoteRelativeUrl, String folder @Override public JSONObject moveFolder(String sourceRelativeServerUrl, String destinyRelativeServerUrl) throws Exception { - LOG.debug("createFolder sourceRelativeServerUrl {} destinyRelativeServerUrl {}", sourceRelativeServerUrl, destinyRelativeServerUrl); + LOG.debug("moveFolder sourceRelativeServerUrl {} destinyRelativeServerUrl {}", sourceRelativeServerUrl, destinyRelativeServerUrl); headers = headerHelper.getPostHeaders(""); RequestEntity requestEntity = new RequestEntity<>("", @@ -703,7 +703,7 @@ public JSONObject moveFolder(String sourceRelativeServerUrl, String destinyRelat */ @Override public JSONObject moveFile(String sourceRelativeServerUrl, String destinyRelativeServerUrl) throws Exception { - LOG.debug("createFolder sourceRelativeServerUrl {} destinyRelativeServerUrl {}", sourceRelativeServerUrl, destinyRelativeServerUrl); + LOG.debug("moveFile sourceRelativeServerUrl {} destinyRelativeServerUrl {}", sourceRelativeServerUrl, destinyRelativeServerUrl); headers = headerHelper.getPostHeaders(""); RequestEntity requestEntity = new RequestEntity<>("", diff --git a/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointOnPremisesClient.java b/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointOnPremisesClient.java index 759669c..fa2f62a 100644 --- a/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointOnPremisesClient.java +++ b/src/main/java/com/panxoloto/sharepoint/rest/PLGSharepointOnPremisesClient.java @@ -1,17 +1,23 @@ package com.panxoloto.sharepoint.rest; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.function.Supplier; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.NTCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; +import org.apache.hc.client5.http.auth.AuthSchemeFactory; +import org.apache.hc.client5.http.auth.AuthScope; +import org.apache.hc.client5.http.auth.NTCredentials; +import org.apache.hc.client5.http.auth.StandardAuthScheme; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; +import org.apache.hc.client5.http.impl.auth.NTLMSchemeFactory; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.config.Lookup; +import org.apache.hc.core5.http.config.RegistryBuilder; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; @@ -60,10 +66,17 @@ public PLGSharepointOnPremisesClient(String user, String passwd, String domain, String spSiteUrl, String spSitePrefix) { super(); - CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(user, passwd, spSiteUrl, domain)); + BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(null, -1), new NTCredentials(user, passwd.toCharArray(), spSiteUrl, domain)); + Lookup authSchemeRegistry = RegistryBuilder.create() + .register(StandardAuthScheme.NTLM, new NTLMSchemeFactory()).build(); + RequestConfig requestConfig = RequestConfig.custom() + .setTargetPreferredAuthSchemes(Collections.singletonList(StandardAuthScheme.NTLM)).build(); + CloseableHttpClient httpClient = httpClientBuilderSupplier.get() .setDefaultCredentialsProvider(credsProvider) + .setDefaultAuthSchemeRegistry(authSchemeRegistry) + .setDefaultRequestConfig(requestConfig) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); @@ -565,7 +578,11 @@ public JSONObject uploadFile(String folder, Resource resource, String fileName, MultiValueMap headers = headerHelper.getPostHeaders(""); headers.remove("Content-Length"); - RequestEntity requestEntity = new RequestEntity<>(resource, + byte[] bytes = resource.getContentAsByteArray(); + headers.add("Content-Length","" + bytes.length); + LOG.debug("Content-Length {}", bytes.length); + + RequestEntity requestEntity = new RequestEntity<>(bytes, headers, HttpMethod.POST, this.tokenHelper.getSharepointSiteUrl( "/_api/web/GetFolderByServerRelativeUrl('" + folder @@ -719,7 +736,7 @@ public JSONObject createFolder(String baseFolderRemoteRelativeUrl, String folder */ @Override public JSONObject moveFolder(String sourceRelativeServerUrl, String destinyRelativeServerUrl) throws Exception { - LOG.debug("createFolder sourceRelativeServerUrl {} destinyRelativeServerUrl {}", new Object[] {sourceRelativeServerUrl, destinyRelativeServerUrl}); + LOG.debug("moveFolder sourceRelativeServerUrl {} destinyRelativeServerUrl {}", new Object[] {sourceRelativeServerUrl, destinyRelativeServerUrl}); MultiValueMap headers = headerHelper.getPostHeaders(""); RequestEntity requestEntity = new RequestEntity<>("", @@ -741,7 +758,7 @@ public JSONObject moveFolder(String sourceRelativeServerUrl, String destinyRelat */ @Override public JSONObject moveFile(String sourceRelativeServerUrl, String destinyRelativeServerUrl) throws Exception { - LOG.debug("createFolder sourceRelativeServerUrl {} destinyRelativeServerUrl {}", new Object[] {sourceRelativeServerUrl, destinyRelativeServerUrl}); + LOG.debug("moveFile sourceRelativeServerUrl {} destinyRelativeServerUrl {}", new Object[] {sourceRelativeServerUrl, destinyRelativeServerUrl}); MultiValueMap headers = headerHelper.getPostHeaders(""); RequestEntity requestEntity = new RequestEntity<>("", diff --git a/src/main/java/com/panxoloto/sharepoint/rest/StreamRestTemplate.java b/src/main/java/com/panxoloto/sharepoint/rest/StreamRestTemplate.java index 05424a5..c8bfb1f 100644 --- a/src/main/java/com/panxoloto/sharepoint/rest/StreamRestTemplate.java +++ b/src/main/java/com/panxoloto/sharepoint/rest/StreamRestTemplate.java @@ -12,7 +12,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; -import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestFactory; @@ -91,13 +91,13 @@ public DeferredCloseClientHttpResponse(ClientHttpResponse delegate) { private boolean isStream = false; @Override - public HttpStatus getStatusCode() throws IOException { + public HttpStatusCode getStatusCode() throws IOException { return delegate.getStatusCode(); } @Override public int getRawStatusCode() throws IOException { - return delegate.getRawStatusCode(); + return delegate.getStatusCode().value(); } @Override diff --git a/src/main/java/com/panxoloto/sharepoint/rest/helper/AuthTokenHelperOnline.java b/src/main/java/com/panxoloto/sharepoint/rest/helper/AuthTokenHelperOnline.java index ce33aee..539d159 100644 --- a/src/main/java/com/panxoloto/sharepoint/rest/helper/AuthTokenHelperOnline.java +++ b/src/main/java/com/panxoloto/sharepoint/rest/helper/AuthTokenHelperOnline.java @@ -10,8 +10,8 @@ import javax.xml.transform.TransformerException; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; diff --git a/src/main/java/com/panxoloto/sharepoint/rest/helper/CloudTokenForClientIdGetter.java b/src/main/java/com/panxoloto/sharepoint/rest/helper/CloudTokenForClientIdGetter.java index 06dd37f..3f01ce5 100644 --- a/src/main/java/com/panxoloto/sharepoint/rest/helper/CloudTokenForClientIdGetter.java +++ b/src/main/java/com/panxoloto/sharepoint/rest/helper/CloudTokenForClientIdGetter.java @@ -9,20 +9,20 @@ import java.util.function.Supplier; import org.apache.commons.io.IOUtils; -import org.apache.http.Header; -import org.apache.http.HeaderElement; -import org.apache.http.HttpEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.mime.HttpMultipartMode; -import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.apache.http.entity.mime.content.StringBody; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.protocol.HttpContext; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.client5.http.entity.mime.HttpMultipartMode; +import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; +import org.apache.hc.client5.http.entity.mime.StringBody; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpHeaders; +import org.apache.hc.core5.http.protocol.HttpContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -74,20 +74,17 @@ public String getToken() { private void getTenantId() throws Exception { String url = siteURL+"/_vti_bin/client.svc/"; HttpGet get = new HttpGet(url); - get.setHeader(org.apache.http.HttpHeaders.AUTHORIZATION, "Bearer"); + get.setHeader(HttpHeaders.AUTHORIZATION, "Bearer"); CloseableHttpClient httpClient = httpClientBuilderSupplier.get().build(); try (CloseableHttpResponse response = httpClient.execute(get, (HttpContext) null)) { Header[] headers = response.getHeaders("WWW-Authenticate"); for (Header h : headers) { - HeaderElement[] elements = h.getElements(); - for (HeaderElement e : elements) { - if ("Bearer realm".equals(e.getName())) { - spOnlineRealm = e.getValue(); - } - if ("client_id".equals(e.getName())) { - spOnlineClientId = e.getValue(); - } + if ("Bearer realm".equals(h.getName())) { + spOnlineRealm = h.getValue(); + } + if ("client_id".equals(h.getName())) { + spOnlineClientId = h.getValue(); } } } @@ -124,7 +121,7 @@ private HttpEntity fillInSPOnlineTokenRequestData() throws MalformedURLException String resourceStr = spOnlineClientId + "/" + url.getHost() + "@" + spOnlineRealm; MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); + builder.setMode(HttpMultipartMode.LEGACY); StringBody stringBody = new StringBody("client_credentials", ContentType.MULTIPART_FORM_DATA); builder.addPart("grant_type", stringBody); stringBody = new StringBody(clientId, ContentType.MULTIPART_FORM_DATA); diff --git a/src/main/java/com/panxoloto/sharepoint/rest/helper/HeadersOnPremiseHelper.java b/src/main/java/com/panxoloto/sharepoint/rest/helper/HeadersOnPremiseHelper.java index a0272b1..f7f9b6b 100644 --- a/src/main/java/com/panxoloto/sharepoint/rest/helper/HeadersOnPremiseHelper.java +++ b/src/main/java/com/panxoloto/sharepoint/rest/helper/HeadersOnPremiseHelper.java @@ -1,6 +1,6 @@ package com.panxoloto.sharepoint.rest.helper; -import org.apache.http.HttpHeaders; +import org.apache.hc.core5.http.HttpHeaders; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap;