Skip to content

Commit

Permalink
Adding OkHttp as an alternative http client
Browse files Browse the repository at this point in the history
  • Loading branch information
sashirestela committed Jan 14, 2025
1 parent 72b1b9c commit fdb7a69
Show file tree
Hide file tree
Showing 6 changed files with 321 additions and 61 deletions.
13 changes: 12 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
<!-- Dependencies Versions -->
<lombok.version>1.18.36</lombok.version>
<jackson.version>2.18.2</jackson.version>
<okhttp.version>4.12.0</okhttp.version>
<slf4j.version>2.0.16</slf4j.version>
<junit.version>[5.11.0,6.0.0)</junit.version>
<mockito.version>[5.14.0,6.0.0)</mockito.version>
Expand Down Expand Up @@ -215,6 +216,12 @@
<version>${jackson.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
Expand Down Expand Up @@ -266,6 +273,10 @@
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
Expand Down Expand Up @@ -404,4 +415,4 @@
</plugin>
</plugins>
</build>
</project>
</project>
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package io.github.sashirestela.cleverclient.client;

import io.github.sashirestela.cleverclient.Event;
import io.github.sashirestela.cleverclient.ResponseInfo;
import io.github.sashirestela.cleverclient.ResponseInfo.RequestInfo;
import io.github.sashirestela.cleverclient.http.HttpRequestData;
import io.github.sashirestela.cleverclient.support.CleverClientException;
import io.github.sashirestela.cleverclient.support.CleverClientSSE;
import io.github.sashirestela.cleverclient.support.ReturnType;
import io.github.sashirestela.cleverclient.util.CommonUtil;
import io.github.sashirestela.cleverclient.util.Constant;
import io.github.sashirestela.cleverclient.util.JsonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -41,6 +45,8 @@ public Object sendRequest(RequestData originalRequest, UnaryOperator<HttpRequest

protected abstract Object send(RequestData request);

public abstract void shutdown();

private RequestData interceptRequest(RequestData originalRequest,
UnaryOperator<HttpRequestData> requestInterceptor) {
if (requestInterceptor != null) {
Expand Down Expand Up @@ -107,4 +113,34 @@ private String formattedHeaders(List<String> headers) {
return print.toString();
}

protected Stream<Object> convertToStreamOfObjects(Stream<String> response, ReturnType returnType) {
final var lineRecord = new CleverClientSSE.LineRecord();
return response
.map(line -> {
logger.debug(RESPONSE_FORMAT, line);
lineRecord.updateWith(line);
return new CleverClientSSE(lineRecord);
})
.filter(CleverClientSSE::isActualData)
.map(item -> JsonUtil.jsonToObject(item.getActualData(), returnType.getBaseClass()));
}

protected Stream<Object> convertToStreamOfEvents(Stream<String> response, ReturnType returnType) {
final var lineRecord = new CleverClientSSE.LineRecord();
final var events = returnType.getClassByEvent().keySet();

return response
.map(line -> {
logger.debug(RESPONSE_FORMAT, line);
lineRecord.updateWith(line);
return new CleverClientSSE(lineRecord, events);
})
.filter(CleverClientSSE::isActualData)
.map(item -> Event.builder()
.name(item.getMatchedEvent())
.data(JsonUtil.jsonToObject(item.getActualData(),
returnType.getClassByEvent().get(item.getMatchedEvent())))
.build());
}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.github.sashirestela.cleverclient.client;

import io.github.sashirestela.cleverclient.Event;
import io.github.sashirestela.cleverclient.support.CleverClientException;
import io.github.sashirestela.cleverclient.support.CleverClientSSE;
import io.github.sashirestela.cleverclient.support.ContentType;
import io.github.sashirestela.cleverclient.support.HttpMultipart;
import io.github.sashirestela.cleverclient.support.ReturnType;
Expand All @@ -22,6 +20,7 @@
import java.net.http.HttpResponse.BodyHandlers;
import java.util.EnumMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.function.BiFunction;
import java.util.function.Supplier;
import java.util.stream.Stream;
Expand All @@ -42,6 +41,10 @@ public JavaHttpClientAdapter() {
this(HttpClient.newHttpClient());
}

public HttpClient getJavaHttpClient() {
return httpClient;
}

@Override
protected Object send(RequestData request) {
var returnType = request.getReturnType();
Expand Down Expand Up @@ -79,6 +82,15 @@ protected Object sendAsync(RequestData request) {
});
}

@Override
public void shutdown() {
this.httpClient.executor().ifPresent(executor -> {
if (executor instanceof ExecutorService) {
((ExecutorService) executor).shutdown();
}
});
}

private FunctionsByCategory getFunctions(ReturnType returnType) {
var functions = functionsByCategoryMap.get(returnType.category());
if (functions == null) {
Expand Down Expand Up @@ -190,34 +202,4 @@ private void fillFunctionsByCategory() {
(r, t) -> convertToStreamOfEvents((Stream<String>) r, t)));
}

private Stream<?> convertToStreamOfObjects(Stream<String> response, ReturnType returnType) {
final var lineRecord = new CleverClientSSE.LineRecord();
return response
.map(line -> {
logger.debug(RESPONSE_FORMAT, line);
lineRecord.updateWith(line);
return new CleverClientSSE(lineRecord);
})
.filter(CleverClientSSE::isActualData)
.map(item -> JsonUtil.jsonToObject(item.getActualData(), returnType.getBaseClass()));
}

private Stream<?> convertToStreamOfEvents(Stream<String> response, ReturnType returnType) {
final var lineRecord = new CleverClientSSE.LineRecord();
final var events = returnType.getClassByEvent().keySet();

return response
.map(line -> {
logger.debug(RESPONSE_FORMAT, line);
lineRecord.updateWith(line);
return new CleverClientSSE(lineRecord, events);
})
.filter(CleverClientSSE::isActualData)
.map(item -> Event.builder()
.name(item.getMatchedEvent())
.data(JsonUtil.jsonToObject(item.getActualData(),
returnType.getClassByEvent().get(item.getMatchedEvent())))
.build());
}

}
Loading

0 comments on commit fdb7a69

Please sign in to comment.