package org.apache.athrift; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import org.apache.athrift.compiler.ThriftDescriptor; import org.apache.athrift.compiler.parser.ThriftParser; import org.apache.athrift.service.ThriftServicesParser; import org.apache.athrift.util.Utilities; public class AutoThriftGenerator { public AutoThriftGenerator() { } public ThriftServicesParser generateAutoThrift(String directoryParm, String fileNameParm) { ThriftServicesParser retThriftServicesParser = new ThriftServicesParser(); doGenerate(directoryParm, fileNameParm, retThriftServicesParser); return retThriftServicesParser; } private void doGenerate(String directoryParm, String fileNameParm, ThriftServicesParser retThriftServicesParserParm) { System.out.println("thrift配置文件: "+fileNameParm); try { File tmpDirectory = new File(directoryParm); File tmpThriftFile = Utilities.findFile(tmpDirectory, fileNameParm); ThriftParser parser = new ThriftParser(new FileInputStream( tmpThriftFile)); ThriftDescriptor tmpThriftDescriptor = parser.generateThriftDescriptor(); String tmpThriftName = fileNameParm; int tmpPosi = tmpThriftName.lastIndexOf(".thrift"); if (tmpPosi != -1) { tmpThriftName = tmpThriftName.substring(0, tmpPosi).trim(); } tmpThriftDescriptor.setThriftName(tmpThriftName); ArrayList<String> tmpIncludeFileList = tmpThriftDescriptor.getIncludeList(); for (int i = 0; i < tmpIncludeFileList.size(); i++) { String tmpIncludeFileName = tmpIncludeFileList.get(i).replaceAll("\"", ""); doGenerate(directoryParm, tmpIncludeFileName, retThriftServicesParserParm); } retThriftServicesParserParm.generateServices(tmpThriftDescriptor); } catch(Exception ex) { ex.printStackTrace(); } } }