Error with Netty and extensions

127 views
Skip to first unread message

Marco@worldcorp

unread,
Feb 6, 2011, 3:50:46 PM2/6/11
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












Jason Hsueh

unread,
Feb 7, 2011, 5:55:45 PM2/7/11
to Marco@worldcorp, Protocol Buffers


On Sun, Feb 6, 2011 at 12:50 PM, Marco@worldcorp <mmis...@gmail.com> wrote:
<snip> 
Do i need to somehow declare extensions whenever i register my
ProtocolDecoder / ProtocolEncoder?

I don't know what ProtocolDecoder/ProtocolEncoder are, but yes, you need to provide an ExtensionRegistry to the parsing method. See http://code.google.com/apis/protocolbuffers/docs/reference/java/com/google/protobuf/MessageLite.Builder.html#mergeFrom(com.google.protobuf.CodedInputStream, com.google.protobuf.ExtensionRegistryLite)
 

If i don't set any extensions, the client-server communication works
fine

could anyone help?

w/kindest regards
 marco












--
You received this message because you are subscribed to the Google Groups "Protocol Buffers" group.
To post to this group, send email to prot...@googlegroups.com.
To unsubscribe from this group, send email to protobuf+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.


Reply all
Reply to author
Forward
0 new messages