From: Heiko W.R. <hr...@re...> - 2014-06-07 21:51:48
|
Hey Bill, thanks for your reply. Am 07.06.2014 um 22:08 schrieb Bill Burke <bb...@re...>: > Unfortunately, the JAX-RS TCK expects that the MBW is not matched until > after the WriterInterceptor is invoked. We used to match prior to What a c$%@! > invoking the interceptor chain... Which makes so much sense > > So, you have 2 options: > > 1. In your WriterInterceptor buffer the json marshalling, change the > content header, flush the buffer. I have this block in aroundWriteTo: try { context.proceed(); } finally { context.getHeaders().get("Content-Type").clear(); context.getHeaders().putSingle("Content-Type",APPLICATION_JAVASCRIPT); } But that header change is not recorded in the output. And when I understand you correctly above, this would be an issue anyway, because the changed header would influence the MBW matcher which runs after the interceptor. > 2. Write a special MBW that delegates to the JSON writer and sets the > content header before doing this. Sounds like a plan to investigate. Thanks Heiko > > Make sense? > > On 6/7/2014 1:00 PM, Heiko W.Rupp wrote: >> Hey, >> >> I have a use case where the user is requesting jsonp encoding e.g. via custom media type or a .jsonw ending. >> >> Anyway. I can intercept the call and surround with "jsonp();" successfully, but the returned >> content-type needs to be changed to "application/javascript". >> >> I could accept that as incoming type, but then RE is complaining about no matching MessageBodyWriter. >> >> So I am thinking of using ContainerWriteFilter to re-write this, but the calls seem to be >> >> MessageHandler method (@GET foo() {} ) (1) >> ContainerWriteFilter (2) >> <message body writer> (3) >> WriterInterceptor. (4) >> (5) >> >> So when I rewrite the content header in (2) a the mbw in (3) complains about wrong type and >> in (4) I can not check if the desired content type is my custom one to request the wrapping or not. >> >> So I would need to run a ContainerWriteFilter at (5) to rewrite the header *after* the interceptor has run. >> >> In RHQ I solved that with a normal servlet filter, but it looks like this does not work here because >> of Async processing (and rewriting the filter with an AsyncListener has its own issues ) >> >> Thanks >> Heiko >> >> >> ------------------------------------------------------------------------------ >> Learn Graph Databases - Download FREE O'Reilly Book >> "Graph Databases" is the definitive new guide to graph databases and their >> applications. Written by three acclaimed leaders in the field, >> this first edition is now available. Download your free book today! >> http://p.sf.net/sfu/NeoTech >> _______________________________________________ >> Resteasy-users mailing list >> Res...@li... >> https://lists.sourceforge.net/lists/listinfo/resteasy-users >> > > -- > Bill Burke > JBoss, a division of Red Hat > http://bill.burkecentral.com > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/NeoTech > _______________________________________________ > Resteasy-users mailing list > Res...@li... > https://lists.sourceforge.net/lists/listinfo/resteasy-users -- Reg. Adresse: Red Hat GmbH, Technopark II, Haus C, Werner-von-Siemens-Ring 14, D-85630 Grasbrunn Handelsregister: Amtsgericht München HRB 153243 Geschäftsführer: Charles Cachera, Michael Cunningham, Paul Hickey, Charlie Peters |