Thanks, I just found out this alternative way indeed. --- On Fri, 2/4/11, Sergey Beryozkin <[email protected]> wrote:
From: Sergey Beryozkin <[email protected]> Subject: Re: Building REST style web services To: [email protected] Date: Friday, February 4, 2011, 3:14 AM Hi On Fri, Feb 4, 2011 at 8:51 AM, Celinio <[email protected]> wrote: > Building REST style web services > > Hi, > I am a bit new to CXF and wondering what is the recommended way to build > REST style web services with CXF now. > > I simply decorated my method with the @Get and @HttpResource annotations: > > @WebService > public interface IBMICalculator { > > @Get > @HttpResource(location = "/computeBMI/{weight}/{height}") > public double computeBMI(@WebParam(name="weight") double weight, > @WebParam(name="height") double height) ; > } > > I imported the binding extension xml file in my spring xml configuration > file, cxf.xml: > <import resource="classpath:META-INF/cxf/cxf-extension-http-binding.xml"/> > > And i declared an endpoint : > <jaxws:endpoint id="calcBMI" > implementor="com.company.bmi.services.IBMICalculatorImpl" > address="/cxfBmi" > bindingUri="http://apache.org/cxf/binding/http"> > <jaxws:serviceFactory> > <bean > class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"> > <property name="wrapped" value="true" /> > </bean> > </jaxws:serviceFactory> > </jaxws:endpoint> > Here's an alternative approach, using JAX-RS @Path("/") public interface IBMICalculator { @GET @Path("/computeBMI/{weight}/{height}") @Produces("text/plain") public double computeBMI(@QueryParam("weight") double weight, @QueryParam("height") double height) ; } <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/> <jaxrs:endpoint serviceClass="com.company.bmi.services.IBMICalculatorImp address="/cxfBmi"/> though the endpoint declaration may be more involved. > > It works like a charm. However I read that "This binding has been > deprecated and is likely to be removed from CXF in one of its future > releases" > https://cwiki.apache.org/CXF20DOC/http-binding.html > > the reason it was deprecated was that it was maintained and unlikely to be maintained > So what is the recommanded way to build REST style web services with CXF > now ? > Please see the JAX-RS section : http://cxf.apache.org/docs/jax-rs.html The only restriction of JAX-RS compared to the HTTP binding is that no wrapping/unwrapping is supported. Example, @Produces("text/plain") public double computeBMI(@QueryParam("weight") double weight, @QueryParam("height") double height) ; @Produces("text/plain") is the hint to the runtime that the 'double' response value needs to be returned as is, without wrapping into something like <response>12.3</response> If the response wrapping is needed then a custom JAX-RS provider can easily deal with wrapping the response. However, if we had say @Consumes("text/xml") @POST public void addItem(double weight, double height) ; where the weight and height are not query parameters but have been unwrapped from XML such as <item> <weight>123</weight> <height>123</height> </item> then it definitely won't work in JAX-RS. Having @Consumes("text/xml") @POST public void addItem(Item item) ; will do better.... Hope that helps, Sergey > Thanks for helping. > > >
