1

Google プロトコル バッファを使用するクライアント サーバー アプリケーションを開発しています。残念ながら、サーバー側でビルダー パターンを使用してプロトコル バッファー応答を構築しているときに、IndexOutOfBoundsException が発生します。

これは、protobuf ファイルを作成する行です。

Builder getVGResonseBuilder = App_getVGResponse.GetVGResponse.newBuilder().getVGBuilder(0);
[some more code that uses the builder patterns]
getVGResponseBuilder.set...
getVGResponseBuilder.set...

エラーはコードの最初の行で発生します。

ここにprotobufの定義があります(ofc私はそれをコンパイルしました!コンパイルされたcalssはApp_getVGResponseです):

message GetVGResponse {

    message VG {
        optional string id = 1;
        optional string g_id = 2;
        optional int64 f_id = 3;
        optional string g_name = 4;
    }

    repeated VG v_gp = 1;
}

ここに私のスタックトレースの抜粋があります

Exception in thread "main" com.google.protobuf.InvalidProtocolBufferException: **Protocol message tag had invalid wire type.**
    at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:78)
    at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
    at com.google.protobuf.GeneratedMessage$Builder.parseUnknownField(GeneratedMessage.java:439)

実行時のデバッガーは ma 変数を表示します。

e
-> cause: IndexOutOfBoundsException (id=12291)
-> detaiMessage: Index: 0, Size: 0 (id=12324)
-> stackTrace null
4

1 に答える 1

1

個人的には「子ビルダー」を作成し、それを親ビルダーに追加します。すなわち

    App_GetVGResponse.GetVGResponse.Builder bldr = App_GetVGResponse.GetVGResponse.newBuilder();
    App_GetVGResponse.GetVGResponse.VG.Builder childBldr = App_GetVGResponse.GetVGResponse.VG.newBuilder();

    childBldr.setId(value);
            ...........

    bldr.addVGp(childBldr);

エラーは、追加する前に「子」ビルダーを取得したためだと思います

于 2012-10-19T02:59:22.733 に答える