Currently we support the following interface definition, but there are some
problem in handler. When error code is 400 or 500, handler taking this error
code as error, and will throw exception. For example using bizkeeper handler we
have this code. This code will give a cast case exeception since result is not
Throwable.
Any suggestions for this scenario? Change bizkeeper code to check if result if
Throwable or change our logic to taking when Resonse.isFailed to be true?
--bizkeeper code:
if (isFailedResponse(resp)) {
// e should implements toString
LOG.warn("bizkeeper command {} failed due to {}",
invocation.getInvocationQualifiedName(),
resp.getResult());
f.onError(resp.getResult());
FallbackPolicyManager.record(type, invocation, resp, false);
}
---service definition:
@Path("/usingCSEResponse2")
@POST
@ApiResponses({
@ApiResponse(code = 200, response = MultiResponse200.class, message
= ""),
@ApiResponse(code = 400, response = MultiResponse400.class, message
= ""),
@ApiResponse(code = 500, response = MultiResponse500.class, message
= "")})
@ResponseHeaders({@ResponseHeader(name = "x-code", response =
String.class)})
public Response usingCSEResponse2(MultiRequest request) {
Response response = new Response();
if (request.getCode() == 400) {
MultiResponse400 r = new MultiResponse400();
r.setName("400");
response.setStatus(javax.ws.rs.core.Response.Status.BAD_REQUEST);
response.setResult(r);
response.getHeaders().addHeader("x-code", "400");
} else if (request.getCode() == 500) {
MultiResponse500 r = new MultiResponse500();
r.setName("500");
response.setStatus(javax.ws.rs.core.Response.Status.BAD_REQUEST);
response.setResult(r);
response.getHeaders().addHeader("x-code", "500");
} else {
MultiResponse200 r = new MultiResponse200();
r.setName("200");
response.setStatus(javax.ws.rs.core.Response.Status.BAD_REQUEST);
response.setResult(r);
response.getHeaders().addHeader("x-code", "200");
}
return response;
}