JAX-RS and Apache CXF - rest

I am new to Webservices, I am confused about the JAX-RS and apache CXF
What i read is that JAX-RS is API and Apache CXF is implementation of JAX-RS
JAX-RS is not specification , Is it possible to direclty use JAX-RS to build REST services?
Please correct me if I am wrong
Regards

JAX-RS is a specification. The binaries provided by it only contain Interface definitions but no implementations.
The default implementation of JAX-RS is Jersey. It provides implementations plus additional features.
Apache CXF and Restlet are other implementations of JAX-RS that provide different additional features.

Related

How call Rest API in Eclipse RCP application?

I have one Eclipse RCP3 project.Now I need to call a rest api|(java) and Post some information using that API. Need Help.
Being a Java application, an Eclipse RCP app can use most existing Java REST client libraries. My opinion is that the easiest way is to use the ECF JAX-RS Jersey Client. I recently wrote an article about how to incorporate this into an Eclipse RCP application:
https://www.modumind.com/2020/05/19/eclipse-rcp-and-rest-an-introduction/
In short, the JAX-RS Jersey Client is an OSGi Remote Services client created as part of the Eclipse Communications Framework (ECF) project. It embeds a Jersey/Jackson JAX-RS implementation that allows you to create REST clients as annotated interfaces that are made available as OSGi services locally. Jackson is used to data bind the REST responses to Java POJOs which require little or no annotation.
This solution allows you to skip most of the scaffolding code that usually has to be written to make REST calls in a Java application. But of course, you can also use Jersey and Jackson directly, those plugins are made available via Eclipse Orbit project.
http://www.eclipse.org/orbit
The GitHub repository for the ECF JAX-RS Jersey Client can be found here:
https://github.com/ECF/JaxRSProviders

How to use Apache Camel in CXF Rest webservice without Spring

In my project, we are not using Spring. Is it possible to use Apache Camel and Apache CXF to build REST service?
I used
<listener>
<listener-class>
org.apache.camel.component.servletlistener.SimpleCamelServletContextListener
</listener-class>
</listener>
<servlet-class>
org.apache.camel.component.servlet.CamelHttpTransportServlet
</servlet-class>
I create a Route class, and I am able to utilize that route. But, this doesn't look like REST service, but looks like plain Servlet call.
How to use CXF here to build REST service.
It's hard to config the CXF REST endpoint without using Spring.
I think you can use simple binding to build the route.
Another option you could consider apart from the one Willem suggested is using Restlet. Apache Camel provides a nice integration with the framework and super-easy usage.
You can find more info about Restlet and its Apache Camel integration here
I have an example at:
http://code.notsoclever.cc/camel-cxfrs-jdbc-rest-example/
The example does use Spring but note that the CXFRS component is not configured in Spring.

WSO2 AS: get Axis2 MessageContext in CXF?

I deploy JAX-RS service to CXF (WSO2 AS 5.1.0) as WAR-file.
Also I have Axis2 Handler deployed as module (MAR) which used to modify Axis2 MessageContext in IN/OUT flows.
How can I get Axis2 MessageContext from JAX-RS service?
This is not possible. By design we don't allow to access Axis2 MessageContext from tomcat container where the JAX-RS service is running.

Is it possible to expose an EJB project as a RESTful WS?

I have implemented a RESTful web service using jersey and deployed it on Tomcat, I have used DAO classes to manipulate database operations, entities to wrap database records. and did the processing in separate package. I want to make this system distributed using EJB. First of all would it be easy to do this change. or i need to rewrite things from scratch. Second, I still need to have the REST WS, so would it be possible to expose the EJB as a REST WS and how? would the REST WS be in the same EJB project or in a different one?
You can definitely do it as an EJB and REST WS. Upgrade your Tomcat install to TomEE Plus, then just add #Stateless or #Singleton to the existing REST service.
You won't need Jersey in there anymore as the Java EE version of Tomcat (TomEE) includes CXF for JAX-RS support.
This example is not well documented, but shows a functional application that combines both EJB and JAX-RS.
http://tomee.apache.org/examples-trunk/rest-on-ejb/README.html

create client side java classes from a RESTful service in CXF

I want to create client-side java from a restful web service, so that I can call the service. Do somebody know if CXF provide such this tools?
Best,
With CXF 2.4.1, CXF does provide a "wadl2java" tool that can be used to create a Java client from a WADL document. If your restful service provides a WADL, that can be used as a starting point.