diff --git a/.gitignore b/.gitignore
index 7648b24..bc2a7ba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+.idea
+sdk.iml
+
*.class
.settings/
.classpath
diff --git a/pom.xml b/pom.xml
index 00f5a02..2f97657 100755
--- a/pom.xml
+++ b/pom.xml
@@ -74,9 +74,9 @@
test
- com.google.guava
- guava
- 14.0.1
+ com.google.guava
+ guava
+ 18.0
diff --git a/src/main/java/me/figo/FigoApi.java b/src/main/java/me/figo/FigoApi.java
index d49a212..2b3fdef 100644
--- a/src/main/java/me/figo/FigoApi.java
+++ b/src/main/java/me/figo/FigoApi.java
@@ -46,6 +46,7 @@
import me.figo.internal.FigoSocketFactory;
import me.figo.internal.FigoTrustManager;
import me.figo.internal.GsonAdapter;
+import me.figo.models.ErrorResponse;
/**
*
@@ -187,19 +188,11 @@ protected T processResponse(HttpURLConnection connection, Type typeOfT) thro
if (code >= 200 && code < 300) {
return handleResponse(connection.getInputStream(), typeOfT);
} else {
- FigoException.ErrorResponse errorResponse = handleResponse(connection.getErrorStream(), FigoException.ErrorResponse.class);
- logError(errorResponse, connection);
- throw new FigoException(errorResponse);
+ ErrorResponse errorResponse = handleResponse(connection.getErrorStream(), ErrorResponse.class);
+ throw new FigoApiException(errorResponse);
}
}
- private void logError(FigoException.ErrorResponse errorResponse, HttpURLConnection connection) {
- String errorString = errorResponse.getError().toString();
- if (connection != null)
- errorString += " " + connection.getRequestMethod() + " " + connection.getURL().toString();
- logger.log(Level.SEVERE, errorString);
- }
-
/**
* Handle the response of a request by decoding its JSON payload
*
diff --git a/src/main/java/me/figo/FigoApiException.java b/src/main/java/me/figo/FigoApiException.java
new file mode 100644
index 0000000..e738337
--- /dev/null
+++ b/src/main/java/me/figo/FigoApiException.java
@@ -0,0 +1,21 @@
+package me.figo;
+
+import me.figo.models.ErrorObject;
+import me.figo.models.ErrorResponse;
+
+public class FigoApiException extends FigoException {
+
+ private static final long serialVersionUID = -1855328588622789903L;
+
+ private ErrorObject error;
+
+ public FigoApiException(ErrorResponse response) {
+ super(response.getError().toString(), response.getError().getDescription());
+ this.error = response.getError();
+ }
+
+ public ErrorObject getError() {
+ return error;
+ }
+
+}
diff --git a/src/main/java/me/figo/FigoConnection.java b/src/main/java/me/figo/FigoConnection.java
index f185a71..52a09b4 100644
--- a/src/main/java/me/figo/FigoConnection.java
+++ b/src/main/java/me/figo/FigoConnection.java
@@ -22,21 +22,16 @@
package me.figo;
+import com.google.common.io.BaseEncoding;
+import me.figo.internal.*;
+import me.figo.models.BusinessProcess;
+import me.figo.models.ProcessToken;
+
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
-import com.google.common.io.BaseEncoding;
-
-import me.figo.internal.CreateUserRequest;
-import me.figo.internal.CreateUserResponse;
-import me.figo.internal.CredentialLoginRequest;
-import me.figo.internal.TokenRequest;
-import me.figo.internal.TokenResponse;
-import me.figo.models.BusinessProcess;
-import me.figo.models.ProcessToken;
-
/**
* Representing a not user-bound connection to the figo connect API. Its main purpose is to let user login via the OAuth2 API and/or create business processes.
diff --git a/src/main/java/me/figo/FigoException.java b/src/main/java/me/figo/FigoException.java
index c9c58a3..b270e02 100644
--- a/src/main/java/me/figo/FigoException.java
+++ b/src/main/java/me/figo/FigoException.java
@@ -22,8 +22,6 @@
package me.figo;
-import com.google.gson.annotations.Expose;
-
/***
* Base Class for all figo Exceptions. It extends the normal Java exceptions with an error_code field, which carries the computer readable error reason.
*
@@ -37,21 +35,10 @@ public class FigoException extends Exception {
private final String error_description;
public FigoException(String error_message, String error_description) {
- super(error_message);
-
- this.error_message = error_message;
- this.error_description = error_description;
- }
-
- public FigoException(String error_message, String error_description, Throwable exc) {
- super(error_message, exc);
-
- this.error_message = error_message;
- this.error_description = error_description;
- }
+ super(error_message);
- public FigoException(ErrorResponse response) {
- this(response.getError().getMessage(), response.getError().getDescription());
+ this.error_message = error_message;
+ this.error_description = error_description;
}
public String getErrorMessage() {
@@ -62,75 +49,4 @@ public String getErrorDescription() {
return error_description;
}
- public static class ErrorResponse {
-
- @Expose
- private ErrorObject error;
-
- public ErrorResponse() {
- }
-
- public ErrorObject getError() {
- return error;
- }
- }
-
- public static class ErrorObject {
-
- @Expose
- private String code;
-
- @Expose
- private String name;
-
- @Expose
- private String message;
-
- @Expose
- private String description;
-
- @Expose
- private String group;
-
- public ErrorObject() {
- }
-
- public String getMessage() {
- return message;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getCode() {
- return code;
- }
-
- public String getName() {
- return name;
- }
-
- public String getGroup() {
- return group;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("ErrorObject [");
- if (code != null)
- builder.append("code=").append(code).append(", ");
- if (name != null)
- builder.append("name=").append(name).append(", ");
- if (message != null)
- builder.append("message=").append(message).append(", ");
- if (description != null)
- builder.append("description=").append(description).append(", ");
- if (group != null)
- builder.append("group=").append(group);
- builder.append("]");
- return builder.toString();
- }
- }
}
diff --git a/src/main/java/me/figo/models/ErrorObject.java b/src/main/java/me/figo/models/ErrorObject.java
new file mode 100644
index 0000000..a6ddb1c
--- /dev/null
+++ b/src/main/java/me/figo/models/ErrorObject.java
@@ -0,0 +1,75 @@
+package me.figo.models;
+
+import com.google.gson.annotations.Expose;
+
+import java.util.List;
+import java.util.Map;
+
+public class ErrorObject {
+
+ @Expose
+ private String code;
+
+ @Expose
+ private String name;
+
+ @Expose
+ private String message;
+
+ @Expose
+ private String description;
+
+ @Expose
+ private String group;
+
+ @Expose
+ private Map> data;
+
+ public ErrorObject() {
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getGroup() {
+ return group;
+ }
+
+ public Map> getData() {
+ return data;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("ErrorObject [");
+ if (code != null)
+ builder.append("code=").append(code).append(", ");
+ if (name != null)
+ builder.append("name=").append(name).append(", ");
+ if (message != null)
+ builder.append("message=").append(message).append(", ");
+ if (description != null)
+ builder.append("description=").append(description).append(", ");
+ if (data != null)
+ builder.append("data=").append(data.toString()).append(", ");
+ if (group != null)
+ builder.append("group=").append(group);
+ builder.append("]");
+ return builder.toString();
+ }
+
+}
diff --git a/src/main/java/me/figo/models/ErrorResponse.java b/src/main/java/me/figo/models/ErrorResponse.java
new file mode 100644
index 0000000..a942a7f
--- /dev/null
+++ b/src/main/java/me/figo/models/ErrorResponse.java
@@ -0,0 +1,17 @@
+package me.figo.models;
+
+import com.google.gson.annotations.Expose;
+
+public class ErrorResponse {
+
+ @Expose
+ private ErrorObject error;
+
+ public ErrorResponse() {
+ }
+
+ public ErrorObject getError() {
+ return error;
+ }
+
+}
diff --git a/src/test/java/me/figo/FigoApiExceptionTest.java b/src/test/java/me/figo/FigoApiExceptionTest.java
new file mode 100644
index 0000000..8ffe45c
--- /dev/null
+++ b/src/test/java/me/figo/FigoApiExceptionTest.java
@@ -0,0 +1,29 @@
+package me.figo;
+
+import com.google.gson.Gson;
+import me.figo.internal.GsonAdapter;
+import me.figo.models.ErrorResponse;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class FigoApiExceptionTest {
+
+ @Test
+ public void ensureNonNullMessage() {
+ Gson g = GsonAdapter.createGson();
+
+ String errorResponse = "{\n" +
+ " \"error\": {\n" +
+ " \"code\": 1000,\n" +
+ " \"description\": \"Request body doesn't match input schema.\"\n" +
+ " }\n" +
+ "}";
+
+ ErrorResponse resp = g.fromJson(errorResponse, ErrorResponse.class);
+ FigoApiException ex = new FigoApiException(resp);
+
+ Assert.assertNotNull(ex.getMessage());
+ Assert.assertEquals(ex.getMessage(), ex.getError().toString());
+ }
+
+}
diff --git a/src/test/java/me/figo/SessionTest.java b/src/test/java/me/figo/SessionTest.java
index 95d5b53..dd27458 100644
--- a/src/test/java/me/figo/SessionTest.java
+++ b/src/test/java/me/figo/SessionTest.java
@@ -153,7 +153,7 @@ public void testGetErrorMessage() throws IOException {
fail(acc.getName());
}
catch(FigoException e) {
- assertEquals(null, e.getErrorMessage());
+ assertEquals("ErrorObject [code=1002, description=Not Found, data={}, group=client]", e.getErrorMessage());
assertEquals("Not Found", e.getErrorDescription());
}
}
diff --git a/src/test/java/me/figo/models/ErrorObjectTest.java b/src/test/java/me/figo/models/ErrorObjectTest.java
new file mode 100644
index 0000000..ecd98c5
--- /dev/null
+++ b/src/test/java/me/figo/models/ErrorObjectTest.java
@@ -0,0 +1,33 @@
+package me.figo.models;
+
+import com.google.gson.Gson;
+import me.figo.internal.GsonAdapter;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ErrorObjectTest {
+
+ @Test
+ public void testGson() {
+ Gson g = GsonAdapter.createGson();
+
+ String errorResponse = "{\n" +
+ " \"error\": {\n" +
+ " \"code\": 1000,\n" +
+ " \"data\": {\"bank_code\": [\"Not a valid string.\"],\n" +
+ " \"credentials\": [\"Credentials must contain at least 2 strings.\"]},\n" +
+ " \"description\": \"Request body doesn't match input schema.\",\n" +
+ " \"group\": \"client\"\n" +
+ " }\n" +
+ "}";
+
+ ErrorResponse resp = g.fromJson(errorResponse, ErrorResponse.class);
+
+ ErrorObject obj = resp.getError();
+
+ Assert.assertNotNull(obj.getData());
+ Assert.assertTrue(obj.getData().containsKey("bank_code"));
+ Assert.assertEquals(obj.getData().get("bank_code").get(0), "Not a valid string.");
+ }
+
+}