Hi Kenton,

here are the stacktrace, i found i'm using 2.1.0

java.lang.NullPointerException

        at
com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:422)

        at
com.google.protobuf.GeneratedMessage$Builder.parseUnknownField(GeneratedMessage.java:289)

        at
com.trendmicro.mist.proto.MistMessage$MessageBlock$Builder.mergeFrom(MistMessage.java:621)

        at
com.trendmicro.mist.proto.MistMessage$MessageBlock$Builder.mergeFrom(MistMessage.java:602)

        at
com.trendmicro.mist.proto.MistMessage$MessageBlock$Builder.mergeFrom(MistMessage.java:504)

        at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:358)

        at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:351)

        at com.trendmicro.mist.Session.runProducer(Session.java:288)

        at com.trendmicro.mist.Session.run(Session.java:805)

        at java.lang.Thread.run(Thread.java:619)


After I switch to 2.3.0, the exception become much more reasonable:
Exception in thread "main"
com.google.protobuf.InvalidProtocolBufferException: Protocol message
contained an invalid tag (zero).
    at
com.google.protobuf.InvalidProtocolBufferException.invalidTag(InvalidProtocolBufferException.java:68)
    at
com.google.protobuf.CodedInputStream.readTag(CodedInputStream.java:90)
    at test.Test$Person$Builder.mergeFrom(Test.java:279)
    at test.Test$Person$Builder.mergeFrom(Test.java:1)
    at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:244)
    at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:183)
    at
com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:162)
    at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:661)
    at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:183)
    at
com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:153)
    at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:654)
    at test.Test$Person.parseFrom(Test.java:119)
    at test.Test_pb_NPE.main(Test_pb_NPE.java:21)

thanks

On Wed, Dec 8, 2010 at 11:34 AM, Kenton Varda <ken...@google.com> wrote:

> The file you attached is not useful without source code.
>
> But what would be even better is if you could provide the stack trace for
> the NullPointerException.  The parser should never throw NPE and I'm not
> aware of any bugs which cause it to throw NPE.
>
> BTW, it's very easy for bytes which are not actually a protocol buffer to
> parse correctly as a protocol buffer.  The protobuf encoding is pretty
> dense.  So I would suggest that you instead use some sort of tagging
> mechanism to distinguish protobuf data from other kinds of data that you
> need to process.
>
> On Mon, Dec 6, 2010 at 2:41 AM, jim horng <jimho...@gmail.com> wrote:
>
>> Hi all,
>>
>> It occur to me that when I'm trying to parse any of the binary data
>> files I listed below,
>> using  <Message>.parseFrom(byte []). it said nullpointer exception.
>>
>> To my best knowledge, I think when the raw bytes does not contain
>> required field, protobuf API should return invalidprotobufexception
>> when using .parseFrom(), or at least it will throw
>> uninitializeprotobuf exception when .build().
>> so that client will know what happen and have change to handle them
>> correctly.
>> But if it return nullpointerexception, it will be hard to know what
>> really happen, it can only be roughly assumed message parsing is
>> failed.
>> My goal is just to determine if the received binary files is an
>> expected protobuf message or not.
>>
>> Please kindly advise or if this is work as design under some reason.
>> Thanks a lot !
>>
>>
>>
>> <code snippet>
>>       String filepath = "np1.pb";
>>       byte[] file_byteary = getBytesFromFile(new File(filepath));
>>
>>       xxx.Connection.Builder conn_builder =
>> xxx.Connection.newBuilder();
>>       xxx.Connection MB_tmp =
>> xxx.Connection.parseFrom(file_byteary);
>>       conn_builder.mergeFrom(MB_tmp);
>>       System.out.println("is init?" + conn_builder.isInitialized());
>>       assertTrue(conn_builder.build() != null);
>> </code snippet>
>>
>> * test data
>>
>> https://docs.google.com/leaf?id=0B9CkCymjWlZLNWMyMGNiNjEtMDJiZi00NDY0LTgzMWUtMjI1N2I0MWVhNjlh&hl=en
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Protocol Buffers" group.
>> To post to this group, send email to proto...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/protobuf?hl=en.
>>
>>
>


-- 
Best Regards,
Jim(洪懷謙)

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@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