使用Jersey over RESTfull服务上载文件,并且资源配置不可修改? 警告:在索引0处找不到public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition)类型参数的注入源。 严重:WebModule[/InName]StandardWrapper.Throwable org.glassfish.jersey.server.model.ModelValidationException:应用程序资源模型的验证在应用程序初始化期间失败。 [[FATAL]在索引0处找不到public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition)类型的参数的注入源;source='ResourceMethod{httpMethod=POST,consumedTypes=[multipart/form data],producedTypes=[],suspended=false,suspendTimeout=0,suspendTimeoutUnit=毫秒,invocable=invocable{handler=MethodHandler{handlerClass=class com.insame.service.UploadFileService,handlerConstructors=[org.glassfish.jersey.server.model。HandlerConstructor@47bee27a]},handlingMethod=public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition),参数=[Parameter[type=class java.io.InputStream,source=file,defaultValue=null],参数[type=class com.sun.jersey.core.header.FormDataContentDisposition,source=file,defaultValue=null]],responseType=class javax.ws.rs.core.Response},nameBindings=[]}] 位于org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:410) 位于org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:157) 位于org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:280) 位于org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) 位于org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) 位于org.glassfish.jersey.internal.Errors.process(Errors.java:315) 位于org.glassfish.jersey.internal.Errors.process(Errors.java:297) 位于org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 位于org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:277) 位于org.glassfish.jersey.servlet.WebComponent(WebComponent.java:262) 位于org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
我在使用Jersey over RESTfull服务上载文件,并且资源配置不可修改? 警告:在索引0处找不到public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition)类型参数的注入源。 严重:WebModule[/InName]StandardWrapper.Throwable org.glassfish.jersey.server.model.ModelValidationException:应用程序资源模型的验证在应用程序初始化期间失败。 [[FATAL]在索引0处找不到public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition)类型的参数的注入源;source='ResourceMethod{httpMethod=POST,consumedTypes=[multipart/form data],producedTypes=[],suspended=false,suspendTimeout=0,suspendTimeoutUnit=毫秒,invocable=invocable{handler=MethodHandler{handlerClass=class com.insame.service.UploadFileService,handlerConstructors=[org.glassfish.jersey.server.model。HandlerConstructor@47bee27a]},handlingMethod=public javax.ws.rs.core.Response com.insame.service.UploadFileService.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition),参数=[Parameter[type=class java.io.InputStream,source=file,defaultValue=null],参数[type=class com.sun.jersey.core.header.FormDataContentDisposition,source=file,defaultValue=null]],responseType=class javax.ws.rs.core.Response},nameBindings=[]}] 位于org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:410) 位于org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:157) 位于org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:280) 位于org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) 位于org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) 位于org.glassfish.jersey.internal.Errors.process(Errors.java:315) 位于org.glassfish.jersey.internal.Errors.process(Errors.java:297) 位于org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 位于org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:277) 位于org.glassfish.jersey.servlet.WebComponent(WebComponent.java:262) 位于org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167),java,rest,file-upload,jersey,jersey-2.0,Java,Rest,File Upload,Jersey,Jersey 2.0,我在UploadFileService下实现了这样的测试服务: @Path("file.upload") public class UploadFileService { @POST @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("f
UploadFileService
下实现了这样的测试服务:
@Path("file.upload")
public class UploadFileService {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
System.out.println("-----------------UploadFileService------------------1.");
// Should we use a disk or DB? Decided to use DISK
// Path should be read from properties-files
String uploadedFileLocation = "//uploaded/" + fileDetail.getFileName();
// save it
writeToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
// All went OK
return Response.status(200).entity(output).build();
}
我记录了这个异常:
@GET
@Path("count")
@Produces("text/plain")
public String countREST() {
return "1 one 1";
}
FINE:[Web安全]hasResource perm:(“javax.Security.jacc.WebResourcePermission”
/webresources/file.upload/count“GET”)
严重:WebModule[/InName]StandardWrapper.Throwable
java.lang.IllegalStateException:资源配置在此上下文中不可修改。
位于org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:257)
警告:StandardWrapperValve[com.insame.service.ApplicationConfig]:为servlet com.insame.service.ApplicationConfig分配异常
java.lang.IllegalStateException:资源配置在此上下文中不可修改。
位于org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:257)
位于org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:205)
位于org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:435)
位于org.glassfish.jersey.servlet.WebComponent(WebComponent.java:261)
位于org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
位于org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
环境
- Netbeans7.3.1
- 玻璃鱼4.0
- 球衣2和玻璃鱼4.0
FINE: [Web-Security] hasResource perm: ("javax.security.jacc.WebResourcePermission"
"/webresources/file.upload/count" "GET")
SEVERE: WebModule[/insame]StandardWrapper.Throwable
java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:257)
WARNING: StandardWrapperValve[com.insame.service.ApplicationConfig]: Allocate exception for servlet com.insame.service.ApplicationConfig
java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:257)
at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:205)
at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:435)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:261)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
公共类应用程序配置扩展应用程序{
public Set>resources=new HashSet我也遇到了同样的问题,希望避免创建自定义应用程序类。它没有很好的文档记录,但是如果您想添加多部分功能,只需将其添加到web.xml servlet配置中:
public class ApplicationConfig extends Application {
public Set<Class<?>> getClasses() {
final Set<Class<?>> resources = new HashSet<Class<?>>();
// Add your resources.
resources.add(UploadFileService.class);
// Add additional features such as support for Multipart.
resources.add(MultiPartFeature.class);
return resources;
}
}
jersey.config.server.provider.classnames
org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature
我还添加了一个loggingfilter。只是一些小的澄清
使用
不是
只有在使用时才对我有效org.glassfish.jersey.media.multipart.
在ApplicationConfig中,只需将MultiPartFeature注册为
com.sun.jersey.*
import org.glassfish.jersey.media.multipart.MultiPartFeature;
@javax.ws.rs.ApplicationPath(“webresources”)
公共类应用程序配置扩展应用程序{
@凌驾
public Set>resources=new java.util.HashSet();
添加(UploadFileService.class);
添加(MultiPartFeature.class);
归还资源;
}
}
如果您使用的是jetty server和jersey servlet,那么您可以通过在启动jetty server的主类中添加以下代码来解决此问题:
ServletHolder jerseyServlet=context.addServlet(
org.glassfish.jersey.servlet.ServletContainer.class“/*”;jerseyServlet.setInitOrder(0)
//告诉Jersey Servlet要加载哪个REST服务/类。
球衣
.SetInit参数(
“jersey.config.server.provider.classnames”,
如果希望使用注释,可以使用与FormDataMultiPart等效的@FormDataParam(“文件”)
如下所示使用示例代码摘录:
// Tells the Jersey Servlet which REST service/classes to load.
jerseyServlet
.setInitParameter(
"jersey.config.server.provider.classnames",
<Your entry point class's canonical name>
+ ";org.glassfish.jersey.media.multipart.MultiPartFeature");
我正在使用Jersey 1.9.1.org.glassfish……与Jersey 2配合得很好。对于Jersey 1,您最好使用com.sun……类。非常感谢!错误消息已更改,我在pom.xml中发现了一个错误。我使用的是旧的mu
com.sun.jersey.*
import org.glassfish.jersey.media.multipart.MultiPartFeature;
@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
resources.add(UploadFileService.class);
resources.add(MultiPartFeature.class);
return resources;
}
}
// Tells the Jersey Servlet which REST service/classes to load.
jerseyServlet
.setInitParameter(
"jersey.config.server.provider.classnames",
<Your entry point class's canonical name>
+ ";org.glassfish.jersey.media.multipart.MultiPartFeature");
public Response uploadFile( **@FormDataParam("file")** InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition contentDispositionHeader) {