我是Thrift的新手,非常感谢编写Thrift生成器文件的一些帮助。我想使用具有多种语言的许多客户端的Java服务器。我使用Thrift自动生成这些文件。
这是我的Thrift文件:
namespace php example
namespace py example
namespace csharp example
namespace cpp example
namespace perl example
namespace d example
namespace java javaobjectmethods
struct ExternalLibraryItem {
1: required string name
}
service ExampleService {
list<ExternalLibraryItem> javaObjectMethod(1:i32 count)
}
我有一组独立的Java文件在javaObject包中,而javaObjectMethod是包中的方法之一。但是,此方法返回由外部库实例化的对象。如何在没有:
的Thrift文件中写这个struct ExternalLibraryItem {
1: required string name
}
它目前不会让我生成没有这一行的服务器文件。
这是我的Java文件:
package javaobjectmethods;
import externalLibrary.ExternalLibaryItem;
import externalLibrary.ExternalLibraryClass;
public class javaObject {
private String file;
public javaObject(String file) {
this.file = file;
}
public List<ExternalLibraryItem> javaObjectMethod(int count) {
// this method returns List<ExternalLibraryItem>
return ExternalLibraryClass.doThis(count, this.file);
}
}
答案 0 :(得分:0)
简短回答:你不能
所有Thrift structs
都应该是生成代码。对于某些语言,创建了部分类(例如C#)可以在这种情况下帮助,但不是对所有语言都有帮助。此外,在某些情况下(C ++),可以在某种程度上定制基类。对于Java,
struct Foo {
1: i32 bar
}
导致以
开头的课程public class foo implements org.apache.thrift.TBase<foo, foo._Fields>,
java.io.Serializable,
Cloneable,
Comparable<foo>
这是周围的代码和结构所需要和期望的。
针对您的特定情况的一种可能解决方案是将内部类转换为Thrift类,反之亦然。
当然,如果您对如何更好地做到这一点有一个很好的想法 - 我们愿意接受高质量的补丁。