Reputation: 1541
I'm having trouble accessing extended protocol buffer members. Here is the scenario:
Message Foo { optional int i = 1; }
message Bar { extend Foo {
optional int j = 10001; } }
I don't have the Bar message within any of my other protos. How can I get Bar.j in Java? All examples I've found require a Bar within a message.
Thanks!
Upvotes: 7
Views: 7584
Reputation: 1059
Extensions in Protocol Buffer don't work necessarily as you would expect, i.e. they don't match the Java inheritance mechanism.
For your problem, I have created the following foobar.proto
file:
package test;
message Foo {
optional int32 i = 1;
extensions 10 to 99999;
}
message Bar {
extend Foo {
optional int32 j = 10001;
}
}
It creates Foobar.java
, containing the classes Foobar.Bar
and Foobar.Foo
.
And here is a simple JUnit test case accessing Bar.j:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import test.Foobar.Bar;
import test.Foobar.Foo;
public class TestFooBar {
@Test
public void testFooBar() {
Foo foo = Foo.newBuilder().setI(123).setExtension(Bar.j, 456).build();
assertEquals(Integer.valueOf(456), foo.getExtension(Bar.j));
}
}
Hope that helps clarifying your problem!
Upvotes: 8