Hi Dan, Sergey,
I added the Interceptors, but it's still not working. Here's my
implementation:
first I added the interceptors:
<bean id="fastInfosetOutInterceptor"
class="org.apache.cxf.interceptor.FIStaxOutInterceptor" />
<bean id="fastInfosetInInterceptor"
class="org.apache.cxf.interceptor.FIStaxInInterceptor" />
I applied it in my endpoint config:
<jaxrs:server id="sampleService" address="/">
<jaxrs:serviceBeans>
<ref bean="sampleServiceBean" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jaxbProvider" />
</jaxrs:providers>
<jaxrs:outInterceptors>
<ref bean="fastInfosetOutInterceptor" />
</jaxrs:outInterceptors>
<jaxrs:inInterceptors>
<ref bean="fastInfosetInInterceptor" />
</jaxrs:inInterceptors>
</jaxrs:server>
At first, threw an exception because "Content-Type" is not define. So I
added it in the request header. Then It went through
FIStaxOutInterceptor::handleMessage() fine, but the returned xml is still
not fastinfoset encoded.
Did I miss something?
Thanks,
Allan
dkulp wrote:
>
> On Tue January 19 2010 3:34:53 pm Sergey Beryozkin wrote:
>> Yes, that is probably it. Allan, can you try it ? I thought naively
>> @FastInfoset was handled at the runtime core level, but I will try to
>> update the JAXRS runtime to check for @FastInfoset and other newly
>> introduced annotations in time for 2.3
>
> The new annotations are handled by new listeners that listen for various
> events. I have the ReflectionServiceFactoryBean producing those events.
> I
> haven't gone through the JAX-RS equivalent stuff yet to get those working.
> It
> shouldn't be hard, just needs to be done.
>
> Dan
>
>
>>
>> Cheers, Sergey
>>
>> -----Original Message-----
>> From: Daniel Kulp [mailto:[email protected]]
>> Sent: 19 January 2010 20:00
>> To: [email protected]
>> Cc: AllanSLim
>> Subject: Re: CXF 2.2.5 and Fastinfoset
>>
>>
>> Try configuring in the Fastinfoset interceptors directly. I'm not sure
>> if
>> the JAX-RS stuff will pickup the @FastInfoset annotation on 2.3 yet.
>>
>> Dan
>>
>> On Tue January 19 2010 1:19:45 pm AllanSLim wrote:
>> > Hi Sergey, Dan,
>> >
>> > I have tried it and it accepted it! However, the xml output doesn't
>>
>> look
>>
>> > fastinfoset encoded. The xml output that I have is not big. Probably
>>
>> just
>>
>> > 10 lines.
>> >
>> > To recap, here's what I have done (For other readers ):
>> >
>> > in my applicationContext.xml I added:
>> >
>> > <util:list id="customTypes">
>> > <value>application/xml</value>
>> > <value>application/fastinfoset</value>
>> > </util:list>
>> >
>> > <bean id="jaxbProvider"
>> > class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
>> > <property name="produceMediaTypes" ref="customTypes" />
>> > <property name="consumeMediaTypes" ref="customTypes" />
>> > </bean>
>> >
>> > and added a provider in my service:
>> >
>> > <!-- JAX-RS endpoint configuration -->
>> > <jaxrs:server id="sampleService" address="/">
>> > <jaxrs:serviceBeans>
>> > <ref bean="sampleServiceBean" />
>> > </jaxrs:serviceBeans>
>> > <jaxrs:providers>
>> > <ref bean="jaxbProvider" />
>> > </jaxrs:providers>
>> > </jaxrs:server>
>> >
>> >
>> > NOTE: The name space for util:list is needed. (
>> > xmlns:util="http://www.springframework.org/schema/util" )
>> >
>> > Since I am using 2.3, I added the annotation in my service impl.
>> >
>> > @FastInfoset
>> > public class SampleServiceImpl implements SampleService {
>> >
>> >
>> > @Path("/getSample")
>> > @Produces({"application/xml","application/fastinfoset"})
>> > public SampleResponse getSampleWithParams(@QueryParam("id") Long
>>
>> id)
>>
>> > throws SampleServiceException, SampleServiceIllegalArgumentException {
>> >
>> >
>> >
>> > Thank you guys for the help!
>> >
>> >
>> > regards,
>> > Allan
>> >
>> > Sergey Beryozkin wrote:
>> > > Hi
>> > >
>> > > Sorry for a delay.
>> > > CXF JAXRS JaxbElementProvider is already checking for a custom
>> > > XMLStreamReader/XMLStreamWriter on a message, and if it is available
>>
>> then
>>
>> > > will read from/write to it.
>> > > The current problem is that a JAXB provider is not recognizing
>> > > "application/fastinfoset", so you just need to explicitly configure
>> > > JaxbElementProvider to accept
>> > >
>> > > "application/xml" and "application/fastinfoset", please see
>>
>> http://svn.apache.org/repos/asf/cxf/trunk/systests/jaxrs/src/test/resour
>> c
>>
>> > >es/jaxrs/WEB-INF/beans.xml
>> > >
>> > > ex, do something like
>> > >
>> > > <util:list id="customTypes">
>> > > <value>application/xml</value>
>> > > <value>application/fastinfoset</value>
>> > > </util:list>
>> > >
>> > > and then
>> > >
>> > > <bean id="jaxbProvider"
>> > > class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
>> > > <property name="produceMediaTypes" ref="customTypes"/>
>> > > <property name="consumeMediaTypes" ref="customTypes"/>
>> > > </bean>
>> > >
>> > > Can you try it please ? I hope this will work for you
>> > > Sergey
>> > >
>> > > AllanSLim wrote:
>> > >> Hi Dan,
>> > >>
>> > >> Thanks a lot! Any feedback from Sergey is also appreciated.
>> > >>
>> > >>
>> > >> We also have SOAP endpoints, I will experiment on that as well.
>> > >>
>> > >> regards,
>> > >> Allan
>> > >>
>> > >> dkulp wrote:
>> > >>> May need to wait till Sergey is back from his holidays for this.
>> > >>>
>> > >>> I don't think the FastInfosetFeature thing will work for JAX-RS as
>>
>> that
>>
>> > >>> really
>> > >>> interacts with the StaxOutInterceptors that are used for the
>>
>> normal
>>
>> > >>> webservice
>> > >>> things. What may be needed is a FI Provider thing for JAXRS.
>>
>> Not
>>
>> > >>> really
>> > >>> sure though. Or maybe have the existing providers that use Stax
>> > >>> double check
>> > >>> the message for an XMLStreamReader or similar. If I get a
>>
>> chance a
>>
>> > >>> bit
>> > >>> later, I'll try and take a look, but this is defintely closer to
>> > >>> Sergey's
>> > >>> area.
>> > >>>
>> > >>> Dan
>> > >>>
>> > >>> On Thu January 7 2010 11:32:34 am AllanSLim wrote:
>> > >>>> Hi Guys,
>> > >>>>
>> > >>>> We're trying to implementing the fastInfoset feature of CXF
>>
>> (2.2.5)
>>
>> > >>>> in our
>> > >>>> REST service, but it's returning a 500 internal server error ( No
>> > >>>> message
>> > >>>> body writer has been found for response class Person ).
>> > >>>>
>> > >>>> wget:
>> > >>>>
>> > >>>> wget -S --header="Accept: application/fastinfoset"
>> > >>>> http://localhost:8080/services/samples/getSample?id=9
>> > >>>>
>> > >>>> No message body writer has been found for response class Person
>> > >>>>
>> > >>>>
>> > >>>> Our rest service is:
>> > >>>>
>> > >>>> @Path("/samples")
>> > >>>> @Features(features = {
>>
>> "org.apache.cxf.feature.FastInfosetFeature" })
>>
>> > >>>> @Produces({"application/xml","application/fastinfoset",
>>
>> "text/plain"})
>>
>> > >>>> public class SampleServiceImpl implements SampleService {
>> > >>>>
>> > >>>> @GET
>> > >>>> @Path("/getPerson")
>> > >>>> public Response getPerson() {
>> > >>>> Person person = new Person();
>> > >>>> person.setAge("99");
>> > >>>> person.setName("Homer Simpson");
>> > >>>> // trying the Response.ok()
>> > >>>> return Response.ok(person).build();
>> > >>>> // return person;
>> > >>>> }
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>>> Our class person is properly annotated with:
>> > >>>>
>> > >>>> @XmlRootElement(name = "Person")
>> > >>>> public class Person { .. }
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>>> Our project is maven base.
>> > >>>>
>> > >>>> Any help will be greatly appreciated!
>> > >>>>
>> > >>>> Thank you very much!
>> > >>>>
>> > >>>> regards,
>> > >>>> Allan
>>
>
> --
> Daniel Kulp
> [email protected]
> http://www.dankulp.com/blog
>
>
--
View this message in context:
http://old.nabble.com/CXF-2.2.5-and-Fastinfoset-tp27062753p27247240.html
Sent from the cxf-user mailing list archive at Nabble.com.