Upgrade nio-multipart-parser to 1.1.0

Issue: SPR-15515
This commit is contained in:
Rossen Stoyanchev
2017-05-26 09:19:10 -04:00
parent e7b41bc30a
commit be0b671191
3 changed files with 30 additions and 12 deletions

View File

@@ -127,7 +127,7 @@ public class SynchronossPartHttpMessageReader implements HttpMessageReader<Part>
Charset charset = Optional.ofNullable(mediaType.getCharset()).orElse(StandardCharsets.UTF_8);
MultipartContext context = new MultipartContext(mediaType.toString(), length, charset.name());
NioMultipartParserListener listener = new FluxSinkAdapterListener(emitter, this.bufferFactory);
NioMultipartParserListener listener = new FluxSinkAdapterListener(emitter, this.bufferFactory, context);
NioMultipartParser parser = Multipart.multipart(context).forNIO(listener);
this.inputMessage.getBody().subscribe(buffer -> {
@@ -167,12 +167,15 @@ public class SynchronossPartHttpMessageReader implements HttpMessageReader<Part>
private final DataBufferFactory bufferFactory;
private final MultipartContext context;
private final AtomicInteger terminated = new AtomicInteger(0);
FluxSinkAdapterListener(FluxSink<Part> sink, DataBufferFactory bufferFactory) {
FluxSinkAdapterListener(FluxSink<Part> sink, DataBufferFactory bufferFactory, MultipartContext context) {
this.sink = sink;
this.bufferFactory = bufferFactory;
this.context = context;
}
@@ -180,7 +183,21 @@ public class SynchronossPartHttpMessageReader implements HttpMessageReader<Part>
public void onPartFinished(StreamStorage storage, Map<String, List<String>> headers) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.putAll(headers);
this.sink.next(createPart(httpHeaders, storage));
this.sink.next(createPart(storage, httpHeaders));
}
private Part createPart(StreamStorage storage, HttpHeaders httpHeaders) {
String fileName = MultipartUtils.getFileName(httpHeaders);
if (fileName != null) {
return new SynchronossFilePart(httpHeaders, storage, fileName, this.bufferFactory);
}
else if (MultipartUtils.isFormField(httpHeaders, this.context)) {
String value = MultipartUtils.readFormParameterValue(storage, httpHeaders);
return new SynchronossFormFieldPart(httpHeaders, this.bufferFactory, value);
}
else {
return new DefaultSynchronossPart(httpHeaders, storage, this.bufferFactory);
}
}
private Part createPart(HttpHeaders httpHeaders, StreamStorage storage) {
@@ -190,13 +207,6 @@ public class SynchronossPartHttpMessageReader implements HttpMessageReader<Part>
new DefaultSynchronossPart(httpHeaders, storage, this.bufferFactory);
}
@Override
public void onFormFieldPartFinished(String name, String value, Map<String, List<String>> headers) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.putAll(headers);
this.sink.next(new SynchronossFormFieldPart(httpHeaders, this.bufferFactory, value));
}
@Override
public void onError(String message, Throwable cause) {
if (this.terminated.getAndIncrement() == 0) {