0

Tried to marshall a Parcel that contained Binder objects.

When passing a ParcelFileDescriptor object with Metadata headers, the following error occurred:

  41333: 06-04 14:31:22.203 29205 29349 E SerializingExecutor: java.lang.IllegalStateException: java.lang.RuntimeException: Tried to marshall a Parcel that contained Binder objects.
  41334: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall.runInternal(ServerImpl.java:617)
  41335: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall.runInContext(ServerImpl.java:603)
  41336: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
  41337: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
  41338: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
  41339: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
  41340: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at java.lang.Thread.run(Thread.java:920)
  41341: 06-04 14:31:22.203 29205 29349 E SerializingExecutor: Caused by: java.lang.RuntimeException: Tried to marshall a Parcel that contained Binder objects.
  41342: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at android.os.Parcel.nativeMarshall(Native Method)
  41343: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at android.os.Parcel.marshall(Parcel.java:621)
  41344: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.binder.internal.ParcelableInputStream.getDelegateStream(ParcelableInputStream.java:102)
  41345: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.binder.internal.ParcelableInputStream.read(ParcelableInputStream.java:116)
  41346: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at com.google.common.io.ByteStreams.toByteArrayInternal(ByteStreams.java:191)
  41347: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at com.google.common.io.ByteStreams.toByteArray(ByteStreams.java:238)
  41348: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.Metadata.streamToBytes(Metadata.java:1046)
  41349: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.Metadata.access$1300(Metadata.java:58)
  41350: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.Metadata$LazyValue.toBytes(Metadata.java:942)
  41351: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.Metadata.valueAsBytes(Metadata.java:183)
  41352: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.Metadata.toString(Metadata.java:554)
  41353: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at java.lang.String.valueOf(String.java:2924)
  41354: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at java.lang.StringBuilder.append(StringBuilder.java:132)
  41355: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at dragon.grpc.server.HeaderServerInterceptor.interceptCall(HeaderServerInterceptor.java:22)
  41356: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.ServerInterceptors$InterceptCallHandler.startCall(ServerInterceptors.java:269)
  41357: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.binder.internal.BinderTransportSecurity$ServerAuthInterceptor.interceptCall(BinderTransportSecurity.java:88)
  41358: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.ServerInterceptors$InterceptCallHandler.startCall(ServerInterceptors.java:269)
  41359: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.ServerImpl$ServerTransportListenerImpl.startWrappedCall(ServerImpl.java:701)
  41360: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.ServerImpl$ServerTransportListenerImpl.access$2200(ServerImpl.java:408)
  41361: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  at io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall.runInternal(ServerImpl.java:613)
  41362: 06-04 14:31:22.203 29205 29349 E SerializingExecutor:  ... 6 more

This is because grpc-binder will use Parcel.marshall to serialize Metadata headers into a byte array. But ParcelFileDescriptor cannot be serialized into a byte array, it can only be passed through Parcel.writeParcelable , and then send the Parcel object to the peer.

Is there any way to solve this problem or any other solution?

Can grpc-binder only pass non-binder Parcelable objects?

Seven Sir
  • 3
  • 2

0 Answers0