2014-03-26 40 views
1

我是Thrift的新手,非常感謝編寫Thrift生成器文件的一些幫助。我想用各種語言的許多客戶端使用Java服務器。我正在使用Thrift自動生成這些文件。Thrift:在列表定義中使用外部java類

這是我的節儉文件:

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

簡短的回答:不能。

所有節儉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類,反之亦然。

當然,如果你有一個很酷的想法如何更好地做到這一點 - 我們是開放的質量補丁。

+0

很酷謝謝。我想我可以解決這個問題,只是想檢查是否有可能實施解決方法。 –

相關問題