Hello.
Thanks a lot. Finally it is working
Here's my code if in the future someone will have similar issue (partially
taken from LoggingInInterceptor from CXF)
public class StringContentRequestHandler implements RequestHandler {
private static final Logger logger =
LoggerFactory.getLogger(RawContentRequestHandler.class);
public Response handleRequest(Message m, ClassResourceInfo
resourceClass) {
InputStream is = m.getContent(InputStream.class);
try {
CachedOutputStream bos = new CachedOutputStream();
IOUtils.copy(is, bos);
bos.flush();
is.close();
m.setContent(InputStream.class, bos.getInputStream());
StringBuilder builder = new StringBuilder();
bos.writeCacheTo(builder, "utf-8");
m.setContent(String.class, builder.toString());
return null;
} catch (IOException ex) {
logger.error("IOException on getting raw content", ex);
return null;
}
}
}
Artur
Sergey Beryozkin-5 wrote:
>
> Hi
>
> On Thu, May 12, 2011 at 2:11 PM, artur.chyzy
> <[email protected]> wrote:
>> Hello.
>>
>> I have a JAX RS service configured like this
>>
>> <jaxrs:server id="someServer" address="/someAddress">
>> <jaxrs:serviceBeans>
>> <ref bean="someEndpoint" />
>> </jaxrs:serviceBeans>
>> <jaxrs:providers>
>> <ref bean="jsonProvider" />
>> </jaxrs:providers>
>> </jaxrs:server>
>>
>> The service correctly handles IN and OUT messages and converts them to
>> objects.
>>
>> But I have problem with accessing JSON content as a String (raw format).
>> I
>> need this to correctly implement security as content is needed to
>> calculate
>> MAC for each message (Message Authentication Code).
>> I tried to do it like this:
>>
>> @Context
>> MessageContext mc;
>> ....
>> IOUtils.toString(mc.getContent(InputStream.class), "utf-8");
>>
>> but empty String is returned as input stream has no content (checked on
>> debug)
>> On the other hand mc.getContent(String.class) returns null
>>
>> It is strange as LogginInIntercetor from CXF is using the same technique.
>> Is there any way to get JSON message content as String ?
>>
> I'm presuming that you are trying to get InputStream after the IN
> parameter has already been populated ?
> If yes then you will need to duplicate current InputStream in
> RequestHandler filter and save it or the calculated MAC as a custom
> property on the message, and then do mc.get("json.mac") or similar...
>
> Cheers, Sergey
>
>> Artur
>>
>> --
>> View this message in context:
>> http://cxf.547215.n5.nabble.com/Accessing-JAXRS-JSON-content-directly-tp4390185p4390185.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
>
--
View this message in context:
http://cxf.547215.n5.nabble.com/Accessing-JAXRS-JSON-content-directly-tp4390185p4390428.html
Sent from the cxf-user mailing list archive at Nabble.com.