Details
-
Bug
-
Resolution: Won't Do
-
Major
-
None
-
2.7.16
-
None
-
1
Description
When calling bucket.mapRemove(String docId, String key) on a docId that does not exist, customer is expecting DocumentDoesNotExistException to be thrown. Internally it is indeed getting thrown, but prior to it bubbling up to the caller, a ClassCastException occurs as the callstack attempts to cast it to a MultiMutationException.
Sample code:
try { |
Cluster cluster = CouchbaseCluster.create(env, "c10"); cluster.authenticate("admin", "password"); |
Bucket bucket = cluster.openBucket("test"); bucket.insert(JsonDocument.create("map_id", JsonObject.empty())); bucket.mapAdd("map_id", "name", "Mark Nunberg"); |
bucket.mapRemove("fake", "name"); |
}
|
catch(Exception e) { |
e.printStackTrace();
|
}
|
Stack trace:
java.lang.ClassCastException: class com.couchbase.client.java.error.DocumentDoesNotExistException cannot be cast to class com.couchbase.client.java.error.subdoc.MultiMutationException (com.couchbase.client.java.error.DocumentDoesNotExistException and com.couchbase.client.java.error.subdoc.MultiMutationException are in unnamed module of loader java.net.URLClassLoader @33425811) at com.couchbase.client.java.CouchbaseAsyncBucket$15.call(CouchbaseAsyncBucket.java:1407) at com.couchbase.client.java.CouchbaseAsyncBucket$15.call(CouchbaseAsyncBucket.java:1404) at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onError(OperatorOnErrorResumeNextViaFunction.java:140) at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) at rx.observers.Subscribers$5.onError(Subscribers.java:230) at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:73) at rx.observers.Subscribers$5.onNext(Subscribers.java:235) at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onNext(OnSubscribeDoOnEach.java:101) at rx.internal.producers.SingleProducer.request(SingleProducer.java:65) at rx.internal.producers.ProducerArbiter.setProducer(ProducerArbiter.java:126) at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.setProducer(OperatorOnErrorResumeNextViaFunction.java:159) at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102) at rx.Subscriber.setProducer(Subscriber.java:205) at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102) at rx.Subscriber.setProducer(Subscriber.java:205) at rx.Subscriber.setProducer(Subscriber.java:205) at rx.subjects.AsyncSubject.onCompleted(AsyncSubject.java:103) at com.couchbase.client.core.endpoint.AbstractGenericHandler.completeResponse(AbstractGenericHandler.java:508) at com.couchbase.client.core.endpoint.AbstractGenericHandler.access$000(AbstractGenericHandler.java:86) at com.couchbase.client.core.endpoint.AbstractGenericHandler$1.call(AbstractGenericHandler.java:526) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) 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:834) |