2011-05-26 32 views
1

我有一個可以上載文件的其餘資源。Resteasy和fileupload:得不到內容處置錯誤

@Path("/rest/input") 
    public class InputResourceBean { 

    @POST 
    @Path("{directory: .*}") 
    @Consumes("multipart/form-data") 
    public void post(final String directory, final MultipartFormDataInput input) { 
    } 

我用SOAPUI,捲曲和HTML表單來測試這個代碼,併爲所有的人,我得到了同樣的錯誤:可能部分

12:55:19,739 WARN [org.jboss.resteasy.core.SynchronousDispatcher] Failed executing POST /rest/input/myDir: org.jboss.resteasy.spi.ReaderException: java.lang.RuntimeException: Could find no Content-Disposition header within part 
at org.jboss.resteasy.core.messagebody.ReaderUtility.doRead(ReaderUtility.java:123) [:6.0.0.Final] 
at org.jboss.resteasy.core.messagebody.ReaderUtility.doRead(ReaderUtility.java:93) [:6.0.0.Final] 
at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:146) [:6.0.0.Final] 
at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:114) [:6.0.0.Final] 
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) [:6.0.0.Final] 
at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:252) [:6.0.0.Final] 
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:217) [:6.0.0.Final] 
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:206) [:6.0.0.Final] 
at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:503) [:6.0.0.Final] 
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:480) [:6.0.0.Final] 
at org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:139) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:211) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.server.servlet.FilterDispatcher.doFilter(FilterDispatcher.java:59) [:6.0.0.Final] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274) [:6.0.0.Final] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274) [:6.0.0.Final] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final] 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.0.0.Final] 
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:191) [:6.0.0.Final] 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) [:6.0.0.Final] 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final] 
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final] 
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final] 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final] 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final] 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final] 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final] 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final] 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final] 
at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final] 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final] 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final] 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final] 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final] 
at java.lang.Thread.run(Thread.java:662) [:1.6.0_24] 
Caused by: java.lang.RuntimeException: Could find no Content-Disposition header within part 
at org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInputImpl.extractPart(MultipartFormDataInputImpl.java:69) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl.extractParts(MultipartInputImpl.java:108) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl.parse(MultipartInputImpl.java:77) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader.readFrom(MultipartFormDataReader.java:52) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader.readFrom(MultipartFormDataReader.java:20) [:6.0.0.Final] 
at org.jboss.resteasy.core.interception.MessageBodyReaderContextImpl.proceed(MessageBodyReaderContextImpl.java:105) [:6.0.0.Final] 
at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.read(GZIPDecodingInterceptor.java:46) [:6.0.0.Final] 
at org.jboss.resteasy.core.interception.MessageBodyReaderContextImpl.proceed(MessageBodyReaderContextImpl.java:108) [:6.0.0.Final] 
at org.jboss.resteasy.core.messagebody.ReaderUtility.doRead(ReaderUtility.java:111) [:6.0.0.Final] 
... 35 more 

我內找不到任何內容處理標頭使用JBoss AS 6並且很容易。我不明白爲什麼我得到這個錯誤或如何解決它。

回答

2

當試圖使用resteasy和我的情況下Seam框架時,我得到了同樣的錯誤。 錯誤的原因是Seam MultipartFilter捕獲了請求。我所要做的就是告訴Seam MultipartFilter只處理以 * .seam結尾的多部分請求。

這種方式重新獲得了預期的要求,而不是接縫過濾器。

我的休息方法:

@POST 
@Path("admin/uploadImage") 
public String uploadImage(@MultipartForm UploadForm form); 

上傳形式:

public class UploadForm { 

    private byte[] filedata; 

    public UploadForm() { 
    } 

    public byte[] getFileData() { 
     return filedata; 
    } 

    @FormParam("filedata") 
    @PartType("application/octet-stream") 
    public void setFileData(final byte[] filedata) { 
     this.filedata = filedata; 
    } 


} 

的components.xml:

<component class="org.jboss.seam.web.MultipartFilter"> 
     <property name="createTempFiles">true</property> 
     <property name="maxRequestSize">8000000</property> 
     <property name="urlPattern">*.seam</property> 
    </component> 

夏娃ñ雖然你可能不會使用Seam我會開始看你正在使用的框架,並找出你的請求被首先處理的地方。

2

我得到了同樣的錯誤使用Resteasy和Spring Boot。

默認情況下,Spring MVC未配置MultipartResolver,但彈簧引導MultipartAutoConfiguration確實是

只需添加以下到您的application.yml禁用了Spring啓動要配置多解析器:如果您使用的是低於1.4版的春天啓動的

spring.http.multipart.enabled: false 

multipart.enabled: false 
+2

在較新版本的spring-boot中,此屬性已被重命名爲spring.http.multipart.enabled – 2016-11-04 15:23:38

+0

謝謝@JoachimVanderAuwera,我已經更新了答案。 – Ben 2016-11-11 20:16:07