Не удается загрузить файл с помощью Jax-RS
Я хочу использовать фреймворк Джерси. Я запускаю веб-службу, используя приложение ant, на Java EE7. Мой сервер приложений-Glassfish
Мой метод выглядит так:
package mypackage.service;
...
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
@POST
@Path("createSomething")
@Consumes(MULTIPART_FORM_DATA)
@Produces(APPLICATION_XML)
public Response createSomething(@FormDataParam("upload") InputStream is, @FormDataParam("upload") FormDataContentDisposition formData, @QueryParam("some") String some, @Context HttpServletRequest request) {
String fileLocation = "C:\UploadFile\" + formData.getFileName();
//more things, do not matter
try {
ctrl.saveFile(is, fileLocation);
String result = "Successfully File Uploaded on the path " + fileLocation;
return Response.status(Response.Status.OK).entity(result).build();
} catch (IOException e) {
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
У меня также есть конфигурация приложения:
package mypackage.service;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
@javax.ws.rs.ApplicationPath("")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> resources = new HashSet<>();
addRestResourceClasses(resources);
resources.add(MultiPartFeature.class);
return resources;
}
/**
* Do not modify addRestResourceClasses() method. It is automatically
* populated with all resources defined in the project. If required, comment
* out calling this method in getClasses().
*/
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(mypackage.service.MYSERVICE.class);
}
}
На myweb.xml у меня есть:
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>mypackage.service.ApplicationConfig</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>mypackage.service</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/createSomething/*</url-pattern>
</servlet-mapping>
Я все еще получаю одно и то же сообщение:
Вызвано: орг.апаш.Каталина.LifecycleException: org.стеклянная рыба.Джерси.сервер.модель.ModelValidationException: во время проверки модели ресурсов приложения произошел сбой инициализация приложения. [[Фатальный] нет Источник инъекции для параметра тип общественного пакета javax.с WS.РС.ядро.Ответ
Что я делаю не так??
1 ответ:
Это прекрасно работает для меня. Хотя я бы полностью избавился от подкласса приложений. Это не нужно, и может вызвать конфликт/путаницу. Ваш xml является достаточной конфигурацией, просто избавьтесь от
javax.ws.rs.Application
<init-param>
. Я также хотел бы рассмотреть возможность создания составных банок только во время компиляции (то есть не встроенных в войну - они могут конфликтовать с версией Glassfish). Я не очень много работаю с Муравьем, поэтому не знаю, как вы можете это сделать, но я знаю, что это возможно.