Hi,

As Sergey pointed out, normally an input stream could be consumed only once, so 
if your own logic need consume the stream, you need cache the stream 
beforehand, some thing like

InputStream is = message.getContent(InputStream.class);
        if (is != null) {
            CachedOutputStream bos = new CachedOutputStream();
            try {
                IOUtils.copy(is, bos);
                bos.flush();
                is.close();
                message.setContent(InputStream.class, bos.getInputStream());
                bos.close();
                // bos.getInputStream() is re-readable
            } catch (IOException e) {
               
            }
        }

-------------
Freeman(Yue) Fang

Red Hat, Inc. 
FuseSource is now part of Red Hat
Web: http://fusesource.com | http://www.redhat.com/
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: @Freeman小屋

On 2012-12-20, at 上午2:49, jbright wrote:

> Could you please provide me a snippet or sample on how to do that?
> 
> John
> 
> 
> On Dec 19, 2012, at 11:04 PM, "Sergey Beryozkin-5 [via 
> CXF]"<[email protected]> wrote:
> 
>> You will need to replace InputStream on the message if you've already 
>> done your own validation 
>> 
>> Cheers, Sergey 
>> 
>> On 19/12/12 17:04, jbright wrote:
>> 
>>> I'm intercepting the REST request using a custom RestFilter implements 
>>> RequestHandler.. 
>>> 
>>> While overriding the handleRequest like below: 
>>>    /public Response handleRequest(Message m, ClassResourceInfo 
>>> resourceClass)/ 
>>> 
>>> I get the request content by /InputStream in = 
>>> m.getContent(InputStream.class);/ 
>>> 
>>> After doing the necessary validation, I do a /return null/ 
>>> 
>>> The control gets passed to the service bean, but while unmarshalling the 
>>> request, I get the below exception. 
>>> 
>>> Dec 19, 2012 10:23:48 PM org.apache.cxf.jaxrs.provider.AbstractJAXBProvider 
>>> handleJAXBException 
>>> WARNING: javax.xml.bind.UnmarshalException 
>>>  - with linked exception: 
>>> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 
>>>  at [row,col {unknown-source}]: [1,0]] 
>>> at 
>>> com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(Unknown
>>>  
>>> Source) 
>>> at 
>>> com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown
>>>  
>>> Source) 
>>> at 
>>> com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown
>>>  
>>> Source) 
>>> at 
>>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:258)
>>> at 
>>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:215)
>>>  
>>> at 
>>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:182)
>>>  
>>> at 
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1038)
>>>  
>>> at 
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:614) 
>>> at 
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:578)
>>>  
>>> at 
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:238)
>>>  
>>> at 
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:89)
>>>  
>>> at 
>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
>>>  
>>> at 
>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:122)
>>>  
>>> at 
>>> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:211)
>>>  
>>> at 
>>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213)
>>>  
>>> at 
>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:154)
>>>  
>>> at 
>>> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:129)
>>>  
>>> at 
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:187)
>>>  
>>> at 
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:110)
>>>  
>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
>>> at 
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:166)
>>>  
>>> at 
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>>>  
>>> at 
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>>>  
>>> at 
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
>>>  
>>> at 
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>>>  
>>> at 
>>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>>>  
>>> at 
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
>>>  
>>> at 
>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
>>>  
>>> at 
>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
>>> at 
>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>>>  
>>> at 
>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
>>> at 
>>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
>>>  
>>> at 
>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
>>>  
>>> at 
>>> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
>>>  
>>> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
>>> at java.lang.Thread.run(Unknown Source) 
>>> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 
>>>  at [row,col {unknown-source}]: [1,0] 
>>> at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:677) 
>>> at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2119) 
>>> at 
>>> com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2025)
>>>  
>>> at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1117) 
>>> at 
>>> com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(Unknown
>>>  
>>> Source) 
>>> ... 36 more 
>>> 
>>> expecting urgent help 
>>> 
>>> 
>>> 
>>> -- 
>>> View this message in context: 
>>> http://cxf.547215.n5.nabble.com/After-Interception-REST-request-WstxEOFException-Unexpected-EOF-in-prolog-tp5720511.html
>>> Sent from the cxf-user mailing list archive at Nabble.com.
>> 
>> 
>> 
>> 
>> If you reply to this email, your message will be added to the discussion 
>> below:
>> http://cxf.547215.n5.nabble.com/After-Interception-REST-request-WstxEOFException-Unexpected-EOF-in-prolog-tp5720511p5720517.html
>> To unsubscribe from After Interception REST request - WstxEOFException: 
>> Unexpected EOF in prolog, click here.
>> NAML
> 
> 
> 
> 
> --
> View this message in context: 
> http://cxf.547215.n5.nabble.com/After-Interception-REST-request-WstxEOFException-Unexpected-EOF-in-prolog-tp5720511p5720529.html
> Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to