2017-08-14 4 views
0
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())); 
} 

Ich werfe meine eigenen Fehler-DuplicateName aber RxJava wickeln Sie es inRxJava werfen Fehler

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 

Warum kam es dazu? Ich überprüfe und wenn ich es normalerweise wie werfen werfen, arbeitet neue DuplicateName() und mein globaler Abfangjäger handhabt es.

+0

Die Frage ist nicht klar genug –

+0

Bitte klären, wie die Benutzeranforderung an diese Methode gesendet wird und ob wir gleichzeitige Methodenaufrufe verwenden. –

Antwort

0

Die Rückkehr Single.error bedeutet nicht, eine Ausnahme auszulösen - es ist eher ein terminales Ereignis, das nachgeschickt wird und sagt, dass etwas schiefgelaufen ist und dieser Ansatz bei RxJava weit verbreitet ist.

Nachdem ein solches "Ereignis" gesendet wurde, wird die Methode onError für einen Beobachter aufgerufen. Wenn diese Methode nicht implementiert ist, wird sie mit OnErrorNotImplementedException umschlossen. Bereitgestelltes Protokoll sagt nicht viel, aber ich denke, dass in Ihrem Fall onError implementiert werden kann, um nur die Ausnahme zu protokollieren. Das ist wahrscheinlich der Grund, warum dein Abfangjäger nicht damit klar kommt. Sie können mehr über die Ausnahmebehandlung in RxJava here lesen.

0

Es war mein blöder Fehler. Ich habe den gleichen Fehler Namen was import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName; und versehentlich importiere ich es und habe nicht bemerkt ..... Für andere bitte sicher, dass alles, was Sie importiert, ist aus Ihren eigenen Paketen. Sory Leute