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
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++. –
@ 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
Se si converte il messaggio in java bean, è possibile utilizzare [JXPath] (https://commons.apache.org/proper/commons-jxpath/users-guide.html) –