diff --git a/pom.xml b/pom.xml
index 832fd901..a0b073ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.skyflow
skyflow-java
- 2.0.0-beta.2
+ 2.0.0-beta.2-dev.cc7223a
jar
${project.groupId}:${project.artifactId}
diff --git a/src/main/java/com/skyflow/errors/SkyflowException.java b/src/main/java/com/skyflow/errors/SkyflowException.java
index 32c71f39..868b6609 100644
--- a/src/main/java/com/skyflow/errors/SkyflowException.java
+++ b/src/main/java/com/skyflow/errors/SkyflowException.java
@@ -75,17 +75,20 @@ private void setRequestId(Map> responseHeaders) {
}
private void setMessage() {
- JsonElement messageElement = ((JsonObject) responseBody.get("error")).get("message");
+ JsonObject errorObj = ((JsonObject) responseBody.get("error"));
+ JsonElement messageElement = errorObj.has("message") ? errorObj.get("message") : null;
this.message = messageElement == null ? null : messageElement.getAsString();
}
private void setGrpcCode() {
- JsonElement grpcElement = ((JsonObject) responseBody.get("error")).get("grpc_code");
+ JsonObject errorObj = ((JsonObject) responseBody.get("error"));
+ JsonElement grpcElement = errorObj.has("grpc_code") ? errorObj.get("grpc_code") : errorObj.has("grpcCode") ? errorObj.get("grpcCode") : null;
this.grpcCode = grpcElement == null ? null : grpcElement.getAsInt();
}
private void setHttpStatus() {
- JsonElement statusElement = ((JsonObject) responseBody.get("error")).get("http_status");
+ JsonObject errorObj = ((JsonObject) responseBody.get("error"));
+ JsonElement statusElement = errorObj.has("http_status") ? errorObj.get("http_status") : errorObj.has("httpStatus") ? errorObj.get("httpStatus") : null;
this.httpStatus = statusElement == null ? null : statusElement.getAsString();
}
@@ -98,11 +101,38 @@ public JsonArray getDetails() {
}
private void setDetails(Map> responseHeaders) {
- JsonElement detailsElement = ((JsonObject) responseBody.get("error")).get("details");
+ JsonObject errorObj = ((JsonObject) responseBody.get("error"));
+ JsonElement detailsElement = errorObj.has("details") ? errorObj.get("details") : null;
List errorFromClientHeader = responseHeaders.get(Constants.ERROR_FROM_CLIENT_HEADER_KEY);
+
if (detailsElement != null) {
- this.details = detailsElement.getAsJsonArray();
+ if (detailsElement.isJsonArray()) {
+ this.details = detailsElement.getAsJsonArray();
+ if (this.details.isEmpty()) this.details = new JsonArray();
+ } else if (detailsElement.isJsonObject()) {
+ JsonObject obj = detailsElement.getAsJsonObject();
+ boolean allEmpty = true;
+ for (String key : obj.keySet()) {
+ if (obj.get(key).isJsonArray() && !obj.get(key).getAsJsonArray().isEmpty()) {
+ allEmpty = false;
+ break;
+ } else if (!obj.get(key).isJsonArray() && !obj.get(key).isJsonNull()) {
+ allEmpty = false;
+ break;
+ }
+ }
+ if (obj.isEmpty() || allEmpty) {
+ this.details = new JsonArray();
+ } else {
+ JsonArray arr = new JsonArray();
+ arr.add(obj);
+ this.details = arr;
+ }
+ }
+ } else {
+ this.details = new JsonArray();
}
+
if (errorFromClientHeader != null) {
this.details = this.details == null ? new JsonArray() : this.details;
String errorFromClient = errorFromClientHeader.get(0);
diff --git a/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java b/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java
index 7c9f4674..5a92603c 100644
--- a/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java
+++ b/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java
@@ -23,7 +23,7 @@ public String getSignedToken() {
@Override
public String toString() {
- Gson gson = new Gson();
+ Gson gson = new Gson().newBuilder().serializeNulls().create();
return gson.toJson(this);
}
}
diff --git a/src/main/java/com/skyflow/utils/Constants.java b/src/main/java/com/skyflow/utils/Constants.java
index b9264a22..f12e6a48 100644
--- a/src/main/java/com/skyflow/utils/Constants.java
+++ b/src/main/java/com/skyflow/utils/Constants.java
@@ -26,6 +26,6 @@ public final class Constants {
public static final String SDK_METRICS_HEADER_KEY = "sky-metadata";
public static final String REQUEST_ID_HEADER_KEY = "x-request-id";
public static final String PROCESSED_FILE_NAME_PREFIX = "processed-";
- public static final String ERROR_FROM_CLIENT_HEADER_KEY = "eror-from-client";
- public static final String DEIDENTIFIED_FILE_PREFIX = "deidentified";;
+ public static final String ERROR_FROM_CLIENT_HEADER_KEY = "error-from-client";
+ public static final String DEIDENTIFIED_FILE_PREFIX = "deidentified";
}
diff --git a/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java b/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java
index a2d44d99..1a81eca0 100644
--- a/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java
+++ b/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java
@@ -3,15 +3,18 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import java.util.ArrayList;
import java.util.HashMap;
public class InvokeConnectionResponse {
private final Object data;
private final HashMap metadata;
+ private final ArrayList> errors;
- public InvokeConnectionResponse(Object data, HashMap metadata) {
+ public InvokeConnectionResponse(Object data, HashMap metadata, ArrayList> errors) {
this.data = data;
this.metadata = metadata;
+ this.errors = errors;
}
public Object getData() {
@@ -22,9 +25,13 @@ public HashMap getMetadata() {
return metadata;
}
+ public ArrayList> getErrors() {
+ return errors;
+ }
+
@Override
public String toString() {
- Gson gson = new GsonBuilder().serializeNulls().create();
+ Gson gson = new Gson().newBuilder().serializeNulls().create();
return gson.toJson(this);
}
}
diff --git a/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/src/main/java/com/skyflow/vault/controller/ConnectionController.java
index 68a39751..4a9334d4 100644
--- a/src/main/java/com/skyflow/vault/controller/ConnectionController.java
+++ b/src/main/java/com/skyflow/vault/controller/ConnectionController.java
@@ -67,7 +67,7 @@ public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionR
JsonObject data = JsonParser.parseString(response).getAsJsonObject();
HashMap metadata = new HashMap<>();
metadata.put("requestId", HttpUtility.getRequestID());
- connectionResponse = new InvokeConnectionResponse(data, metadata);
+ connectionResponse = new InvokeConnectionResponse(data, metadata, null);
LogUtil.printInfoLog(InfoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED.getLog());
} catch (IOException e) {
LogUtil.printErrorLog(ErrorLogs.INVOKE_CONNECTION_REQUEST_REJECTED.getLog());
diff --git a/src/main/java/com/skyflow/vault/controller/DetectController.java b/src/main/java/com/skyflow/vault/controller/DetectController.java
index 411658ae..c06b9a9d 100644
--- a/src/main/java/com/skyflow/vault/controller/DetectController.java
+++ b/src/main/java/com/skyflow/vault/controller/DetectController.java
@@ -28,7 +28,11 @@
import java.util.*;
public final class DetectController extends VaultClient {
- private static final Gson gson = new GsonBuilder().serializeNulls().create();
+ Gson gson = new GsonBuilder()
+ .registerTypeAdapter(Optional.class, (JsonSerializer>) (src, typeOfSrc, context) ->
+ src.map(context::serialize).orElse(null))
+ .serializeNulls()
+ .create();
public DetectController(VaultConfig vaultConfig, Credentials credentials) {
super(vaultConfig, credentials);
@@ -55,7 +59,7 @@ public DeidentifyTextResponse deidentifyText(DeidentifyTextRequest deidentifyTex
deidentifyTextResponse = getDeIdentifyTextResponse(deidentifyStringResponse);
LogUtil.printInfoLog(InfoLogs.DEIDENTIFY_TEXT_REQUEST_RESOLVED.getLog());
} catch (ApiClientApiException ex) {
- String bodyString = gson.toJson(ex.body());
+ String bodyString = extractBodyAsString(ex.body());
LogUtil.printErrorLog(ErrorLogs.DEIDENTIFY_TEXT_REQUEST_REJECTED.getLog());
throw new SkyflowException(ex.statusCode(), ex, ex.headers(), bodyString);
}
@@ -82,7 +86,7 @@ public ReidentifyTextResponse reidentifyText(ReidentifyTextRequest reidentifyTex
reidentifyTextResponse = new ReidentifyTextResponse(reidentifyStringResponse.getText().orElse(null));
LogUtil.printInfoLog(InfoLogs.REIDENTIFY_TEXT_REQUEST_RESOLVED.getLog());
} catch (ApiClientApiException ex) {
- String bodyString = gson.toJson(ex.body());
+ String bodyString = extractBodyAsString(ex.body());
LogUtil.printErrorLog(ErrorLogs.REIDENTIFY_TEXT_REQUEST_REJECTED.getLog());
throw new SkyflowException(ex.statusCode(), ex, ex.headers(), bodyString);
}
@@ -145,7 +149,7 @@ public DeidentifyFileResponse deidentifyFile(DeidentifyFileRequest request) thro
}
}
} catch (ApiClientApiException e) {
- String bodyString = gson.toJson(e.body());
+ String bodyString = extractBodyAsString(e.body());
LogUtil.printErrorLog(ErrorLogs.DEIDENTIFY_FILE_REQUEST_REJECTED.getLog());
throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString);
}
@@ -287,6 +291,14 @@ private static synchronized List getEntities(DeidentifyStatusRes
return entities;
}
+ private String extractBodyAsString(Object body) {
+ if (body instanceof String) {
+ return (String) body;
+ } else {
+ return gson.toJson(body);
+ }
+ }
+
private com.skyflow.generated.rest.types.DeidentifyFileResponse processFileByType(String fileExtension, String base64Content, DeidentifyFileRequest request, String vaultId) throws SkyflowException {
switch (fileExtension.toLowerCase()) {
case "txt":
@@ -367,7 +379,7 @@ public DeidentifyFileResponse getDetectRun(GetDetectRunRequest request) throws S
return parseDeidentifyFileResponse(apiResponse, runId, apiResponse.getStatus().toString());
} catch (ApiClientApiException e) {
- String bodyString = gson.toJson(e.body());
+ String bodyString = extractBodyAsString(e.body());
LogUtil.printErrorLog(ErrorLogs.GET_DETECT_RUN_REQUEST_REJECTED.getLog());
throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString);
}
diff --git a/src/main/java/com/skyflow/vault/controller/VaultController.java b/src/main/java/com/skyflow/vault/controller/VaultController.java
index 84e528b0..3c307c29 100644
--- a/src/main/java/com/skyflow/vault/controller/VaultController.java
+++ b/src/main/java/com/skyflow/vault/controller/VaultController.java
@@ -31,7 +31,7 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) {
super(vaultConfig, credentials);
}
- private static synchronized HashMap getFormattedBatchInsertRecord(Object record, int requestIndex) {
+ private static synchronized HashMap getFormattedBatchInsertRecord(Object record, Integer requestIndex) {
HashMap insertRecord = new HashMap<>();
String jsonString = gson.toJson(record);
JsonObject bodyObject = JsonParser.parseString(jsonString).getAsJsonObject().get("Body").getAsJsonObject();
@@ -95,11 +95,9 @@ private static synchronized HashMap getFormattedUpdateRecord(V1U
private static synchronized HashMap getFormattedQueryRecord(V1FieldRecords record) {
HashMap queryRecord = new HashMap<>();
- Object fields = record.getFields();
- if (fields != null) {
- String fieldsString = gson.toJson(fields);
- JsonObject fieldsObject = JsonParser.parseString(fieldsString).getAsJsonObject();
- queryRecord.putAll(fieldsObject.asMap());
+ Optional