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