package org.glassfish.jersey.media.multipart.internal;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import jakarta.ws.rs.ConstrainedTo;
import jakarta.ws.rs.RuntimeType;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.MultivaluedMap;
import jakarta.ws.rs.ext.MessageBodyReader;
import jakarta.ws.rs.ext.Providers;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.inject.Singleton;
import org.glassfish.jersey.media.multipart.MultiPart;
import org.glassfish.jersey.server.CloseableService;
import org.jvnet.mimepull.MIMEParsingException;
@Singleton
@ConstrainedTo(RuntimeType.SERVER)
public class MultiPartReaderServerSide extends MultiPartReaderClientSide {
private final Provider<CloseableService> closeableServiceProvider;
@Inject
public MultiPartReaderServerSide(@Context final Providers providers,
final Provider<CloseableService> closeableServiceProvider) {
super(providers);
this.closeableServiceProvider = closeableServiceProvider;
}
protected MultiPart readMultiPart(final Class<MultiPart> type,
final Type genericType,
final Annotation[] annotations,
final MediaType mediaType,
final MultivaluedMap<String, String> headers,
final InputStream stream) throws IOException, MIMEParsingException {
final MultiPart multiPart = super.readMultiPart(type, genericType, annotations, mediaType, headers, stream);
closeableServiceProvider.get().add(multiPart);
return multiPart;
}
}