Yes, have a look at
https://fisheye6.atlassian.com/browse/cxf/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml?r=b3288ed94bd6518780839a6b9716c64575c68073

a resource with "/jsonp" uses JSONProvider and the pre stream handler registered in outInterceptors, a resource with "/jsonp2" uses Jackson and indeed registers a handler in providers.

The reason behind is is that now the response content is determined early and as such, when a write of the response data is starting, in this case CT would application/javascript or similar which is not supported by Jackson. So using a handler as a WriterInterceptor lets us temporarily replace "application/javascript" with "application/json" and then restore "application/javascript".

Cheers, Sergey

On 02/07/14 23:24, Sergey Beryozkin wrote:
Hi

As far as I recall it should work with JSONProvider pre-configured to
support application/x+javascript or similar which is not possible with
Jackson which is where a writer interceptor comes in where it
temporarily sets application/json for Jackson to write the data out

I'll double check a bit later
Sergey


On 01/07/14 09:30, Jack Huang wrote:
When I register JsonpPreStreamInterceptor into
<jaxrs:outInterceptors>, the
JSONP is not works, as below configuration:

     <jaxrs:server address="/rest">
         <jaxrs:serviceBeans>
             <ref bean="productServiceImpl"/>
         </jaxrs:serviceBeans>
         <jaxrs:providers>
             <bean
class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
         </jaxrs:providers>
         <jaxrs:inInterceptors>
             <bean
class="org.apache.cxf.jaxrs.provider.jsonp.JsonpInInterceptor"/>
         </jaxrs:inInterceptors>
         <jaxrs:outInterceptors>
             *<bean
class="org.apache.cxf.jaxrs.provider.jsonp.JsonpPreStreamInterceptor"/>*
             <bean
class="org.apache.cxf.jaxrs.provider.jsonp.JsonpPostStreamInterceptor"/>
         </jaxrs:outInterceptors>
     </jaxrs:server>

But, when I put JsonpPreStreamInterceptor into <jaxrs:providers>, the
JSONP
is OK, as below configuration:

     <jaxrs:server address="/rest">
         <jaxrs:serviceBeans>
             <ref bean="productServiceImpl"/>
         </jaxrs:serviceBeans>
         <jaxrs:providers>
             <bean
class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
             *<bean
class="org.apache.cxf.jaxrs.provider.jsonp.JsonpPreStreamInterceptor"/>*
         </jaxrs:providers>
         <jaxrs:inInterceptors>
             <bean
class="org.apache.cxf.jaxrs.provider.jsonp.JsonpInInterceptor"/>
         </jaxrs:inInterceptors>
         <jaxrs:outInterceptors>
             <bean
class="org.apache.cxf.jaxrs.provider.jsonp.JsonpPostStreamInterceptor"/>
         </jaxrs:outInterceptors>
     </jaxrs:server>

I have not configured the mediaType property to "application/json" in
JsonpPreStreamInterceptor.

CXF Version is 3.0.0



--
View this message in context:
http://cxf.547215.n5.nabble.com/JSONP-is-not-works-tp5739858p5745795.html
Sent from the cxf-user mailing list archive at Nabble.com.





--
Sergey Beryozkin

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

Blog: http://sberyozkin.blogspot.com

Reply via email to