
com.ovh.ws.jsonizer.api.DefaultRequestSender Maven / Gradle / Ivy
The newest version!
/**
* Copyright 2012, OVH. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and limitations under the License.
*/
package com.ovh.ws.jsonizer.api;
import java.util.List;
import com.ovh.ws.api.AsyncCallback;
import com.ovh.ws.api.OvhWsException;
import com.ovh.ws.api.OvhWsException.Type;
import com.ovh.ws.api.request.RequestListener;
import com.ovh.ws.jsonizer.api.exception.AgreementRequiredException;
import com.ovh.ws.jsonizer.api.http.HttpAsyncHandler;
import com.ovh.ws.jsonizer.api.http.HttpClient;
import com.ovh.ws.jsonizer.api.http.HttpRequester;
import com.ovh.ws.jsonizer.api.http.HttpResponseHandler;
import com.ovh.ws.jsonizer.api.parser.Parser;
import com.ovh.ws.jsonizer.api.request.RequestSender;
import com.ovh.ws.jsonizer.api.request.RestRequest;
import com.ovh.ws.jsonizer.api.response.Error;
import com.ovh.ws.jsonizer.api.response.RestResponse;
public class DefaultRequestSender implements RequestSender, HttpAsyncHandler {
private final JsonizerConfig config;
private final HttpRequester httpRequester;
private RequestListener requestListener;
private AsyncCallbackListener callbackListener;
public DefaultRequestSender(JsonizerConfig config) {
this.config = config;
httpRequester = new HttpRequester(config);
}
@Override
public T send(RestRequest request) throws OvhWsException {
try {
String content = httpRequester.execute(request);
return onComplete(request, content);
} catch (OvhWsException caught) {
getRequestListener().onFailure(request, caught);
throw caught;
}
}
@Override
public void send(RestRequest request, AsyncCallback callback) {
HttpResponseHandler responseHandler = new HttpResponseHandler(this, request, callback);
httpRequester.execute(request, responseHandler);
}
@Override
public void onComplete(RestRequest request, String content, AsyncCallback callback) {
try {
T result = onComplete(request, content);
getCallbackListener().onSuccess(result, callback);
} catch (OvhWsException caught) {
onFailure(request, caught, callback);
}
}
private T onComplete(RestRequest request, String content) throws OvhWsException {
RestResponse response = readAndCheckResponse(request, content);
T result = getParser().convertValue(response.getAnswer(), request.getResponseType());
if (result == null && request.getResponseType() instanceof Class
&& ((Class>) request.getResponseType()).isEnum()) {
throw new OvhWsException(Type.ObjectNotFound, "The server response of type " + request.getResponseType()
+ " is not recognized : " + response.getAnswer());
}
getRequestListener().onSuccess(request, result);
return result;
}
@Override
public void onFailure(RestRequest request, OvhWsException caught, AsyncCallback callback) {
getRequestListener().onFailure(request, caught);
getCallbackListener().onFailure(caught, callback);
}
private RestResponse readAndCheckResponse(RestRequest request, String content) throws OvhWsException {
RestResponse response = getParser().readValue(content, RestResponse.class);
if (response.getError() != null) {
throw createOvhWsException(response.getError());
} else if (response.getAnswer() == null && !Void.class.equals(request.getResponseType())) {
throw new OvhWsException(Type.NoAnswer, "There was an error in the server response");
}
return response;
}
private OvhWsException createOvhWsException(Error error) throws OvhWsException {
OvhWsException ovhWsException;
if (Type.AgreementRequired.getStatus() == error.getStatus() && error.getValue() != null) {
List values = getParser().convertValue(error.getValue(),
AgreementRequiredException.getResponseType());
ovhWsException = new AgreementRequiredException(error.getMessage(), values);
} else {
ovhWsException = new OvhWsException(error.getStatus(), error.getMessage());
}
return ovhWsException;
}
private RequestListener getRequestListener() {
if (requestListener == null) {
return config.getRequestListener();
}
return requestListener;
}
public void setRequestListener(RequestListener requestListener) {
this.requestListener = requestListener;
}
private AsyncCallbackListener getCallbackListener() {
if (callbackListener == null) {
return config.getCallbackListener();
}
return callbackListener;
}
public void setAsyncCallbackListener(AsyncCallbackListener callbackListener) {
this.callbackListener = callbackListener;
}
public HttpClient getHttpClient() {
return httpRequester.getHttpClient();
}
public void setHttpClient(HttpClient httpClient) {
httpRequester.setHttpClient(httpClient);
}
private Parser getParser() {
return config.getParser();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy