Hi Sergey, Dan,
I have tried it and it worked! Thanks! 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/resources/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-tp27062753p27220717.html
Sent from the cxf-user mailing list archive at Nabble.com.