public static MethodMetadata toMethodMetadata(ThriftCodecManager codecManager, ThriftMethodMetadata metadata) { List<ParameterMetadata> parameters = metadata.getParameters().stream() .map(parameter -> new ParameterMetadata( parameter.getId(), parameter.getName(), getCodec(codecManager, parameter.getThriftType()))) .collect(Collectors.toList()); ThriftCodec<Object> resultCodec = getCodec(codecManager, metadata.getReturnType()); Map<Short, ThriftCodec<Object>> exceptionCodecs = ImmutableMap.copyOf( transformEntries(metadata.getExceptions(), (key, value) -> getCodec(codecManager, value))); return new MethodMetadata( metadata.getName(), parameters, resultCodec, exceptionCodecs, metadata.getOneway(), metadata.isIdempotent()); }
private static void writeRequest(MethodMetadata method, List<Object> parameters, TProtocol protocol) throws Exception { TMessage requestMessage = new TMessage(method.getName(), CALL, SEQUENCE_ID); protocol.writeMessageBegin(requestMessage); // write the parameters ProtocolWriter writer = new ProtocolWriter(new ThriftToDriftProtocolWriter(protocol)); writer.writeStructBegin(method.getName() + "_args"); for (int i = 0; i < parameters.size(); i++) { Object value = parameters.get(i); ParameterMetadata parameter = method.getParameters().get(i); writer.writeField(parameter.getName(), parameter.getFieldId(), parameter.getCodec(), value); } writer.writeStructEnd(); protocol.writeMessageEnd(); protocol.getTransport().flush(); }
arguments.put(fieldId, reader.readField(parameter.getCodec())); if (!arguments.containsKey(parameter.getFieldId())) { Type argumentType = parameter.getCodec().getType().getJavaType(); arguments.put(parameter.getFieldId(), defaultValue);
arguments.put(fieldId, reader.readField(parameter.getCodec())); if (!arguments.containsKey(parameter.getFieldId())) { Type argumentType = parameter.getCodec().getType().getJavaType(); arguments.put(parameter.getFieldId(), defaultValue);
private static void writeRequest(MethodMetadata method, List<Object> parameters, TProtocol protocol) throws Exception { TMessage requestMessage = new TMessage(method.getName(), CALL, SEQUENCE_ID); protocol.writeMessageBegin(requestMessage); // write the parameters ProtocolWriter writer = new ProtocolWriter(new ThriftToDriftProtocolWriter(protocol)); writer.writeStructBegin(method.getName() + "_args"); for (int i = 0; i < parameters.size(); i++) { Object value = parameters.get(i); ParameterMetadata parameter = method.getParameters().get(i); writer.writeField(parameter.getName(), parameter.getFieldId(), parameter.getCodec(), value); } writer.writeStructEnd(); protocol.writeMessageEnd(); protocol.getTransport().flush(); }
ParameterMetadata parameter = new ParameterMetadata( (short) 1, "messages",
Object value = parameters.get(i); ParameterMetadata parameter = method.getParameters().get(i); writer.writeField(parameter.getName(), parameter.getFieldId(), parameter.getCodec(), value);
private static int logApacheThriftInvocationHandler(HostAndPort address, List<DriftLogEntry> entries) { ApacheThriftClientConfig config = new ApacheThriftClientConfig(); ApacheThriftConnectionFactoryConfig factoryConfig = new ApacheThriftConnectionFactoryConfig(); try (ApacheThriftMethodInvokerFactory<Void> methodInvokerFactory = new ApacheThriftMethodInvokerFactory<>(factoryConfig, clientIdentity -> config)) { MethodInvoker methodInvoker = methodInvokerFactory.createMethodInvoker(null); ParameterMetadata parameter = new ParameterMetadata( (short) 1, "messages", (ThriftCodec<Object>) codecManager.getCodec(list(codecManager.getCodec(DriftLogEntry.class).getType()))); MethodMetadata methodMetadata = new MethodMetadata( "Log", ImmutableList.of(parameter), (ThriftCodec<Object>) (Object) codecManager.getCodec(DriftResultCode.class), ImmutableMap.of(), false, true); ListenableFuture<Object> future = methodInvoker.invoke(new InvokeRequest(methodMetadata, () -> address, ImmutableMap.of(), ImmutableList.of(entries))); assertEquals(future.get(), DRIFT_OK); return 1; } catch (Exception e) { throw new RuntimeException(e); } }
Object value = parameters.get(i); ParameterMetadata parameter = method.getParameters().get(i); writer.writeField(parameter.getName(), parameter.getFieldId(), parameter.getCodec(), value);
ParameterMetadata parameter = new ParameterMetadata( (short) 1, "messages",
ParameterMetadata parameter = new ParameterMetadata( (short) 1, "messages",