use of org.apache.servicecomb.transport.highway.message.ResponseHeader in project incubator-servicecomb-java-chassis by apache.
the class TestHighwayCodec method testDecodeResponse.
@Test
public void testDecodeResponse() throws Exception {
Invocation invocation = Mockito.mock(Invocation.class);
Mockito.when(operationProtobuf.findResponseSchema(200)).thenReturn(Mockito.mock(WrapSchema.class));
Map<String, String> context = new HashMap<>();
Mockito.when(invocation.getContext()).thenReturn(context);
TcpData tcpData = Mockito.mock(TcpData.class);
Mockito.when(tcpData.getHeaderBuffer()).thenReturn(bodyBuffer);
commonMock();
ResponseHeader header = new ResponseHeader();
header.setStatusCode(200);
header.setContext(new HashMap<>());
header.getContext().put("a", "10");
Buffer responseBuf = HighwayCodec.encodeResponse(0, header, null, null, new ProtobufFeature());
TcpData tcp = new TcpData(responseBuf.slice(23, responseBuf.length()), null);
Response response = HighwayCodec.decodeResponse(invocation, operationProtobuf, tcp, null);
Assert.assertEquals("10", invocation.getContext().get("a"));
Assert.assertEquals(200, response.getStatusCode());
}
use of org.apache.servicecomb.transport.highway.message.ResponseHeader in project incubator-servicecomb-java-chassis by apache.
the class HighwayCodec method decodeResponse.
public static Response decodeResponse(Invocation invocation, OperationProtobuf operationProtobuf, TcpData tcpData, ProtobufFeature protobufFeature) throws Exception {
ResponseHeader header = ResponseHeader.readObject(tcpData.getHeaderBuffer(), protobufFeature);
if (header.getContext() != null) {
invocation.getContext().putAll(header.getContext());
}
WrapSchema bodySchema = operationProtobuf.findResponseSchema(header.getStatusCode());
Object body = bodySchema.readObject(tcpData.getBodyBuffer(), protobufFeature);
Response response = Response.create(header.getStatusCode(), header.getReasonPhrase(), body);
response.setHeaders(header.getHeaders());
return response;
}
use of org.apache.servicecomb.transport.highway.message.ResponseHeader in project incubator-servicecomb-java-chassis by apache.
the class HighwayServerConnection method onLogin.
protected void onLogin(long msgId, RequestHeader header, Buffer bodyBuffer) {
LoginRequest request = null;
try {
request = LoginRequest.readObject(bodyBuffer);
} catch (Exception e) {
String msg = String.format("decode setParameter error, msgId=%d", msgId);
LOGGER.error(msg, e);
netSocket.close();
return;
}
if (request != null) {
this.setProtocol(request.getProtocol());
this.setZipName(request.getZipName());
this.protobufFeature.setUseProtobufMapCodec(request.isUseProtobufMapCodec());
}
try (HighwayOutputStream os = new HighwayOutputStream(msgId, protobufFeature)) {
ResponseHeader responseHeader = new ResponseHeader();
responseHeader.setStatusCode(Status.OK.getStatusCode());
LoginResponse response = new LoginResponse();
response.setUseProtobufMapCodec(protobufFeature.isUseProtobufMapCodec());
os.write(ResponseHeader.getResponseHeaderSchema(), responseHeader, LoginResponse.getLoginResponseSchema(), response);
netSocket.write(os.getBuffer());
} catch (Exception e) {
throw new Error("impossible.", e);
}
}
use of org.apache.servicecomb.transport.highway.message.ResponseHeader in project incubator-servicecomb-java-chassis by apache.
the class HighwayServerInvoke method sendResponse.
private void sendResponse(Map<String, String> context, Response response) {
ResponseHeader header = new ResponseHeader();
header.setStatusCode(response.getStatusCode());
header.setReasonPhrase(response.getReasonPhrase());
header.setContext(context);
header.setHeaders(response.getHeaders());
WrapSchema bodySchema = operationProtobuf.findResponseSchema(response.getStatusCode());
Object body = response.getResult();
if (response.isFailed()) {
body = ((InvocationException) body).getErrorData();
}
try {
Buffer respBuffer = HighwayCodec.encodeResponse(msgId, header, bodySchema, body, protobufFeature);
connection.write(respBuffer.getByteBuf());
} catch (Exception e) {
// 没招了,直接打日志
String msg = String.format("encode response failed, %s, msgId=%d", operationProtobuf.getOperationMeta().getMicroserviceQualifiedName(), msgId);
LOGGER.error(msg, e);
} finally {
invocation.onFinish(response);
}
}
Aggregations