This is an automated email from the git hooks/post-receive script. New commit to branch feature/7708 in repository observe. See http://git.codelutin.com/observe.git commit 048e828b89636d164cac8607b17782ffe8ca26d2 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 17:14:36 2015 +0100 gestion des erreurs dans l'ecran de test de connexion au serveur distant (refs #7708) --- .../fr/ird/observe/ui/storage/StorageUIModel.java | 3 +- .../observe/services/ObserveHttpErrorAdapter.java | 37 +++++++++++++++++ .../services/ObserveServiceFactoryRest.java | 9 +---- .../services/ObserveServiceRestErrorException.java | 16 ++++++++ .../ObserveServiceRestNotAvailableException.java | 1 + .../observe/services/http/ObserveHttpError.java | 47 ++++++++++++++++++++++ .../services/http/ObserveResponseBuilder.java | 28 +++++++++++-- 7 files changed, 130 insertions(+), 11 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java index 3b6657e..ab8b3c8 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java @@ -1695,7 +1695,8 @@ public class StorageUIModel extends WizardModel<StorageStep> { try { - if (DbMode.USE_SERVER.equals(getDbMode())) { + if (DbMode.USE_SERVER.equals(getDbMode()) + || DbMode.CREATE_LOCAL.equals(getDbMode()) && CreationMode.IMPORT_SERVER_STORAGE.equals(creationMode)) { PingService pingService = dataSource.newService(PingService.class); diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveHttpErrorAdapter.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveHttpErrorAdapter.java new file mode 100644 index 0000000..79ffbc0 --- /dev/null +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveHttpErrorAdapter.java @@ -0,0 +1,37 @@ +package fr.ird.observe.services; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import fr.ird.observe.services.http.ObserveHttpError; + +import java.lang.reflect.Type; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveHttpErrorAdapter implements JsonDeserializer<ObserveHttpError> { + @Override + public ObserveHttpError deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + + JsonObject jsonObject = json.getAsJsonObject(); + + Integer httpCode = context.deserialize(jsonObject.get(ObserveHttpError.PROPERTY_HTTP_CODE), Integer.class); + + String message = context.deserialize(jsonObject.get(ObserveHttpError.PROPERTY_MESSAGE), String.class); + + Class exceptionType = context.deserialize(jsonObject.get(ObserveHttpError.PROPERTY_EXECPTION_TYPE), Class.class); + + Throwable exception = null; + + if (exceptionType != null) { + + exception = context.deserialize(jsonObject.get(ObserveHttpError.PROPERTY_EXCEPTION), exceptionType); + + } + + return new ObserveHttpError(httpCode, exceptionType, message, exception); + } +} diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java index b3034ed..a695ff0 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java @@ -23,12 +23,9 @@ package fr.ird.observe.services; */ import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import com.google.common.reflect.Reflection; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -40,6 +37,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestC import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceConnectionRest; import fr.ird.observe.services.dto.gson.ObserveDtoGsonSupplier; +import fr.ird.observe.services.http.ObserveHttpError; import fr.ird.observe.services.http.ObserveRequest; import fr.ird.observe.services.http.ObserveRequestBuilder; import fr.ird.observe.services.http.ObserveRequestMethod; @@ -54,11 +52,7 @@ import org.apache.commons.logging.LogFactory; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; import java.util.Collection; -import java.util.List; /** * Created on 16/08/15. @@ -81,6 +75,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport impl // Les ObserveDataSourceConnection sont obligatoirement de type ObserveDataSourceConnectionRest builder.registerTypeAdapter(ObserveDataSourceConnection.class, new ObserveDataSourceConnectionAdapter()); + builder.registerTypeAdapter(ObserveHttpError.class, new ObserveHttpErrorAdapter()); return builder; } diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestErrorException.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestErrorException.java new file mode 100644 index 0000000..e6c3033 --- /dev/null +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestErrorException.java @@ -0,0 +1,16 @@ +package fr.ird.observe.services; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveServiceRestErrorException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public ObserveServiceRestErrorException() { + } + + public ObserveServiceRestErrorException(String message) { + super(message); + } +} diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestNotAvailableException.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestNotAvailableException.java index f4e0112..1145be6 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestNotAvailableException.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestNotAvailableException.java @@ -38,6 +38,7 @@ public class ObserveServiceRestNotAvailableException extends RuntimeException { private final URL serverUrl; public ObserveServiceRestNotAvailableException(URL serverUrl) { + super("Server " + serverUrl + " not available"); this.serverUrl = serverUrl; } diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveHttpError.java b/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveHttpError.java new file mode 100644 index 0000000..224eb1e --- /dev/null +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveHttpError.java @@ -0,0 +1,47 @@ +package fr.ird.observe.services.http; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +// TODO doublon avec fr.ird.observe.application.web.controller.v1.ObserveWebErrorController.Error +public class ObserveHttpError { + + public static final String PROPERTY_HTTP_CODE = "httpCode"; + + public static final String PROPERTY_EXECPTION_TYPE = "exceptionType"; + + public static final String PROPERTY_MESSAGE = "message"; + + public static final String PROPERTY_EXCEPTION = "exception"; + + protected final Integer httpCode; + + protected final Class<?> exceptionType; + + protected final String message; + + protected final Throwable exception; + + public ObserveHttpError(Integer httpCode, Class<?> exceptionType, String message, Throwable exception) { + this.httpCode = httpCode; + this.exceptionType = exceptionType; + this.message = message; + this.exception = exception; + } + + public Integer getHttpCode() { + return httpCode; + } + + public Class<?> getExceptionType() { + return exceptionType; + } + + public String getMessage() { + return message; + } + + public Throwable getException() { + return exception; + } +} diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveResponseBuilder.java b/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveResponseBuilder.java index 563674a..4851de8 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveResponseBuilder.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/http/ObserveResponseBuilder.java @@ -26,6 +26,7 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; import com.google.gson.Gson; +import fr.ird.observe.services.ObserveServiceRestErrorException; import fr.ird.observe.services.ObserveServiceRestNotAvailableException; import fr.ird.observe.services.dto.gson.ObserveDtoGsonSupplier; import org.apache.commons.io.Charsets; @@ -107,7 +108,7 @@ public class ObserveResponseBuilder { } - public <T> ObserveResponse<T> build(ObserveRequest request, Type resultType) throws IOException { + public <T> ObserveResponse<T> build(ObserveRequest request, Type resultType) throws Throwable { String baseUrl = request.getBaseUrl(); Preconditions.checkNotNull(baseUrl, "'baseUrl' can't be null"); @@ -117,8 +118,29 @@ public class ObserveResponseBuilder { ResponseContext responseContext = executeRequest(request); - if (responseContext.statusCode != 200 && log.isWarnEnabled()) { - log.warn(String.format("Unexpected status code for url: %s\n%s", baseUrl, responseContext.responseAsString)); + if (responseContext.statusCode != 200) { + if (log.isWarnEnabled()) { + log.warn(String.format("Unexpected status code for url: %s\n%s", baseUrl, responseContext.responseAsString)); + } + + ObserveHttpError error = convertJson(responseContext.responseAsString, ObserveHttpError.class); + + if (error != null) { + + throw new ObserveServiceRestErrorException("" + responseContext.statusCode); + + } else { + + if (error.getException() != null) { + + throw error.getException(); + + } else { + + throw new ObserveServiceRestErrorException(error.getHttpCode() + " : " + error.getMessage()); + + } + } } T resultObject = convertJson(responseContext.responseAsString, resultType); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.