cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: How to get stream from CachedStream ?
Date Tue, 20 Sep 2016 09:13:41 GMT
Hi,
JAX-RS ContainerRequestContext and ContainerResponseContext, as well as 
WriterInterceptorContext and ReaderInterceptorContext filter contexts 
all allow resetting the entity streams or on the way out - entity 
objects - perhaps that can offer a simpler option for replacing the 
content...

Cheers, Sergey
On 19/09/16 11:30, Vjacheslav V. Borisov wrote:
> During message.getInterceptorChain().doIntercept(message); I see call to
> maybeDeleteTempFile() which resets inmem = true;
> and later csnew.getInputStream() execution leads to if (inmem) { }
>
> 2016-09-19 13:05 GMT+04:00 Vjacheslav V. Borisov <slavb18@gmail.com>:
>
>> Hi!
>>
>> I have following code (this is interceptror which does regular expression
>> replacements)
>>
>>
>> https://github.com/ilb/common/blob/master/common-jaxrs/src/
>> main/java/ru/ilb/common/jaxrs/interceptors/ReplaceOutInterceptor.java
>>
>>     private void replaceContents(Message message) {
>>         OutputStream os = message.getContent(OutputStream.class);
>>         CachedStream cs = new CachedStream();
>>         message.setContent(OutputStream.class, cs);
>>
>>         message.getInterceptorChain().doIntercept(message);
>>
>>         try {
>>             cs.flush();
>>             CachedOutputStream csnew = (CachedOutputStream)
>> message.getContent(OutputStream.class);
>>
>>             String contents = IOUtils.toString(csnew.getInputStream());
>>             for (Map.Entry<String, String> keyValue :
>> replacements.entrySet()) {
>>                 contents = contents.replaceAll(keyValue.getKey(),
>> keyValue.getValue());
>>             }
>>             //String replaced=contents.replaceAll(regex, replacement);
>>             os.write(contents.getBytes(Charset.forName(encoding)));
>>             os.flush();
>>
>>             message.setContent(OutputStream.class, os);
>>
>>         } catch (IOException ioe) {
>>             throw new RuntimeException(ioe);
>>         }
>>     }
>>
>>
>>
>> Howewer,  when response contents length of if less than threshold (128 *
>> 1024 bytes)
>> i can get csnew.getInputStream() and get its contents, but when content is
>> more than treshold,
>> i see that in enforceLimits() -> createFileOutputStream() temp file is
>> created,
>> but using csnew.getInputStream() I am getting empty stream.
>>
>


-- 
Sergey Beryozkin

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

Mime
View raw message