List of usage examples for org.apache.thrift.meta_data FieldMetaData getStructMetaDataMap
public static synchronized Hashtable getStructMetaDataMap(Class sClass)
From source file:org.apache.aurora.scheduler.http.api.security.ThriftFieldGetter.java
License:Apache License
ThriftFieldGetter(Class<T> structClass, F fieldId, Class<V> valueClass) { super(structClass, valueClass); FieldValueMetaData fieldValueMetaData = FieldMetaData.getStructMetaDataMap(structClass) .get(fieldId).valueMetaData; checkArgument(fieldValueMetaData instanceof StructMetaData); StructMetaData structMetaData = (StructMetaData) fieldValueMetaData; checkArgument(valueClass.equals(structMetaData.structClass), "Value class %s does not match field metadata for %s (expected %s)", valueClass.getName(), fieldId, structMetaData.structClass); this.fieldId = fieldId; }
From source file:org.apache.avro.thrift.ThriftData.java
License:Apache License
@Override @SuppressWarnings("unchecked") protected Object getRecordState(Object r, Schema s) { TFieldIdEnum[] fields = fieldCache.get(s); if (fields == null) { // cache miss fields = new TFieldIdEnum[s.getFields().size()]; Class c = r.getClass();// w w w . j av a2 s . c o m for (TFieldIdEnum f : FieldMetaData.getStructMetaDataMap((Class<? extends TBase>) c).keySet()) fields[s.getField(f.getFieldName()).pos()] = f; fieldCache.put(s, fields); // update cache } return fields; }
From source file:org.apache.avro.thrift.ThriftData.java
License:Apache License
/** Return a record schema given a thrift generated class. */ @SuppressWarnings("unchecked") public Schema getSchema(Class c) { Schema schema = schemaCache.get(c); if (schema == null) { // cache miss try {/*from ww w .j a va 2s . co m*/ if (TEnum.class.isAssignableFrom(c)) { // enum List<String> symbols = new ArrayList<String>(); for (Enum e : ((Class<? extends Enum>) c).getEnumConstants()) symbols.add(e.name()); schema = Schema.createEnum(c.getName(), null, null, symbols); } else if (TBase.class.isAssignableFrom(c)) { // struct schema = Schema.createRecord(c.getName(), null, null, Throwable.class.isAssignableFrom(c)); List<Field> fields = new ArrayList<Field>(); for (FieldMetaData f : FieldMetaData.getStructMetaDataMap((Class<? extends TBase>) c) .values()) { Schema s = getSchema(f.valueMetaData); if (f.requirementType == TFieldRequirementType.OPTIONAL && (s.getType() != Schema.Type.UNION)) s = nullable(s); fields.add(new Field(f.fieldName, s, null, null)); } schema.setFields(fields); } else { throw new RuntimeException("Not a Thrift-generated class: " + c); } } catch (Exception e) { throw new RuntimeException(e); } schemaCache.put(c, schema); // update cache } return schema; }
From source file:org.commoncrawl.rpc.thriftrpc.ant.RccTask.java
License:Apache License
public static void generateAsyncStub(String fullyQualifiedServiceName, PrintWriter writer) throws ClassNotFoundException { String packageName = fullyQualifiedServiceName.substring(0, fullyQualifiedServiceName.lastIndexOf(".")); String className = fullyQualifiedServiceName.substring(fullyQualifiedServiceName.lastIndexOf(".") + 1); Class zclass = Class.forName(fullyQualifiedServiceName + "$Iface"); writer.println("package " + packageName + ";"); writer.println(""); writer.println("import java.util.List;"); writer.println("import java.util.ArrayList;"); writer.println("import java.util.Map;"); writer.println("import java.util.HashMap;"); writer.println("import java.util.EnumMap;"); writer.println("import java.util.Set;"); writer.println("import java.util.HashSet;"); writer.println("import java.util.EnumSet;"); writer.println("import java.util.Collections;"); writer.println("import java.util.BitSet;"); writer.println("import java.nio.ByteBuffer;"); writer.println("import java.util.Arrays;"); writer.println("import org.slf4j.Logger;"); writer.println("import org.slf4j.LoggerFactory;"); writer.println("import java.io.IOException;"); writer.println(""); writer.println("import org.commoncrawl.rpc.thriftrpc.*;"); writer.println("import org.apache.thrift.TException;"); writer.println("import org.apache.thrift.protocol.TMessage;"); writer.println("import org.apache.thrift.protocol.TProtocol;"); writer.println("import org.apache.thrift.transport.TFramedTransport;"); writer.println("import org.apache.thrift.transport.TIOStreamTransport;"); writer.println("import org.commoncrawl.io.internal.NIOBufferList;"); writer.println("import org.commoncrawl.io.internal.NIOBufferListOutputStream;"); writer.println("import org.commoncrawl.rpc.thriftrpc.*;"); writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftRPCMessageDispatcher;"); writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftIncomingMessageContext;"); writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftOutgoingMessageContext;"); writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftRPCClientChannel;"); writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftRPCServerChannel;"); writer.println("import " + packageName + "." + className + ".*;"); writer.println("class " + className + "_CCAsyncSupport {"); writer.println(""); writer.println(//from w ww . j a va 2 s . c o m " public static class " + className + "_AsyncCallStub extends ThriftRPCChannel.AsyncStub {"); writer.println(" public " + className + "_AsyncCallStub(ThriftRPCChannel channel) {"); writer.println(" super(channel);"); writer.println(" }"); writer.println(""); // get Blocking IFace Class blockingIFaceClass = Class.forName(fullyQualifiedServiceName + "$Iface"); for (Method m : blockingIFaceClass.getMethods()) { String argsName = m.getName() + "_args"; String resultName = m.getName() + "_result"; Class argsClass = Class.forName(fullyQualifiedServiceName + "$" + argsName); Map<? extends TFieldIdEnum, FieldMetaData> metadataMap = FieldMetaData.getStructMetaDataMap(argsClass); writer.print(" public void " + m.getName() + "("); int fieldIndex = 0; for (TFieldIdEnum field : metadataMap.keySet()) { if (fieldIndex++ != 0) writer.print(","); try { writer.print(argsClass.getField(field.getFieldName()).getType().getName() + " " + field.getFieldName()); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } } writer.println(",final ThriftOutgoingMessageContext.ThriftAsyncRequestCallback<" + argsName + "," + resultName + "> resultHandler) throws org.apache.thrift.TException {"); writer.println(" " + argsName + " args = new " + argsName + "();"); for (TFieldIdEnum field : metadataMap.keySet()) { try { writer.println(" args." + field.getFieldName() + " = " + field.getFieldName() + ";"); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } writer.println(" " + resultName + " result = new " + resultName + "();"); writer.println(" ThriftOutgoingMessageContext<" + argsName + "," + resultName + "> asyncCallContext = " + "new ThriftOutgoingMessageContext<" + argsName + "," + resultName + ">(super.getChannel(),resultHandler,\"" + m.getName() + "\",args,result);"); writer.println(" super.getChannel().sendRequest(asyncCallContext);"); writer.println(" }"); } writer.println(" }"); String baseInterfaceName = className + "_AsyncIFace"; writer.println(" public static interface " + baseInterfaceName + "{ "); for (Method method : zclass.getMethods()) { String inputType = method.getName() + "_args"; String outputType = method.getName() + "_result"; writer.println(" public void " + className + "_" + method.getName() + " (final ThriftIncomingMessageContext<" + inputType + "," + outputType + "> context) throws TException;"); } writer.println(" }"); String processClassName = className + "_RequestProcessor"; writer.println(" public static class " + processClassName + " implements ThriftRPCMessageDispatcher { "); writer.println(" " + baseInterfaceName + " _iface;"); writer.println(" " + processClassName + "(" + baseInterfaceName + " iface){"); writer.println(" _iface = iface;"); writer.println(" }"); writer.println(""); writer.println( " public void process(ThriftRPCServerChannel serverChannel,ThriftRPCClientChannel clientChannel,TMessage message,TProtocol iprot)throws TException {"); for (Method method : zclass.getMethods()) { String inputType = method.getName() + "_args"; String outputType = method.getName() + "_result"; writer.println(" if (message.name.equals(\"" + method.getName() + "\")){"); writer.println(" " + inputType + " input = new " + inputType + "();"); writer.println(" " + outputType + " output = new " + outputType + "();"); writer.println(" input.read(iprot);"); writer.println(" iprot.readMessageEnd();"); writer.println(" ThriftIncomingMessageContext<" + inputType + "," + outputType + "> context = new ThriftIncomingMessageContext<" + inputType + "," + outputType + ">" + "(serverChannel,clientChannel,message,iprot,input,output);"); writer.println(" _iface." + className + "_" + method.getName() + "(context);"); writer.println(" return;"); writer.println(" }"); } writer.println( " org.apache.thrift.protocol.TProtocolUtil.skip(iprot, org.apache.thrift.protocol.TType.STRUCT);"); writer.println(" iprot.readMessageEnd();"); writer.println(" NIOBufferList bufferListTemp = new NIOBufferList();"); writer.println( " TProtocol oprot = clientChannel.getOutputProtocolFactory().getProtocol(new TFramedTransport(new TIOStreamTransport(new NIOBufferListOutputStream(bufferListTemp))));"); writer.println( " org.apache.thrift.TApplicationException x = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.UNKNOWN_METHOD, \"Invalid method name: '+message.name+'\");"); writer.println( " oprot.writeMessageBegin(new org.apache.thrift.protocol.TMessage(message.name, org.apache.thrift.protocol.TMessageType.EXCEPTION, message.seqid));"); writer.println(" x.write(oprot);"); writer.println(" oprot.writeMessageEnd();"); writer.println(" oprot.getTransport().flush();"); writer.println(" try {"); writer.println(" clientChannel.responseReady(bufferListTemp);"); writer.println(" } catch (IOException e) {"); writer.println(" throw new TException(e);"); writer.println(" }"); writer.println(" }"); writer.println(""); writer.println(" }"); writer.println(""); writer.println("}"); }