Der Thrift-Java-Client kann die Verbindung nicht ordnungsgemäß verarbeiten

9

Beispiel für ein einfaches Sparsamkeits-Beispiel. Env: neueste Sparsamkeit, cpp als Server, Java als Client mytest.thrift :

%Vor%

C++ server code:

%Vor%

java client code :

%Vor%

Irgendwie kann der Java-Client die Zeichenfolge nicht richtig ausdrucken. (Ich habe auch einen Python-Client geschrieben, aber das scheint Arbeit)

Vollständiger Code auf gist hier: Spar-Datei, C ++ und Java-Code

    
Wilbeibi 16.02.2016, 22:57
quelle

1 Antwort

3

Tatsächlich beobachten Sie THRIFT-1833 Fehler, die dazu führen, dass der Compiler ungültigen C ++ Code für Union-Typen erzeugt .

In Ihrem Fall schreibt der Server beide Felder des Union-Typs, während der Client immer nur den ersten liest - i16_v (die verbleibenden Bytes befinden sich immer noch im Puffer). So endet der zweite Lesevorgang nie, weil er einige unerwartete Daten im Puffer findet.

Sie können struct anstelle von union verwenden und die Einzelfeldlogik manuell verwalten. Oder Sie können entweder beitragen / warten, bis der Fehler behoben ist.

Die letzte Option ist das Anwenden eines Patches auf falsch generierten C ++ Quellcode wie folgt:

%Vor%     
vsminkov 26.02.2016, 17:37
quelle

Tags und Links