Hi there, I hope that you are doing well!

I'm encountering some NullPointerException when trying to deserialize my 
protobuf message using the parseFrom method from my generated class (you 
can have a look at the stack below). Code has been generated using protoc 
3.7.0, and we are currently using protobuf 3.8.0 libraries at runtime.

at 
com.ds.bus.message.BusMessageProtos$Item.<init>(BusMessageProtos.java:4429)
at 
com.ds.bus.message.BusMessageProtos$Item$1.parsePartialFrom(BusMessageProtos.java:5317)
at 
com.ds.bus.message.BusMessageProtos$Item$1.parsePartialFrom(BusMessageProtos.java:5311)
at 
com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:886)
at 
com.ds.bus.message.BusMessageProtos$Order.<init>(BusMessageProtos.java:3221)
at 
com.ds.bus.message.BusMessageProtos$Order$1.parsePartialFrom(BusMessageProtos.java:4311)
at 
com.ds.bus.message.BusMessageProtos$Order$1.parsePartialFrom(BusMessageProtos.java:4305)
at 
com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:886)
at 
com.ds.bus.message.BusMessageProtos$Message.<init>(BusMessageProtos.java:982)
at 
com.ds.bus.message.BusMessageProtos$Message$1.parsePartialFrom(BusMessageProtos.java:2127)
at 
com.ds.bus.message.BusMessageProtos$Message$1.parsePartialFrom(BusMessageProtos.java:2121)
at 
com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:100)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:120)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:125)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
at 
com.ds.bus.message.BusMessageProtos$Message.parseFrom(BusMessageProtos.java:1334)
at 
com.ds.bus.message.data.ChunkStore.getAndRemoveAllCompleted(ChunkStore.java:93)


NullPointerException are not happening all the time. Usually, it works at 
the beginning and at some point everything fall apart and all 
deserialization are ending in a NullPointerException. This issue is only 
happening in production after some time, I tried to replicate the problem 
locally and failed to do so.

Could it be an issue fixed in a more recent releases or already seen by 
someone ?
Any input would be appreciated :)

Thanks in advance for your help!

================== Full proto file

// [START declaration]
syntax = "proto3";

import "google/protobuf/timestamp.proto";
package com.ds.bus.message;
// [END declaration]

// [START options options_declaration]
option java_package = "com.ds.bus.message";
option java_outer_classname = "BusMessageProtos";
option optimize_for = SPEED;
// [END options_declaration]

// [START messages]

message Chunk {
    string identifier = 1;
    uint32 chunk_id = 2;
    uint32 nb_chunks = 3;
    bytes  serialized_message = 4;
}

message Message {
    string identifier = 1;
    oneof order {
        Order simple_order = 2;
        Transaction transaction_order = 3;
        Notification notification = 4;
    }
}

message Transaction {
    string identifier = 1;
    repeated Order orders = 4;
}

message Order {
    string identifier = 1;
    Order.Operation operation = 2;
    enum Operation {
        PUT = 0;
        DELETE = 1;
    }
    map<string, Value> parameters = 3;
    Item item = 4;
}

message Item {
    string identifier = 1;
    string type = 2;
    map<string, Value> attributes = 3;
}

// Supported values for attributes
message Value {
     oneof value {
         double double   = 1;
         float  float    = 2;
         uint32 integer  = 3;
         uint64 long     = 4;
         bool   boolean  = 5;
         string string   = 6;
         bytes  bytes    = 7;
         ValueList list  = 8;
         ValueMap map    = 9;
     }
}

message ValueList {
    repeated Value values = 1;
}

message ValueMap {
    map<string, Value> values = 1;
}

message Notification {
    string message = 1;
    string type = 2;
    Kind kind = 3;
    google.protobuf.Timestamp timestamp = 4;
    Context context = 5;
    Task task = 6;
    repeated Source sources = 7;
    Target target = 8;
}

enum Kind {
    SUCCESS = 0;
    WARNING = 1;
    ERROR = 2;
}

message Task {
    string activity = 1;
    string processor = 2;
}

message Context {
    string tenant = 1;
    string user = 2;
}

message Source {
    string type = 1;
    map<string, string> attributes = 2;
}

message Target {
    string type = 1;
    map<string, string> attributes = 2;
}
// [END messages]

========= Prod environment details

Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.21.0, JRE 11 Linux amd64-64-Bit 
Compressed References 20200715_697 (JIT enabled, AOT enabled) 

OpenJ9   - 34cf4c075
OMR      - 113e54219
JCL      - 95bb504fbb based on jdk-11.0.8+10)

Protobuf 3.8.0

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/e1f3c3cc-6a86-46a9-81d3-b7d002065aeen%40googlegroups.com.

Reply via email to