2015-02-13 14 views
5

Sto cercando un linguaggio di query come xpath per i messaggi protobuf. Ad esempio, per il messaggio di persona illustrato di seguito [preso in prestito dalla guida Developer]xpath come query per i messaggi di protobuf

message Person { 
    required string name = 1; 
    required int32 id = 2; 
    optional string email = 3; 

    enum PhoneType { 
    MOBILE = 0; 
    HOME = 1; 
    WORK = 2; 
    } 

    message PhoneNumber { 
    required string number = 1; 
    optional PhoneType type = 2 [default = HOME]; 
    } 

    repeated PhoneNumber phone = 4; 
} 

Vorrei avere metodi come

XPBQuery.get(person, "$.id") ==> returns the id 
XPBQuery.get(person, "$.name") ==> returns the name 
XPBQuery.get(person, "$.phone.number[0]") ==> returns the first phone number 

Un modo è quello di convertire il proto a JSON e utilizzare un JsonPath/API JsPath. Ma potrebbe essere costoso convertirlo in JSON ogni volta, soprattutto per i grandi oggetti Proto.

Qualsiasi aiuto è molto apprezzato.

Grazie, Irfan

+0

Non so se questo esiste già, ma se non lo si può implementare in termini di interfacce di descrittore e riflessione di Protobuf (da non confondere con la riflessione di Java - la riflessione di Protobuf è fornita dalla libreria Protobuf). Vedi 'com.google.protobuf.Message' in Java o' google :: protobuf :: Reflection' in C++. –

+0

@ Irfan - Volevi verificare se hai trovato un modo per raggiungere questo obiettivo? Voglio eliminare JSON.NET (che supporta JSONPath) e utilizzare ProtoBuf, ma la mancanza di funzionalità di interrogazione mi impedisce. – Lalman

+0

Se si converte il messaggio in java bean, è possibile utilizzare [JXPath] (https://commons.apache.org/proper/commons-jxpath/users-guide.html) –

risposta

0

Mentre alla ricerca di una soluzione ad un problema simile ho scoperto:

(non ho usato quelle librerie come la mia lingua di destinazione è C++, ma spero che questo potrebbe aiutare qualcun altro)

Buona fortuna!

Problemi correlati