Search in sources :

Example 1 with TBase

use of org.apache.thrift.TBase in project hive by apache.

the class JSONMessageFactory method getTObj.

/*
   * TODO: Some thoughts here : We have a current todo to move some of these methods over to
   * MessageFactory instead of being here, so we can override them, but before we move them over,
   * we should keep the following in mind:
   *
   * a) We should return Iterables, not Lists. That makes sure that we can be memory-safe when
   * implementing it rather than forcing ourselves down a path wherein returning List is part of
   * our interface, and then people use .size() or somesuch which makes us need to materialize
   * the entire list and not change. Also, returning Iterables allows us to do things like
   * Iterables.transform for some of these.
   * b) We should not have "magic" names like "tableObjJson", because that breaks expectation of a
   * couple of things - firstly, that of serialization format, although that is fine for this
   * JSONMessageFactory, and secondly, that makes us just have a number of mappings, one for each
   * obj type, and sometimes, as the case is with alter, have multiples. Also, any event-specific
   * item belongs in that event message / event itself, as opposed to in the factory. It's okay to
   * have utility accessor methods here that are used by each of the messages to provide accessors.
   * I'm adding a couple of those here.
   *
   */
public static TBase getTObj(String tSerialized, Class<? extends TBase> objClass) throws Exception {
    TBase obj = objClass.newInstance();
    thriftDeSerializer.deserialize(obj, tSerialized, "UTF-8");
    return obj;
}
Also used : TBase(org.apache.thrift.TBase)

Example 2 with TBase

use of org.apache.thrift.TBase in project storm by apache.

the class ThriftSerializationDelegate method deserialize.

@Override
public <T> T deserialize(byte[] bytes, Class<T> clazz) {
    try {
        TBase instance = (TBase) clazz.newInstance();
        new TDeserializer().deserialize(instance, bytes);
        return (T) instance;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : TDeserializer(org.apache.thrift.TDeserializer) TBase(org.apache.thrift.TBase) TException(org.apache.thrift.TException)

Example 3 with TBase

use of org.apache.thrift.TBase in project storm by apache.

the class LocalState method deserialize.

private TBase deserialize(ThriftSerializedObject obj, TDeserializer td) {
    try {
        Class<?> clazz = Class.forName(obj.get_name());
        TBase instance = (TBase) clazz.newInstance();
        td.deserialize(instance, obj.get_bits());
        return instance;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : TBase(org.apache.thrift.TBase) IOException(java.io.IOException)

Example 4 with TBase

use of org.apache.thrift.TBase in project storm by apache.

the class LocalState method get.

public TBase get(String key) {
    TDeserializer td = new TDeserializer();
    Map<String, ThriftSerializedObject> partial = partialSnapshot(td);
    ThriftSerializedObject tso = partial.get(key);
    TBase ret = null;
    if (tso != null) {
        ret = deserialize(tso, td);
    }
    return ret;
}
Also used : TDeserializer(org.apache.thrift.TDeserializer) TBase(org.apache.thrift.TBase) ThriftSerializedObject(org.apache.storm.generated.ThriftSerializedObject)

Example 5 with TBase

use of org.apache.thrift.TBase in project dubbo by alibaba.

the class ThriftCodec method encodeRequest.

private void encodeRequest(Channel channel, ChannelBuffer buffer, Request request) throws IOException {
    RpcInvocation inv = (RpcInvocation) request.getData();
    int seqId = nextSeqId();
    String serviceName = inv.getAttachment(Constants.INTERFACE_KEY);
    if (StringUtils.isEmpty(serviceName)) {
        throw new IllegalArgumentException(new StringBuilder(32).append("Could not find service name in attachment with key ").append(Constants.INTERFACE_KEY).toString());
    }
    TMessage message = new TMessage(inv.getMethodName(), TMessageType.CALL, seqId);
    String methodArgs = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class).getExtension(channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME)).generateArgsClassName(serviceName, inv.getMethodName());
    if (StringUtils.isEmpty(methodArgs)) {
        throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, new StringBuilder(32).append("Could not encode request, the specified interface may be incorrect.").toString());
    }
    Class<?> clazz = cachedClass.get(methodArgs);
    if (clazz == null) {
        try {
            clazz = ClassHelper.forNameWithThreadContextClassLoader(methodArgs);
            cachedClass.putIfAbsent(methodArgs, clazz);
        } catch (ClassNotFoundException e) {
            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
        }
    }
    TBase args;
    try {
        args = (TBase) clazz.newInstance();
    } catch (InstantiationException e) {
        throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
    } catch (IllegalAccessException e) {
        throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
    }
    for (int i = 0; i < inv.getArguments().length; i++) {
        Object obj = inv.getArguments()[i];
        if (obj == null) {
            continue;
        }
        TFieldIdEnum field = args.fieldForId(i + 1);
        String setMethodName = ThriftUtils.generateSetMethodName(field.getFieldName());
        Method method;
        try {
            method = clazz.getMethod(setMethodName, inv.getParameterTypes()[i]);
        } catch (NoSuchMethodException e) {
            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
        }
        try {
            method.invoke(args, obj);
        } catch (IllegalAccessException e) {
            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
        } catch (InvocationTargetException e) {
            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
        }
    }
    RandomAccessByteArrayOutputStream bos = new RandomAccessByteArrayOutputStream(1024);
    TIOStreamTransport transport = new TIOStreamTransport(bos);
    TBinaryProtocol protocol = new TBinaryProtocol(transport);
    int headerLength, messageLength;
    byte[] bytes = new byte[4];
    try {
        // magic
        protocol.writeI16(MAGIC);
        // message length placeholder
        protocol.writeI32(Integer.MAX_VALUE);
        // message header length placeholder
        protocol.writeI16(Short.MAX_VALUE);
        // version
        protocol.writeByte(VERSION);
        // service name
        protocol.writeString(serviceName);
        // dubbo request id
        protocol.writeI64(request.getId());
        protocol.getTransport().flush();
        // header size
        headerLength = bos.size();
        // message body
        protocol.writeMessageBegin(message);
        args.write(protocol);
        protocol.writeMessageEnd();
        protocol.getTransport().flush();
        int oldIndex = messageLength = bos.size();
        // fill in message length and header length
        try {
            TFramedTransport.encodeFrameSize(messageLength, bytes);
            bos.setWriteIndex(MESSAGE_LENGTH_INDEX);
            protocol.writeI32(messageLength);
            bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);
            protocol.writeI16((short) (0xffff & headerLength));
        } finally {
            bos.setWriteIndex(oldIndex);
        }
    } catch (TException e) {
        throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
    }
    buffer.writeBytes(bytes);
    buffer.writeBytes(bos.toByteArray());
}
Also used : RpcInvocation(com.alibaba.dubbo.rpc.RpcInvocation) TException(org.apache.thrift.TException) TIOStreamTransport(org.apache.thrift.transport.TIOStreamTransport) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException) RandomAccessByteArrayOutputStream(com.alibaba.dubbo.rpc.protocol.thrift.io.RandomAccessByteArrayOutputStream) TBinaryProtocol(org.apache.thrift.protocol.TBinaryProtocol) TMessage(org.apache.thrift.protocol.TMessage) TFieldIdEnum(org.apache.thrift.TFieldIdEnum) RpcException(com.alibaba.dubbo.rpc.RpcException) TBase(org.apache.thrift.TBase)

Aggregations

TBase (org.apache.thrift.TBase)31 TException (org.apache.thrift.TException)10 IOException (java.io.IOException)7 TDeserializer (org.apache.thrift.TDeserializer)6 Test (org.junit.Test)5 HeaderTBaseDeserializer (com.navercorp.pinpoint.thrift.io.HeaderTBaseDeserializer)4 ByteBuffer (java.nio.ByteBuffer)4 RpcException (com.alibaba.dubbo.rpc.RpcException)3 SpanStreamUdpSender (com.navercorp.pinpoint.profiler.sender.SpanStreamUdpSender)3 TResult (com.navercorp.pinpoint.thrift.dto.TResult)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 Method (java.lang.reflect.Method)3 ArrayList (java.util.ArrayList)3 TFieldIdEnum (org.apache.thrift.TFieldIdEnum)3 TMessage (org.apache.thrift.protocol.TMessage)3 TIOStreamTransport (org.apache.thrift.transport.TIOStreamTransport)3 RpcInvocation (com.alibaba.dubbo.rpc.RpcInvocation)2 RpcResult (com.alibaba.dubbo.rpc.RpcResult)2 RandomAccessByteArrayOutputStream (com.alibaba.dubbo.rpc.protocol.thrift.io.RandomAccessByteArrayOutputStream)2 FutureListener (com.navercorp.pinpoint.rpc.FutureListener)2