grpc-binder:尝试编组包含 Binder 对象的 Parcel

grpc-binder: Tried to marshall a Parcel that contained Binder objects

提问人:Seven Sir 提问时间:6/4/2023 更新时间:6/4/2023 访问量:83

问:

试图整理一个包含 Binder 对象的包裹。

传递对象时,发生以下错误:ParcelFileDescriptorMetadata headers

  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

这是因为将用于序列化为字节数组。但不能序列化成字节数组,只能通过,然后将对象发送给对等体。grpc-binderParcel.marshallMetadata headersParcelFileDescriptorParcel.writeParcelableParcel

有什么方法可以解决这个问题或任何其他解决方案吗?

grpc-binder 可以只传递非 binder 对象吗?Parcelable

Android 可分包 grpc-java

评论


答: 暂无答案