Marco@worldcorp
unread,Feb 6, 2011, 3:50:46 PM2/6/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Protocol Buffers
Hi all
i am trying to use extensions with protobuf and Netty
here's my proto file
package tutorial;
option java_package = "com.example.messages";
option java_outer_classname = "MessageProtos";
option optimize_for = LITE_RUNTIME;
enum MessageType {
TEST = 0;
DEBUG = 1;
DO_TASK = 2;
SPECIAL = 3;
}
message Message {
required string content = 1;
required MessageType type = 2;
extensions 3 to 99;
}
extend Message {
optional string enhancedContent = 3;
optional Share share = 4;
optional int32 bar = 5;
}
message Share {
required string ticker = 10;
required string company = 11;
required double price = 12;
}
I am setting extensions this way in my client
if(line.startsWith("task")) {
builder.setType(MessageProtos.MessageType.DO_TASK);
builder.setExtension(MessageProtos.bar, 1);
} else {
builder.setType(MessageProtos.MessageType.DEBUG);
}
I have written an unit test which works fine
@Test
public void testExtensions() throws Exception {
MessageProtos.Message.Builder builder =
MessageProtos.Message.newBuilder();
builder.setExtension(MessageProtos.bar, 1);
builder.setContent("foobar");
builder.setType(MessageProtos.MessageType.DEBUG);
MessageProtos.Message message = builder.build();
Assert.assertTrue(message.hasExtension(MessageProtos.bar));
}
However, on the serverside i am getting this exception
2011-02-06 20:44:58,130 [handlers.EchoServerHandler ]
ERROR * Unexpected exception from downstream. [New I/O server worker
#1-1]
java.lang.NullPointerException
at com.google.protobuf.GeneratedMessageLite
$ExtendableBuilder.parseUnknownField(GeneratedMessageLite.java:311)
at com.example.messages.MessageProtos$Message
$Builder.mergeFrom(MessageProtos.java:273)
at com.example.messages.MessageProtos$Message
$Builder.mergeFrom(MessageProtos.java:187)
at com.google.protobuf.AbstractMessageLite
$Builder.mergeFrom(AbstractMessageLite.java:107)
at com.google.protobuf.AbstractMessageLite
$Builder.mergeFrom(AbstractMessageLite.java:161)
at com.google.protobuf.AbstractMessageLite
$Builder.mergeFrom(AbstractMessageLite.java:93)
at
org.jboss.netty.handler.codec.protobuf.ProtobufDecoder.decode(ProtobufDecoder.java:
103)
at
org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:
72)
at
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:
302)
at
org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:
317)
at
org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:
299)
at
org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:
216)
at
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:
274)
at
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:
261)
at
org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:350)
at
org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:
281)
at
org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201)
at
org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:
46)
at java.util.concurrent.ThreadPoolExecutor
$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Do i need to somehow declare extensions whenever i register my
ProtocolDecoder / ProtocolEncoder?
If i don't set any extensions, the client-server communication works
fine
could anyone help?
w/kindest regards
marco