2017-08-30 1 views
0

背景:私はprotocプラグインを作成しています。Javaでprotobufカスタムオプションの価値を得るには?

カスタムいるProtobufオプションは以下で実装されています

syntax = "proto3"; 

package com.example.proto.options; 

import "google/protobuf/descriptor.proto"; 

option java_multiple_files = true; 
option java_outer_classname = "ServerOptionsProto"; 
option java_package = "com.example.proto.options"; 

extend google.protobuf.FileOptions { 
    ServerOptions server = 50621; 
} 

message ServerOptions { 
    // Java classname 
    string name = 1; 
} 

次の使用例である:

syntax = "proto3"; 

package com.example.testdata; 

import "com/example/proto/options/server.proto"; 

option java_multiple_files = true; 
option java_package = "com.example.testdata.protogen"; 
option java_outer_classname = "TestDataProto"; 

option (com.example.proto.options.server).name = "TestData"; 

https://developers.google.com/protocol-buffers/docs/proto#optionsに従うことをしようと、(Groovyで)以下は動作しません。 :

request.getProtoFileList().stream().filter { proto -> 
    proto.serviceCount > 0 
}.flatMap { proto -> 
    serverName = proto.getDescriptor().getOptions()?.getExtension(com.example.proto.options.ServerOptionsProto.server)?.name 
} 

値にアクセスするためのJavaの正しい方法カスタムオプションの?

答えて

0

java_packagejava_outer_classnameオプションを使用する必要があります

また
serverName = proto.getOptions()?.getExtension(com.example.proto.options.ServerOptionsProto.server)?.name 

、これはprotocプラグインによって処理されるため、拡張子がExtensionsごとに登録する必要があります

final registry = ExtensionRegistry.newInstance(); 
registry.add(ServerOptionsProto.server) 
final request = PluginProtos.CodeGeneratorRequest.parseFrom(input, registry) 
-1

私はあなたのオプションはファイルレベルのものだと考えていますが、メッセージレベルのオプションのようにアクセスしようとしています。 proto.getDescriptor().getOptions()の代わりに、proto.getDescriptor().getFile().getOptions()を試してください。

関連する問題