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 [email protected].
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