RxJava抛出错误

时间:2017-08-14 17:55:21

标签: java rx-java

public Single<User> saveUser(UserRequest userRequest) {
    if(userRepository.findByEmail(userRequest.getEmail())!=null)
        return Single.error(new DuplicateName(userRequest.getEmail()));

    return Single.fromCallable(()->Mapper.mapRequestToUser(userRequest))
        .map(user->userRepository.save(user.blockingGet()));
}

我抛出自己的错误-DuplicateName但RxJava将其包装成

ERROR 6740 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName: IDL:omg.org/PortableInterceptor/ORBInitInfo/DuplicateName:1.0] with root cause

org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName: IDL:omg.org/PortableInterceptor/ORBInitInfo/DuplicateName:1.0

为什么会这样?我检查,如果我扔它通常像抛出新的DuplicateName()工作,我的全局拦截器处理它。

2 个答案:

答案 0 :(得分:0)

返回Single.error并不意味着抛出异常 - 它是向下游发送的终端事件,说明出现了问题,这种方法在RxJava中很普遍。

此类&#34;事件&#34;发送后,onError方法会在观察者上调用 - 如果未实施此方法,则会将其OnErrorNotImplementedException包裹起来。提供的日志并没有多说,但我认为在您的情况下onError可以实现只记录异常。这可能是你的拦截器无法处理它的原因。您可以在RxJava here中阅读有关异常处理的更多信息。

答案 1 :(得分:0)

这是我的愚蠢错误。我有相同的错误名称 import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName; 而我错误地导入它并没有注意到..... 对于其他人,请确保您导入的所有内容都来自您自己的包。 Sory人们