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












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

Reply via email to