mirror of https://github.com/dapr/java-sdk.git
Adding new methods for Http Client (#60)
* Adding new methods for Http Client * Finishing implementation for HttpClient * Adding JavaDoc and Changing return Type to new Methods * Using ObjectSerializer and changing Constants values
This commit is contained in:
parent
0ef261554a
commit
ee1af6cb1c
|
@ -63,4 +63,22 @@ public final class Constants {
|
|||
* String format for Actors timer registration relative url..
|
||||
*/
|
||||
public static String ACTOR_TIMER_RELATIVE_URL_FORMAT = ACTORS_BASE_URL + "/%s/%s/reminders/%s";
|
||||
|
||||
/**
|
||||
* Invoke Publish Path
|
||||
*/
|
||||
public static String PUBLISH_PATH = API_VERSION + "/publish";
|
||||
|
||||
/**
|
||||
* Invoke Binding Path
|
||||
*/
|
||||
public static String BINDING_PATH = API_VERSION + "/binding";
|
||||
|
||||
/**
|
||||
* State Path
|
||||
*/
|
||||
public static String STATE_PATH = API_VERSION + "/state";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*/
|
||||
package io.dapr.actors.client;
|
||||
|
||||
import io.dapr.actors.*;
|
||||
import io.dapr.client.AbstractClientBuilder;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,13 +5,14 @@
|
|||
package io.dapr.actors.client;
|
||||
|
||||
import io.dapr.actors.*;
|
||||
import io.dapr.client.AbstractDaprHttpClient;
|
||||
import okhttp3.*;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
/**
|
||||
* Http client to call actors methods.
|
||||
*/
|
||||
class ActorProxyHttpAsyncClient extends AbstractDaprClient implements ActorProxyAsyncClient {
|
||||
class ActorProxyHttpAsyncClient extends AbstractDaprHttpClient implements ActorProxyAsyncClient {
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link ActorProxyHttpAsyncClient}.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*/
|
||||
package io.dapr.actors.runtime;
|
||||
|
||||
import io.dapr.actors.AbstractClientBuilder;
|
||||
import io.dapr.client.AbstractClientBuilder;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,15 +4,32 @@
|
|||
*/
|
||||
package io.dapr.actors.runtime;
|
||||
|
||||
import io.dapr.actors.AbstractDaprClient;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.dapr.actors.utils.ObjectSerializer;
|
||||
import io.dapr.client.AbstractDaprHttpClient;
|
||||
import io.dapr.actors.Constants;
|
||||
import io.dapr.exceptions.DaprException;
|
||||
import okhttp3.OkHttpClient;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Http client to call Dapr's API for actors.
|
||||
*/
|
||||
class AppToDaprHttpAsyncClient extends AbstractDaprClient implements AppToDaprAsyncClient {
|
||||
//public class DaprHttpAsyncClient implements DaprAsyncClient {
|
||||
class AppToDaprHttpAsyncClient extends AbstractDaprHttpClient implements AppToDaprAsyncClient {
|
||||
|
||||
/**
|
||||
* ObjectMapper to Serialize data
|
||||
*/
|
||||
private static final ObjectSerializer MAPPER = new ObjectSerializer();
|
||||
|
||||
private Map<String,String> dataMap;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link AppToDaprHttpAsyncClient}.
|
||||
|
@ -77,4 +94,118 @@ class AppToDaprHttpAsyncClient extends AbstractDaprClient implements AppToDaprAs
|
|||
String url = String.format(Constants.ACTOR_TIMER_RELATIVE_URL_FORMAT, actorType, actorId, timerName);
|
||||
return super.invokeAPIVoid("DELETE", url, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creating publishEvent for Http Client
|
||||
*
|
||||
* @param topic HTTP method.
|
||||
* @param data url as String.
|
||||
* @param method JSON payload or null.
|
||||
* @return Mono<String>
|
||||
*/
|
||||
public Mono<String> publishEvent(String topic, String data, String method) throws Exception {
|
||||
|
||||
if (topic.isEmpty() || topic == null ) {
|
||||
throw new DaprException("500" , "Topic cannot be null or empty.");
|
||||
}
|
||||
|
||||
if ( method.isEmpty() || method == null ) {
|
||||
throw new DaprException("500", "Method cannot be null or empty.");
|
||||
}
|
||||
|
||||
String url = method.equals("POST") ? Constants.PUBLISH_PATH : Constants.PUBLISH_PATH + "/" + topic;
|
||||
|
||||
dataMap = new HashMap();
|
||||
dataMap.put(topic,data);
|
||||
|
||||
String jsonResult = MAPPER.serialize(dataMap);
|
||||
|
||||
return super.invokeAPI(method, url, jsonResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creating invokeBinding Method for Http Client
|
||||
*
|
||||
* @param name HTTP method.
|
||||
* @param data url as String.
|
||||
* @param method JSON payload or null.
|
||||
* @return Mono<String>
|
||||
*/
|
||||
public Mono<String> invokeBinding(String name, String data, String method) throws Exception {
|
||||
|
||||
if (name.isEmpty() || name == null) {
|
||||
throw new DaprException("500", "Name cannot be null or empty.");
|
||||
}
|
||||
|
||||
if (method.isEmpty() || method == null) {
|
||||
throw new DaprException("500","Method cannot be null or empty.");
|
||||
}
|
||||
|
||||
String url = method.equals("POST") ? Constants.BINDING_PATH : Constants.BINDING_PATH + "/" + name;
|
||||
|
||||
dataMap = new HashMap();
|
||||
dataMap.put(name,data);
|
||||
|
||||
String jsonResult = MAPPER.serialize(dataMap);
|
||||
|
||||
return super.invokeAPI(method, url, jsonResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creating invokeBinding Method for Http Client
|
||||
*
|
||||
* @param key HTTP method.
|
||||
* @return Mono<String>
|
||||
*/
|
||||
public Mono<String> getState(String key) throws DaprException {
|
||||
|
||||
if (key.isEmpty() || key == null) {
|
||||
throw new DaprException("500", "Name cannot be null or empty.");
|
||||
}
|
||||
|
||||
String url = Constants.STATE_PATH + "/" + key;
|
||||
|
||||
return super.invokeAPI("GET", url, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creating invokeBinding Method for Http Client
|
||||
*
|
||||
* @param key HTTP method.
|
||||
* @param data HTTP method.
|
||||
* @return Mono<String>
|
||||
*/
|
||||
public Mono<String> saveState(String key, String data) throws Exception {
|
||||
|
||||
if (key.isEmpty() || key == null) {
|
||||
throw new DaprException("500", "Name cannot be null or empty.");
|
||||
}
|
||||
|
||||
String url = Constants.STATE_PATH;
|
||||
|
||||
dataMap = new HashMap();
|
||||
dataMap.put(key,data);
|
||||
|
||||
String jsonResult = MAPPER.serialize(dataMap);
|
||||
|
||||
return super.invokeAPI("POST", url, jsonResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creating invokeBinding Method for Http Client
|
||||
*
|
||||
* @param key HTTP method.
|
||||
* @return Mono<String>
|
||||
*/
|
||||
public Mono<String> deleteState(String key) throws DaprException {
|
||||
|
||||
if (key.isEmpty() || key == null) {
|
||||
throw new DaprException("500", "Name cannot be null or empty.");
|
||||
}
|
||||
|
||||
String url = Constants.STATE_PATH + "/" + key;
|
||||
|
||||
return super.invokeAPI("DELETE", url, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
* Copyright (c) Microsoft Corporation.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
package io.dapr.actors;
|
||||
package io.dapr.client;
|
||||
|
||||
import io.dapr.actors.Constants;
|
||||
|
||||
/**
|
||||
* Base class for client builders
|
|
@ -2,17 +2,20 @@
|
|||
* Copyright (c) Microsoft Corporation.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
package io.dapr.actors;
|
||||
package io.dapr.client;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.dapr.actors.Constants;
|
||||
import io.dapr.exceptions.DaprError;
|
||||
import io.dapr.exceptions.DaprException;
|
||||
import okhttp3.*;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
// base class of hierarchy
|
||||
public abstract class AbstractDaprClient {
|
||||
public abstract class AbstractDaprHttpClient {
|
||||
|
||||
/**
|
||||
* Defines the standard application/json type for HTTP calls in Dapr.
|
||||
|
@ -40,12 +43,12 @@ public abstract class AbstractDaprClient {
|
|||
private final OkHttpClient httpClient;
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link AbstractDaprClient}.
|
||||
* Creates a new instance of {@link AbstractDaprHttpClient}.
|
||||
*
|
||||
* @param port Port for calling Dapr. (e.g. 3500)
|
||||
* @param httpClient RestClient used for all API calls in this new instance.
|
||||
*/
|
||||
public AbstractDaprClient(int port, OkHttpClient httpClient) {
|
||||
public AbstractDaprHttpClient(int port, OkHttpClient httpClient) {
|
||||
this.baseUrl = String.format("http://%s:%d/", Constants.DEFAULT_HOSTNAME, port);;
|
||||
this.httpClient = httpClient;
|
||||
}
|
|
@ -2,12 +2,12 @@
|
|||
* Copyright (c) Microsoft Corporation.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
package io.dapr.actors;
|
||||
package io.dapr.exceptions;
|
||||
|
||||
/**
|
||||
* Represents an error message from Dapr.
|
||||
*/
|
||||
class DaprError {
|
||||
public class DaprError {
|
||||
|
||||
/**
|
||||
* Error code.
|
|
@ -2,7 +2,7 @@
|
|||
* Copyright (c) Microsoft Corporation.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
package io.dapr.actors;
|
||||
package io.dapr.exceptions;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -21,7 +21,7 @@ public class DaprException extends IOException {
|
|||
*
|
||||
* @param daprError Server-side error.
|
||||
*/
|
||||
DaprException(DaprError daprError) {
|
||||
public DaprException(DaprError daprError) {
|
||||
this(daprError.getErrorCode(), daprError.getMessage());
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ public class DaprException extends IOException {
|
|||
* @param errorCode Client-side error code.
|
||||
* @param message Client-side error message.
|
||||
*/
|
||||
DaprException(String errorCode, String message) {
|
||||
public DaprException(String errorCode, String message) {
|
||||
super(String.format("%s: %s", errorCode, message));
|
||||
this.errorCode = errorCode;
|
||||
}
|
Loading…
Reference in New Issue