Skip to content

optional nullable is not working #9868

@yingshaoxo

Description

@yingshaoxo

Generator version: 1.52.1

https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.52.1/protoc-gen-grpc-java-1.52.1-osx-x86_64.exe

Generate command:

cd .gradle
wget https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.52.1/protoc-gen-grpc-java-1.52.1-osx-x86_64.exe
chmod 777 protoc-gen-grpc-java-1.52.1-osx-x86_64.exe
cd ..

mkdir -p app/src/main/java/generated_grpc

protoc --experimental_allow_proto3_optional --plugin=protoc-gen-grpc-java=.gradle/protoc-gen-grpc-java-1.52.1-osx-x86_64.exe \
--java_out=app/src/main/java --grpc-java_out=app/src/main/java \
--proto_path=../party_protocols/protocols free_map_service.proto

Protocols

syntax = "proto3";
package free_map_service;

option go_package = "./free_map_service";

option java_package = "generated_grpc.free_map_service_grpc";
option java_outer_classname = "free_map_service_grpc_types";

service FreeMapService {
    rpc DeletePlace(DeleteRequest) returns (DeleteResponse);
}

message DeleteRequest {
    int32 location_id = 1;
}

message DeleteResponse {
    optional string error = 1;
    bool success = 2;
}

Kotlin code

    override fun deletePlace(
        request: DeleteRequest?,
        responseObserver: StreamObserver<DeleteResponse?>?
    ) {
        responseObserver?.onNext(DeleteResponse.newBuilder()
            .setError(null).setSuccess(true)
            .build())
        responseObserver?.onCompleted()
    }

image

Error

As I tested out, if I use setError(""), there would have no error.

But if I use setError(null), error happens.

I also tested --experimental_allow_proto3_optional, not working.

Feb 02, 2023 11:11:50 AM io.grpc.internal.SerializingExecutor run
SEVERE: Exception while executing runnable io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed@587ff7a5
java.lang.NullPointerException
	at generated_grpc.free_map_service_grpc.free_map_service_grpc_types$DeleteResponse$Builder.setError(free_map_service_grpc_types.java:5740)
	at kotlin_free_map_backend_system.FreeMapService.deletePlace(FreeMapService.kt:32)
	at generated_grpc.free_map_service_grpc.FreeMapServiceGrpc$MethodHandlers.invoke(FreeMapServiceGrpc.java:351)
	at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
	at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:340)
	at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866)
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)

image

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions