I have three protobuf 

Base.proto

syntax = "proto2";

option java_package = "pi.ciaig.proto.rpc";

message ServiceRequest {
    required string service = 1;

    extensions 100 to 199;
}


Request.proto

syntax = "proto2";

option java_package = "pi.ciaig.proto.rpc";

import "Base.proto";
import "StrategyRequest.proto";

extend ServiceRequest {
    optional StrategyRequest request = 100;
}


StrategyRequest.proto

syntax = "proto2";

option java_package = "pi.ciaig.proto.rpc";
option java_outer_classname = "StrategyRequestProto";

message StrategyRequest {
    required string requestId = 1;
}


And I write a test Java as below:

import pi.ciaig.proto.rpc.Base;
import pi.ciaig.proto.rpc.Request;
import pi.ciaig.proto.rpc.StrategyRequestProto;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author craig
 */
public class Main {

    public static void main(String[] args) throws IOException {
        StrategyRequestProto.StrategyRequest strategyRequest = 
StrategyRequestProto.StrategyRequest.newBuilder().setRequestId("123").build();

        Base.ServiceRequest serviceRequest = 
Base.ServiceRequest.newBuilder().setService("strategy.makeDecision")
                .setExtension(Request.request, strategyRequest).build();

        serviceRequest.writeTo(new FileOutputStream(new 
File("/data2/tmp/test.txt")));

        Base.ServiceRequest serviceRequest1 = Base.ServiceRequest.parseFrom(new 
FileInputStream(new File("/data2/tmp/test.txt")));
        System.out.println("service:" + serviceRequest1.getService());
        StrategyRequestProto.StrategyRequest strategyRequest1 = 
serviceRequest1.getExtension(Request.request);
        System.out.println("requestId:" + strategyRequest1.getRequestId());   
//(1)

        StrategyRequestProto.StrategyRequest strategyRequest2 = 
StrategyRequestProto.StrategyRequest.parseFrom(new FileInputStream(new 
File("/data2/tmp/test.txt")));
        System.out.println("requestId2:"+strategyRequest2.getRequestId());  
//(2)
    }
}

The console output is below:
service:strategy.makeDecision
requestId:
requestId2:strategy.makeDecision


I think I can read the requestId at the palce (1), but I get a empty 
string. And the place (2) 's output is weird too, why it can read out the 
requestId?

And how to read a extension Object?



-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to