преобразовать Mono <Order>в объект Order - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь изучить реактивное программирование, используя слюни. Я делаю PO C, чтобы применить правила слюни к объекту.

public Mono<Order> findByOrderNo(String orderNo) {
          Mono<Order> order = orderDAO.findByOrderNo ( orderNo );
          KieSession kieSession = kieContainer.newKieSession("rulesSessionpart2");
          kieSession.insert(order); // rules are not getting applied as it requires the object type 
                                       //as input
          kieSession.fireAllRules();
          kieSession.dispose();
          return order;
     }

Это мое тестовое правило:

import com.reactive.practice.springreactor.model.Order 

rule "ReturnEligible for Order" 
when 
  orderObject: Order(itemReturnEligible==true) 
then 
  orderObject.setDescription("bdfgdfdfhdf"); 
end

Здесь метод kieSession.insert (order) требует объект в качестве входных данных, но в приведенном выше коде я передаю тип издателя Mono.

Я попытался преобразовать Mono в объект Order с помощью block (). Как указано во многих документах, его не рекомендуется использовать, поскольку он блокирует операцию.

Есть ли другой способ преобразовать Mono в объект Order.

Любой помощь заметна. Спасибо

1 Ответ

0 голосов
/ 18 июня 2020

Два ответа

1) Используйте специальную библиотеку тестирования, например, response-test

https://projectreactor.io/docs/core/release/reference/#testing

  StepVerifier.create( 
    appendBoomError(source)) 
    .expectNext("thing1") 
    .expectNext("thing2")
    .expectErrorMessage("boom") 
    .verify(); 

2) Блок вызова в тесте - это не проблема.

Если ваш метод модульного тестирования блокируется и должен завершиться до того, как вы вернетесь, тогда block, вероятно, является правильным вызовом. Но есть еще более эффективные способы сделать это, например StepVerifier, описанный выше. сервлет API, запускающий процесс). Обычно вы возвращаете Mono и преобразуете другие входные данные без блокирующего вызова.

...