Fixed: issue #5094 - java.lang.ClassCastException:MonoNext cannot be cast to class Flux

Signed-off-by: wynn5a <winminy@163.com>
pull/5100/head
wynn5a 2 years ago
parent 6e56ee3788
commit ae9dddd574

@ -21,6 +21,8 @@ import java.util.concurrent.Callable;
import org.redisson.api.RFuture;
import org.redisson.misc.ProxyBuilder;
import org.redisson.misc.ProxyBuilder.Callback;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
*
@ -37,7 +39,12 @@ public class ReactiveProxyBuilder {
return ProxyBuilder.create(new Callback() {
@Override
public Object execute(Callable<RFuture<Object>> callable, Method instanceMethod) {
return commandExecutor.reactive(callable);
Mono<Object> result = commandExecutor.reactive(callable);
if(instanceMethod.getReturnType().isAssignableFrom(Flux.class)){
Mono<Iterable> monoListResult = result.cast(Iterable.class);
return monoListResult.flatMapMany(Flux::fromIterable);
}
return result;
}
}, instance, implementation, clazz, commandExecutor.getServiceManager());
}

@ -124,4 +124,21 @@ public class RedissonDequeReactiveTest extends BaseReactiveTest {
assertThat(toIterator(queue.descendingIterator())).toIterable().containsExactly(3, 2, 1);
}
@Test
public void testPollLast() {
final RDequeReactive<Integer> queue = redisson.getDeque("deque");
sync(queue.addAll(Arrays.asList(1, 2, 3)));
assertThat(toIterator(queue.pollLast(2))).toIterable().containsExactly(3, 2);
}
@Test
public void testPollFirst() {
final RDequeReactive<Integer> queue = redisson.getDeque("deque");
sync(queue.addAll(Arrays.asList(1, 2, 3)));
assertThat(toIterator(queue.pollFirst(2))).toIterable().containsExactly(1, 2);
}
}

Loading…
Cancel
Save