Resteasy和fileupload:没有内容处置错误 [英] Resteasy and fileupload: get no content-disposition error

查看:554
本文介绍了Resteasy和fileupload:没有内容处置错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

I已经使用了SOAPUI,curl和一个HTML表单来测试这个代码,并且对于所有这些代码我都得到了相同的错误:在部分内部找不到Content-Disposition头部

<$ p $ WARN [org.jboss.resteasy.core.SynchronousDispatcher]失败执行POST / rest / input / myDir:org.jboss.resteasy.spi.ReaderException:java.lang.RuntimeException :在org.jboss.resteasy.core.messagebody.ReaderUtility.doRead(ReaderUtility.java:123)[:6.0.0.Final]

部分中找不到Content-Disposition标头。 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]
在org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:139)[:6.0.0.Final]
在org.jboss.resteasy。 (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。最后]
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)[:6.0.0.Final]
在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]
在org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)[:6.0.0.Final]
在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]
在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(S tandardEngineValve.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] $ b $在java.lang.Thread.run(Thread.java:662)[: 1.6.0_24]
导致:java.lang.RuntimeException:在org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInputImpl.extractPart(MultipartFormDataInputImpl.java)的部分
中找不到Content-Disposition头:69)[:6.0.0.Final]
at org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl.extractParts(MultipartInputImp l.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。最后]
在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和resteasy。我不明白为什么我得到这个错误或如何解决它。

解决方案

我试图使用resteasy和在我的情况下Seam框架。
错误的原因是Seam MultipartFilter捕获了请求。我b $ b必须做的是告诉Seam MultipartFilter只处理以
* .seam结尾的多部分请求。




$ b

我的休息方法:

  @POST 
@Path(admin / uploadImage)
public String uploadImage (@MultipartForm UploadForm表单);

上传表单:

  public class UploadForm {

private byte [] filedata;
$ b public UploadForm(){
}

public byte [] getFileData(){
return filedata;

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





$ b

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,我也会开始查看您正在使用的框架,您的请求正在被处理。


I have a rest resource to which files can be uploaded.

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

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

I've used SOAPUI, curl and a HTML form to test this code and for all of them I get the same error: Could find no Content-Disposition header within part

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

I'm using JBoss AS 6 and resteasy. I do not understand why I'm getting this error or how to solve it.

解决方案

I got the same error when trying to using resteasy and in my case Seam framework. The reason for the error was that Seam MultipartFilter captured the request. What I had to do was to tell the Seam MultipartFilter to only handle multipart requests ending with *.seam.

This way resteasy got the intended request, not the seam filter.

My Rest method:

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

Upload 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>

Even though you might not use Seam I would start looking at the framework you are using and finding out where your request is being handled first.

这篇关于Resteasy和fileupload:没有内容处置错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆