Witam,

Mam problem, z którym nieskutecznie walczę już od kilku godzin, dlatego już zrezygnowany zwracam się z prośbą o pomoc do kogoś z Was. Kod specjalnie uprościłem, aby lepiej się go czytało.

Aplikacja działa z wykorzystaniem Jersey (2.28) i na kontenerze Tomcat (9). Muszę napisać możliwość wysłania pliku za pomocą RESTa. Na froncie mam prosty formularz, przez który się wybiera i wysyła wskazany plik.

<form action="webapi/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Wyślij" />
</form>

Na backendzie mam klasę, która ma przechwycić żądanie:

@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public class UploadConfigurationController {
	
	@POST
	public Response setContent(@FormDataParam("file") InputStream uploadedInputStream, 
							   @FormDataParam("file") FormDataContentDisposition fileMetaData) {
		return Response.status(Status.OK).entity("ok").build();
	}
	
}

Po wyborze pliku i wysłaniu żądania do end pointu, dostaję następujący błąd ze strony serwera (wydaje mi się, że nie jest to konieczne, aczkolwiek w razie czego mogę wrzucić pełną treść błędu):

HTTP Status 500 – Internal Server Error
...
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response...

Oczywiście przeszukałem internet w poszukiwaniu rozwiązania. Z tego co się dowiedziałem, to muszę zarejestrować MultiPartFeature. Postępowałem więc zgodnie ze wskazówkami.
W pliku web.xml dodałem:

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>

Próbowałem również wykorzystać klasę ResourceConfig aby zarejestrować odpowiedni pakiet:

@ApplicationPath("/webapi")
public class ApplicationConfig extends ResourceConfig {

	public ApplicationConfig() {
		packages("org.glassfish.jersey.media.multipart");
		register(MultiPartFeature.class);
	}
	
}

Mavenem wcześniej zaciągnąłem odpowiednie liby:

  • jersey-media-multipart-2.28.jar
  • mimepull-1.9.11.jar

multipart jest zgodne z wersją jersey:

<jersey.version>2.28</jersey.version>

Pomimo tych zmian, wciąż dostaję ten sam błąd ze strony serwera. Pierwszy raz piszę obsługę wysłania pliku na serwer przez RESTa i zdaję sobie sprawę z tego, że czegoś mogę nie wiedzieć lub po prostu robić to nieprawidłowo. Czy jest w stanie ktoś z Was wskazać mi, gdzie tkwi problem lub co robię źle? Będę wdzięczny za wszelką pomoc.

Pozdrawiam.