In this post, you can see a simple example
of consuming a RESTful web service from a Servlet (including asynchronous calls).
JavaEE 7
Client API for JAX-RS API is useful to access the RESTful web services. Basic
steps:
- Get the instance of javax.ws.rs.client.Client class (entry point for invoking RESTful web services).
- Create an instance of javax.ws.rs.client.WebTarget using the instance of Client class (used to invoke a RESTful web service at some location or URI).
- Populate the target with the required data (e.g. MIME type, post data, query parameters), and create a request of appropriate HTTP method type which would be an instance of javax.ws.rs.client.Invocation.
- Obtain the response from the desired RESTful web service via javax.ws.rs.client.Invocation object.
Let's
suppose that we have the following JAX-RS resource:
import javax.ws.rs.Produces; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("helloworld") public class HelloWorldResource { @GET @Produces("text/plain") // default: */* public String helloWorld() { return "Hello, World!"; } }Configured as:
import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("webresources") public class ApplicationConfig extends Application { }If the application is named JaxrsSimpleServletClient_EE7, then the resource is available at:
http://localhost:8080/JaxrsSimpleServletClient_EE7/webresources/helloworld
From a
Servlet we can access this resource like below:
@WebServlet("/ClientServlet") public class ClientServlet extends HttpServlet { // for simple demo, URL is hard-coded private final String jaxrsResource = "http://localhost:8080/JaxrsSimpleServletClient_EE7/webresources/helloworld/"; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // get the instance of client which will be entry point to invoking services Client jaxrsClient = ClientBuilder.newClient(); // targeting the JAX-RS serivce we want to invoke by capturing it in WebTarget instance WebTarget webTarget = jaxrsClient.target(jaxrsResource); // build the request (e.g. a GET request) Invocation invocation = webTarget.request("text/plain").buildGet(); // invoke the request Response jaxrsResponse = invocation.invoke(); // respond to client (user) String hello = jaxrsResponse.readEntity(String.class); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<h3>" + hello + "</h3>"); } @Override public String getServletInfo() { return "Client Server"; } }If you need to perform asynchronous request then add client support for making asynchronous calls to the server by using the AsyncContext class:
@WebServlet(urlPatterns={"/ClientServlet"}, asyncSupported=true)
Complete example is available here.
Read also:
Consume a RESTful web service from JSF
Niciun comentariu:
Trimiteți un comentariu