@Override public Flux<MultiValueMap<String, Part>> read(ResolvableType elementType, ReactiveHttpInputMessage message, Map<String, Object> hints) { return Flux.from(readMono(elementType, message, hints)); }
@Override public Flux<MultiValueMap<String, Part>> read(ResolvableType elementType, ReactiveHttpInputMessage message, Map<String, Object> hints) { return Flux.from(readMono(elementType, message, hints)); }
@Test // SPR-16545 public void transferTo() { ServerHttpRequest request = generateMultipartRequest(); ResolvableType elementType = forClassWithGenerics(MultiValueMap.class, String.class, Part.class); MultiValueMap<String, Part> parts = this.reader.readMono(elementType, request, emptyMap()).block(); assertNotNull(parts); FilePart part = (FilePart) parts.getFirst("fooPart"); assertNotNull(part); File dest = new File(System.getProperty("java.io.tmpdir") + "/" + part.filename()); part.transferTo(dest).block(Duration.ofSeconds(5)); assertTrue(dest.exists()); assertEquals(12, dest.length()); assertTrue(dest.delete()); }
@Test public void bodyError() { ServerHttpRequest request = generateErrorMultipartRequest(); ResolvableType elementType = forClassWithGenerics(MultiValueMap.class, String.class, Part.class); StepVerifier.create(this.reader.readMono(elementType, request, emptyMap())).verifyError(); }
private MultiValueMap<String, Part> parse(Map<String, Object> hints) { MediaType contentType = this.response.getHeaders().getContentType(); assertNotNull("No boundary found", contentType.getParameter("boundary")); // see if Synchronoss NIO Multipart can read what we wrote SynchronossPartHttpMessageReader synchronossReader = new SynchronossPartHttpMessageReader(); MultipartHttpMessageReader reader = new MultipartHttpMessageReader(synchronossReader); MockServerHttpRequest request = MockServerHttpRequest.post("/") .contentType(MediaType.parseMediaType(contentType.toString())) .body(this.response.getBody()); ResolvableType elementType = ResolvableType.forClassWithGenerics( MultiValueMap.class, String.class, Part.class); MultiValueMap<String, Part> result = reader.readMono(elementType, request, hints) .block(Duration.ofSeconds(5)); assertNotNull(result); return result; }
@Test public void resolveParts() { ServerHttpRequest request = generateMultipartRequest(); ResolvableType elementType = forClassWithGenerics(MultiValueMap.class, String.class, Part.class); MultiValueMap<String, Part> parts = this.reader.readMono(elementType, request, emptyMap()).block(); assertEquals(2, parts.size()); assertTrue(parts.containsKey("fooPart")); Part part = parts.getFirst("fooPart"); assertTrue(part instanceof FilePart); assertEquals("fooPart", part.name()); assertEquals("foo.txt", ((FilePart) part).filename()); DataBuffer buffer = DataBufferUtils.join(part.content()).block(); assertEquals(12, buffer.readableByteCount()); byte[] byteContent = new byte[12]; buffer.read(byteContent); assertEquals("Lorem Ipsum.", new String(byteContent)); assertTrue(parts.containsKey("barPart")); part = parts.getFirst("barPart"); assertTrue(part instanceof FormFieldPart); assertEquals("barPart", part.name()); assertEquals("bar", ((FormFieldPart) part).value()); }
private List<OperationRequestPart> extractRequestParts(ExchangeResult result) { if (!ClassUtils.isPresent( "org.synchronoss.cloud.nio.multipart.NioMultipartParserListener", getClass().getClassLoader())) { return Collections.emptyList(); } return new MultipartHttpMessageReader(new SynchronossPartHttpMessageReader()) .readMono(ResolvableType.forClass(Part.class), new ExchangeResultReactiveHttpInputMessage(result), Collections.emptyMap()) .onErrorReturn(new LinkedMultiValueMap<>()).block().values().stream() .flatMap((parts) -> parts.stream().map(this::createOperationRequestPart)) .collect(Collectors.toList()); }
@Override public Flux<MultiValueMap<String, Part>> read(ResolvableType elementType, ReactiveHttpInputMessage message, Map<String, Object> hints) { return Flux.from(readMono(elementType, message, hints)); }
@Override public Flux<MultiValueMap<String, Part>> read(ResolvableType elementType, ReactiveHttpInputMessage message, Map<String, Object> hints) { return Flux.from(readMono(elementType, message, hints)); }