Spring Webclient, zapis body do pliku, pliku jest pusty

0

Hej,

Korzystając ze Springowego Webclienta próbuję pobrać plik z 3rd party API, niestety przy próbie zapisania go lokalnie dostaję pusty plik. Ktoś coś co robię nie tak?

WebClient client = WebClient.builder()
        .clientConnector(new ReactorClientHttpConnector(httpClient1))
        .baseUrl(String.format(FILE_DOWNLOAD_PATH))
        .build();
WebClient.RequestBodyUriSpec method = client.method(HttpMethod.GET);
method.header("Authorization", "Bearer " + accessToken);
final Flux<DataBuffer> dataBufferFlux = method.retrieve().bodyToFlux(DataBuffer.class);
final Path path = FileSystems.getDefault().getPath("example" + new Random(200).nextInt() + ".zip");
WritableByteChannel channel = Files.newByteChannel(path, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
Mono<Path> then = DataBufferUtils.write(dataBufferFlux, channel)
        .map(DataBufferUtils::release)
        .then(Mono.just(path));

Powyższy kod odpalam bezpośrednio z maina. Czy to może powodować problem?

0

Pobieranie danych przez web clienta i zapis do pliku to dwie oddzielne sprawy - zoczep się debuggerem bądź zmień troszkę swój kod, żeby sprawdzić, czy błąd leży po stronie pobierania danych przez web clienta, czy też po stronie zapisu do pliku

1

Jeśli to cały kod, to nie widzę żadnego subscribe na tym strumieniu, więc on się w teorii w ogóle nie odpala.

2

Panie, zapisujesz dane poza strumieniem. Napisz wszystko w jednym pipeline, a na końcu subscribe() inaczej będziesz musiał zrobić złego block().

0

@Charles_Ray: @NeutrinoSpinZero: kurcze Panowie, siedzę nad tym od kilku godzin i wychodzi mi wielka kupa. Nie czaję tego reactive podejścia. Możecie mnie bardziej nakierować?

2

Jest jakiś powód, oprócz hype driven development, żebyś używał tutaj tego reactive clienta? Bo jeśli dobrze rozumiem, to masz jakiś endpoint który zwróci ci plik. Czemu nie uderzasz tam normalnym http clientem?

0

@Shalom: nie mam żadnego specjalnego powodu, z ciekawości użyłem sobie Webclienta i o ile z pozostałymi endpointami nie mam problemu to z tym sobie nie mogę dać rady. Nie chciałbym na razie zmieniać klienta, bo zależy mi na czasie a z nowym klientem musiałbym trochę się pobawić z konfiguracją proxy i SSLa

1

@Endrew: jeśli jesteś zainteresowany, to polecam przerobić sobie tutorial do Reactora, np: https://github.com/nurkiewicz/reactor-workshop. Brak Ci fundamentalnej wiedzy na temat pracy z reactive streams. Nie jestem przekonany, że wiesz jaką wartość to wnosi do Twojego projektu i z jakimi problemami utrzymaniowymi się to później wiąże.

0

@Charles_Ray: thx, obczaję sobie w wolnym czasie. No worries, to o co pytam to coś w stylu POCa, w takiej formie jak obecnie nigdzie poza moje lokalne środowisko nie wyjdzie, dlatego pozwalam sobie na eksperymenty :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1