Thanks a lot Sergey.

Regards
Raman

-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]] 
Sent: Thursday, December 20, 2012 5:26 PM
To: [email protected]
Subject: Re: MultipartBody gives java.lang.IllegalStateException: !empty with 
CXF 2.7.1


Hi
On 20/12/12 09:13, Malisetti, Ramanjaneyulu wrote:
> Hi,
>              We have the following code which used to work with CXF 2.5.2  
> but getting the below exception with CXF 2.7.1
>          Map<String, InputStream>  attachments = files;
>              List<Attachment>  attachments = new 
> ArrayList<Attachment>();
>
>              /* First attachment is always the Response payload */
>              Attachment respXMLPayloadAttachment = new 
> Attachment("Response_XML_Payload", "application/xml",
>                      responsePayload.getBytes());
>              attachments.add(respXMLPayloadAttachment);
>
>              Set<String>  attachmentFileNames = files.keySet();
>              for (String fileName : attachmentFileNames) {
>                  ContentDisposition cd = new 
> ContentDisposition("attachment;filename=" + fileName);
>                  attachments.add(new Attachment(fileName, 
> files.get(fileName), cd));
>              }
>              return new MultipartBody(attachments);
>
>
> we are getting response but status code is 500 because of the below 
> exception
>

Yes, reproduced, there appears to be some regression at the IOUtils level to do 
with copying input streams. Workaround: remove ".getBytes()" 
or wrap into StringReader.

We'll get this fixed
Sergey

> Response:
> ------------------------------
> --uuid:32188b25-724d-400a-8ba4-a8c693874318
> Content-Type: application/xml
> Content-Transfer-Encoding: binary
> Content-ID:<Response_XML_Payload>
>
> Error serializing the response, please check the server logs, response class 
> : MultipartBody.
> --uuid:32188b25-724d-400a-8ba4-a8c693874318
> Content-Type: application/xml
> Content-Transfer-Encoding: binary
> Content-ID:<console-output.txt>
>
> <ns1:XMLFault 
> xmlns:ns1="http://cxf.apache.org/bindings/xformat";><ns1:faultstring 
> xmlns:ns1="http://cxf.apache.org/bindings/xformat";>java.lang.IllegalSt
> ateException: !empty</ns1:faultstring></ns1:XMLFault>
> -------------------------------
>
>
> Exception on Server side:
>
> java.lang.IllegalStateException: !empty
>                  at 
> org.eclipse.jetty.server.AbstractHttpConnection$Output.sendContent(AbstractHttpConnection.java:1053)
>                  at 
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination$JettyOutputStream.copyFrom(JettyHTTPDestination.java:405)
>                  at org.apache.cxf.helpers.IOUtils.copy(IOUtils.java:102)
>                  at 
> org.apache.cxf.transport.http.AbstractHTTPDestination$WrappedOutputStream.copyFrom(AbstractHTTPDestination.java:698)
>                  at org.apache.cxf.helpers.IOUtils.copy(IOUtils.java:102)
>                  at 
> org.apache.cxf.helpers.IOUtils.copyAndCloseInput(IOUtils.java:110)
>                  at 
> org.apache.cxf.jaxrs.provider.BinaryDataProvider.copyInputToOutput(BinaryDataProvider.java:135)
>                  at 
> org.apache.cxf.jaxrs.provider.BinaryDataProvider.writeTo(BinaryDataProvider.java:104)
>                  at 
> org.apache.cxf.jaxrs.provider.MultipartProvider$MessageBodyWriterDataHandler.writeTo(MultipartProvider.java:456)
>                  at 
> org.apache.cxf.jaxrs.provider.MultipartProvider.writeTo(MultipartProvider.java:265)
>                  at 
> org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1216)
>                  at 
> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:259)
>                  at 
> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:155)
>                  at 
> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:86)
>                  at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
>                  at 
> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)
>                  at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
>                  at 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>                  at 
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:354)
>                  at 
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:318)
>                  at 
> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)
>                  at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1067)
>                  at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1003)
>                  at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
>                  at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
>                  at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
>                  at org.eclipse.jetty.server.Server.handle(Server.java:350)
>                  at 
> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)
>                  at 
> org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:900)
>                  at 
> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:954)
>                  at 
> org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851)
>                  at 
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
>                  at 
> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
>                  at 
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:620)
>                  at 
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
>                  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
>                  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
>                  at java.lang.Thread.run(Thread.java:722)
>      2012-12-20 12:03:28,018 WARN  [qtp12593459-146] 
> interceptor.JAXRSOutInterceptor -101-org.apache.cxf.bundle-2.7.1 - Error 
> serializing the response, please check the server logs, response class : 
> MultipartBody..
>
> Regards
> Raman
>


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to