Hello all,
I've run into an issue in using Jersey that I can't seem to obviously
resolve. To start I read in a jpeg (using FileInputStream and byte arrays),
base64 encode the image chunks (using commons-codec 1.2) and send a POST
request (via httpclient 3.1) to a Jersey web service. When sending the image
data, **some** of the requests throw the following exception:
[#|2009-01-02T15:01:05.470-0500|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;_RequestID=201f0f75-4f67-49f2-aecc-8649c55daf3c;|StandardWrapperValve[Jersey
Web Application]: PWC1406: Servlet.service() for servlet Jersey Web
Application threw exception
java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape
(%) pattern
at java.net.URLDecoder.decode(URLDecoder.java:168)
at
com.sun.jersey.impl.provider.entity.FormProvider.readFrom(FormProvider.java:86)
at
com.sun.jersey.impl.provider.entity.FormProvider.readFrom(FormProvider.java:62)
at
com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:348)
at
com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:355)
at
com.sun.jersey.impl.model.method.dispatch.FormDispatchProvider.processForm(FormDispatchProvider.java:73)
at
com.sun.jersey.impl.model.method.dispatch.FormDispatchProvider$FormParamInInvoker.getParams(FormDispatchProvider.java:87)
at
com.sun.jersey.impl.model.method.dispatch.FormDispatchProvider$TypeOutInvoker._dispatch(FormDispatchProvider.java:128)
at
com.sun.jersey.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:85)
at
com.sun.jersey.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:123)
at
com.sun.jersey.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:71)
at
com.sun.jersey.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
at
com.sun.jersey.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:63)
at
com.sun.jersey.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:722)
at
com.sun.jersey.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:692)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:344)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at
org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Below is an example of encoded data on which jersey threw an exception:
2009-01-02 15:15:05,784 [AWT-EventQueue-0] INFO
edu.louisville.cecs.WebServiceClient - base64Data:
[hjBMjlVYMqE4BIXgsWb5a+QviV/wUH8P6aLpNWv7IQxiWKKzi1CD7Qc/MFBL7gQDhQRtII8sfNgfQHjf/hHPGEkltcGOSK7gLFoomFuVRMCMO20B25ViNvzHgkAGvnIfs/fA1HkuX+GPgfxHdMolnute8M6VrEyTTLu+afU7S4dyjYIAfbjaNvPPw+ZZhjKbn7JKaTioqTkkrygm3a+tm0koq8mntv8AcLBRnBVadWlTqxaalJNyTS1SsrNpJu0vdST3dj4L8af8FDtcvor6x8C2xfcJIo7zV9Ugkgt44GYE29tHL5zxrGqADDYOxGbPNfn/APEz9pfxV4rvL8+KPiGXDTNay6Pp19OEgddjtbm20Y3EiOTG6Fbgx5ZHRypBNfrr8ZfgZ8EZIvD9jqfww+GWi2Wra1YQah/YPhHQdP1yTS9Kkl1nWLSzOn2BcPdWGkvZsmElJ1K2iUA3BRvOv2v/AIW/C3wf4TsrD4L+A/BPge48DJPqPjvSPBOgaXpcWn6Fqlhp0mmaN4g1CGBbTXPEUt9bNcTC3v8AVL2K3snaeGAPOjf0j4FeDEvFXB4vOcbia+T4HC4uWFhUpYdV8TiFBKc6kKk+WNOUGrX5NpaLRs/lfxy8X8T4cZnh8pw/s84zHGUo4m9StVw2HpRm4qi3TotKcrSb5XGPwvmjrc/I74XePvC6+JtV8R61orNonhvRtRu7aS+tEma91+5EFloyQ6fLc7Jrhb27jnt5rkPDDJGjTQSKpjb9a/2cv+Crv7Wv7IXjZfij8MfiT4m+L3wj0ye3Pxe/Zw+I3ifV/EOjjQ7CaZLjxH8L7rVLjVtV8HWItormGW0sJjBpty9nM/h680e3e3sPx90m/wBN13xLf61qTwnRfDei6v45vwkIMV1/YkjWXh+3ljTyBcR3viKTTbcRnO6RvmQqSw4nQfEFzA8d3LdyQ7NW0mXUJliE0dpDcziG/RopVaGSF4bxruPaNjwy2crbXSJY/wCs8u8NOF8iy+pw9gstpYmNa9GrisS51MZianMl7arXrOo4VE/hUJQhF6Rio6H8v51xjxLn2MoZvmmYz5lCOIo4ek1ToYaly8zjTpUI01KDSvJzUpzs3KTauf6lH7DP/BUT9kL9vTRYX+CfxGhtvHFpptnqPiD4VeMlGifEPRYruCC5kL6PcOV1ixga4WL+2NAn1LSnbaBco4aFP0jS4iIADAkBd2CCBkHHORwcNg4wdp9DX+QD47uPHf7OfxF8B+LfB3ibWfD2p+AvEWlv4V8YeGtV1HRNavfBGtwv4hs9HfUtO1GPULeHT7CbUdFhMVzDLeadKskiPK5eT9ufgF/wXX/4KMeDvD8PhXwn4li+NN/peg==]
To me this screams invalid encoding of the data and I haven't ruled that
out, but have used commons-codec before (in a similar application) and
things worked. This is deployed on glassfish (Sun Java System Application
Server 9.1_02 (build b04-fcs)). Any help would be appreciated!
Thanks,
John