in dubbo-rpc-extensions/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java [62:140]
public void handle(NettyRequestFacade requestFacade, NettyHttpResponse nettyHttpResponse) throws IOException {
// set remote address
RpcContext.getServiceContext().setRemoteAddress(requestFacade.getRemoteAddr(), requestFacade.getRemotePort());
// set local address
RpcContext.getServiceContext().setLocalAddress(requestFacade.getLocalAddr(), requestFacade.getLocalPort());
// set request
RpcContext.getServiceContext().setRequest(requestFacade);
// set response
RpcContext.getServiceContext().setResponse(nettyHttpResponse);
Object nettyHttpRequest = requestFacade.getRequest();
RestFilterContext restFilterContext =
new RestFilterContext(url, requestFacade, nettyHttpResponse, serviceDeployer);
try {
// first request filter
executeFilters(restFilterContext, restRequestFilters);
} catch (PathNoFoundException pathNoFoundException) {
logger.error(
"",
pathNoFoundException.getMessage(),
"",
"dubbo rest protocol provider path no found ,raw request is :" + nettyHttpRequest,
pathNoFoundException);
nettyHttpResponse.sendError(404, pathNoFoundException.getMessage());
} catch (ParamParseException paramParseException) {
logger.error(
"",
paramParseException.getMessage(),
"",
"dubbo rest protocol provider param parse error ,and raw request is :" + nettyHttpRequest,
paramParseException);
nettyHttpResponse.sendError(400, paramParseException.getMessage());
} catch (MediaTypeUnSupportException contentTypeException) {
logger.error(
"",
contentTypeException.getMessage(),
"",
"dubbo rest protocol provider content-type un support" + nettyHttpRequest,
contentTypeException);
nettyHttpResponse.sendError(415, contentTypeException.getMessage());
} catch (Throwable throwable) {
logger.error(
"",
throwable.getMessage(),
"",
"dubbo rest protocol provider error ,and raw request is " + nettyHttpRequest,
throwable);
nettyHttpResponse.sendError(
500,
"dubbo rest invoke Internal error, message is " + throwable.getMessage()
+ " ,and exception type is : " + throwable.getClass() + " , stacktrace is: "
+ ServiceInvokeRestFilter.stackTraceToString(throwable));
}
// second response filter
try {
executeFilters(restFilterContext, restResponseFilters);
} catch (Throwable throwable) {
logger.error(
"",
throwable.getMessage(),
"",
"dubbo rest protocol provider error ,and raw request is " + nettyHttpRequest,
throwable);
nettyHttpResponse.sendError(
500,
"dubbo rest invoke Internal error, message is " + throwable.getMessage()
+ " ,and exception type is : " + throwable.getClass() + " , stacktrace is: "
+ ServiceInvokeRestFilter.stackTraceToString(throwable));
}
}