Steps To Reproduce:
1. Create a POJO Based Multipart form containing one or more byte arrays/InputStreams( for file upload)
2. Create a Service accepting that form work on post method
3. Deploy it on Jboss-5.0
4. Make a multipart form and open it on firefox
5. Select file and submit the form
Observed:
There is an exception on server stating "Unable to find @FormParam in multipart: fileData"
This only happens if there is a file in the form, otherwise it works fine.
Expected:
Multipart forms should be able to accept files because in case file upload is not support there is no point of multipart form
Problem/Work around:
I think problem exist with the RE for content disposition header (in org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInputImpl) that group everything after name="" causing partname to be filename rather parameter name in case of file upload.
Current RE = "form-data;.name=\"?([^\"\\s;])\"?.*"
Can be fixed by changing RE to "form-data;.name=\"(.?)\"."
Partial Request Dump
POST /ContentManagement/core/token/content/uploadContent HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------54363239114604
Content-Length: 645263
-----------------------------54363239114604
Content-Disposition: form-data; name="fileData"; filename="jumploader_z.jar"
Content-Type: application/x-java-archive
PK
Exception on server:
11:02:44,750 ERROR [SynchronousDispatcher] Failed executing POST /core/token/con
tent/uploadContent
org.jboss.resteasy.spi.LoggableFailure: Unable to find @FormParam in multipart:
fileData
at org.jboss.resteasy.plugins.providers.multipart.MultipartFormAnnotatio
nReader.setFields(MultipartFormAnnotationReader.java:106)
at org.jboss.resteasy.plugins.providers.multipart.MultipartFormAnnotatio
nReader.readFrom(MultipartFormAnnotationReader.java:66)
at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBo
dyParameterInjector.java:76)
at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInje
ctorImpl.java:93)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.
java:114)
at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.
java:260)
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:232
)
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:166
)
at org.jboss.resteasy.core.DispatcherUtilities.getJaxrsResponse(Dispatch
erUtilities.java:142)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispa
tcher.java:356)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispa
tcher.java:173)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.servi
ce(HttpServletDispatcher.java:93)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.servi
ce(HttpServletDispatcher.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFi
lter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Securit
yAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValv
e.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.proce
ss(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invok
e(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedC
onnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:601)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
7)
at java.lang.Thread.run(Thread.java:619)