Repository: kylin Updated Branches: refs/heads/master-hbase0.98 d6a844bb1 -> 0dc56aa4a (forced update)
KYLIN-2441 protocol for REST API result format Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/41332f3e Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/41332f3e Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/41332f3e Branch: refs/heads/master-hbase0.98 Commit: 41332f3ed430b095efe5edefc831f0ec27f4b2ee Parents: f2e8b69 Author: Hongbin Ma <mahong...@apache.org> Authored: Fri Feb 10 12:34:49 2017 +0800 Committer: Hongbin Ma <mahong...@apache.org> Committed: Fri Feb 10 12:35:14 2017 +0800 ---------------------------------------------------------------------- .../rest/controller/EncodingController.java | 3 +- .../rest/exception/BadRequestException.java | 37 +++++++++----------- .../kylin/rest/response/EnvelopeResponse.java | 34 ++++-------------- .../kylin/rest/response/ErrorResponse.java | 32 ++++++++++++----- .../kylin/rest/response/ResponseCode.java | 30 ++++++++++++++++ 5 files changed, 79 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/41332f3e/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java index b95394c..4a8b122 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.kylin.metadata.datatype.DataType; import org.apache.kylin.rest.response.EnvelopeResponse; +import org.apache.kylin.rest.response.ResponseCode; import org.apache.kylin.rest.service.EncodingService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +66,6 @@ public class EncodingController extends BasicController { datatypeValidEncodings.put(dataTypeStr, encodingService.getValidEncodings(DataType.getType(dataTypeStr))); } - return new EnvelopeResponse(EnvelopeResponse.CODE_SUCCESS, datatypeValidEncodings, ""); + return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, datatypeValidEncodings, ""); } } http://git-wip-us.apache.org/repos/asf/kylin/blob/41332f3e/server-base/src/main/java/org/apache/kylin/rest/exception/BadRequestException.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/exception/BadRequestException.java b/server-base/src/main/java/org/apache/kylin/rest/exception/BadRequestException.java index 42b671b..af1995b 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/exception/BadRequestException.java +++ b/server-base/src/main/java/org/apache/kylin/rest/exception/BadRequestException.java @@ -18,6 +18,7 @@ package org.apache.kylin.rest.exception; +import org.apache.kylin.rest.response.ResponseCode; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -27,35 +28,31 @@ import org.springframework.web.bind.annotation.ResponseStatus; */ @ResponseStatus(value = HttpStatus.BAD_REQUEST) public class BadRequestException extends RuntimeException { - /** - * - */ + private static final long serialVersionUID = -6798154278095441848L; - public BadRequestException(String s) { - super(s); - } + private String code; /** - * + * legacy support, new APIs should not call this. Instead, new APIs should provide return code */ - public BadRequestException() { - super(); + public BadRequestException(String msg) { + super(msg); + this.code = ResponseCode.CODE_UNDEFINED; } - /** - * @param arg0 - * @param arg1 - */ - public BadRequestException(String arg0, Throwable arg1) { - super(arg0, arg1); + public BadRequestException(String msg, String code) { + super(msg); + this.code = code; } - /** - * @param arg0 - */ - public BadRequestException(Throwable arg0) { - super(arg0); + public BadRequestException(String msg, String code, Throwable cause) { + super(msg, cause); + this.code = code; + } + + public String getCode() { + return code; } } http://git-wip-us.apache.org/repos/asf/kylin/blob/41332f3e/server-base/src/main/java/org/apache/kylin/rest/response/EnvelopeResponse.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/response/EnvelopeResponse.java b/server-base/src/main/java/org/apache/kylin/rest/response/EnvelopeResponse.java index 564db70..7855dee 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/response/EnvelopeResponse.java +++ b/server-base/src/main/java/org/apache/kylin/rest/response/EnvelopeResponse.java @@ -20,39 +20,17 @@ package org.apache.kylin.rest.response; public class EnvelopeResponse { - public final static String CODE_SUCCESS = "000"; + public String code; + public Object data; + public String msg; - private String code; - private Object data; - private String msg; - - public EnvelopeResponse(String code, Object data, String msg) { - this.code = code; - this.data = data; - this.msg = msg; - } - - public String getCode() { - return code; + //only for child + protected EnvelopeResponse() { } - public void setCode(String code) { + public EnvelopeResponse(String code, Object data, String msg) { this.code = code; - } - - public Object getData() { - return data; - } - - public void setData(Object data) { this.data = data; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { this.msg = msg; } } http://git-wip-us.apache.org/repos/asf/kylin/blob/41332f3e/server-base/src/main/java/org/apache/kylin/rest/response/ErrorResponse.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/response/ErrorResponse.java b/server-base/src/main/java/org/apache/kylin/rest/response/ErrorResponse.java index 3327cc0..508a35f 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/response/ErrorResponse.java +++ b/server-base/src/main/java/org/apache/kylin/rest/response/ErrorResponse.java @@ -18,21 +18,37 @@ package org.apache.kylin.rest.response; +import org.apache.kylin.rest.exception.BadRequestException; + +import com.google.common.base.Throwables; + /** - * @author xduo - * + * response to client when the return HTTP code is not 200 */ -public class ErrorResponse { +public class ErrorResponse extends EnvelopeResponse { - public String url; + //stacktrace of the exception + public String stacktrace; + + //same as EnvelopeResponse.msg, kept for legacy reasons public String exception; - /** - * @param exception - */ + //request URL, kept from legacy codes + public String url; + public ErrorResponse(String url, Exception exception) { + super(); + this.url = url; this.exception = exception.getLocalizedMessage(); - } + this.msg = exception.getLocalizedMessage(); + this.stacktrace = Throwables.getStackTraceAsString(exception); + this.data = null; + if (exception instanceof BadRequestException) { + this.code = ((BadRequestException) exception).getCode(); + } else { + this.code = ResponseCode.CODE_UNDEFINED; + } + } } http://git-wip-us.apache.org/repos/asf/kylin/blob/41332f3e/server-base/src/main/java/org/apache/kylin/rest/response/ResponseCode.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/response/ResponseCode.java b/server-base/src/main/java/org/apache/kylin/rest/response/ResponseCode.java new file mode 100644 index 0000000..8c3860a --- /dev/null +++ b/server-base/src/main/java/org/apache/kylin/rest/response/ResponseCode.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.apache.kylin.rest.response; + +/** + * It's not HTTP return code! + * It represents code for business states + * each API can specify different semantics to each code + * 000 and 999 are reserved + */ +public class ResponseCode { + public final static String CODE_SUCCESS = "000"; + public final static String CODE_UNDEFINED = "999"; +}