我需要进行SOAP调用,然后在REST调用中处理SOAP调用的结果。每组呼叫均基于一批记录。我完全迷失在试图使其尽可能使用异步JDK8流中运行。我该怎么做?
SOAP Call:
CompletableFuture<Stream<Product>> getProducts(final Set<String> criteria)
{
return supplyAsync(() -> {
...
return service.findProducts(request);
}, EXECUTOR_THREAD_POOL);
}
REST呼叫:
final CompletableFuture<Stream<Result>> validateProducts(final Stream<Product> products)
{
return supplyAsync(() -> service
.submitProducts(products, false)
.stream(), EXECUTOR_THREAD_POOL);
}
我正在尝试调用SOAP调用,将结果传递给REST调用,并使用JDK8流收集结果。每个SOAP-> REST调用都是类似于分页的记录(或批处理)的“集合”。 (这现在完全不起作用,只是一个例子。)>
@Test
public void should_execute_validations()
{
final Set<String> samples = generateSamples();
//Prepare paging...
final int total = samples.size();
final int pages = getPages(total);
log.debug("Items: {} / Pages: {}", total, pages);
final Stopwatch stopwatch = createStarted();
final Set<Result> results = range(0, pages)
.mapToObj(index -> {
final Set<String> subset = subset(index, samples);
return getProducts(subset)
.thenApply(this::validateProducts);
})
.flatMap(CompletableFuture::join)
.collect(toSet());
log.debug("Executed {} calls in {}", pages, stopwatch.stop());
assertThat(results, notNullValue());
}
我需要进行SOAP调用,然后在REST调用中处理SOAP调用的结果。每组呼叫均基于一批记录。我完全迷失在试图得到...
我认为您的示例中有两种用法是不正确的:thenApply
和join
。