COMPUTACIÓN ORIENTADA A SERVICIOS (PRÁCTICA) Dr. Mauricio Arroqui EXA-UNICEN
Actividad Crear un servicio REST y un cliente para el mismo ejercicio realizado durante la práctica para SOAP. Se requiere la modelación del problema y correcta utilización de los verbos. A continuación se ejemplifica paso a paso la creación de un servicio Rest y un cliente en Eclipse.
Server
Convertir a Maven Project (simplifica el agregado de librerías) Click derecho en el Proyecto -> Configure Convert to Maven Project
Convertir a Maven Project
Abrir pom.xml y agregar abajo del tag <build> <dependencies> <dependency> <groupid>asm</groupid> <artifactid>asm</artifactid> <version>3.3.1</version> </dependency> <dependency> <groupid>com.sun.jersey</groupid> <artifactid>jersey-bundle</artifactid> <version>1.19</version> </dependency> <dependency> <groupid>org.json</groupid> <artifactid>json</artifactid> <version>20140107</version> </dependency> <dependency> <groupid>com.sun.jersey</groupid> <artifactid>jersey-server</artifactid> <version>1.19</version> </dependency> <dependency> <groupid>com.sun.jersey</groupid> <artifactid>jersey-core</artifactid> <version>1.19</version> </dependency> </dependencies>
Mi pom.xml completo <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>restwebservice</groupid> <artifactid>restwebservice</artifactid> <version>0.0.1-snapshot</version> <packaging>war</packaging> <build> <sourcedirectory>src</sourcedirectory> <plugins> <plugin> <artifactid>maven-compiler-plugin</artifactid> <version>3.3</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactid>maven-war-plugin</artifactid> <version>2.6</version> <configuration> <warsourcedirectory>webcontent</warsourcedirectory> <failonmissingwebxml>false</failonmissingwebxml> </configuration> </plugin> </plugins> </build> <dependencies> LAS QUE PEGAMOS </dependencies> </project>
Editar /WebContent/WEB-INF/web.xml <?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/ javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/webapp_3_0.xsd" id="webapp_id" version="3.0"> <display-name>restwebservice</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>jersey Web Application</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.servletcontainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey Web Application</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
Clase Java 1 @Path("/dtopservice") public class DolarToPesoService { @GET @Produces("application/xml") public String convertctof() { Double peso; Double dolar = 10.0; peso = dolar * 9.4 * 1.2; String result = "@Produces(\"application/xml\") Output: \n\nu$d to Peso Arg Tarjeta Converter Output: \n\n" + peso; return "<dtopservice>" + "<dolar>" + dolar + "</dolar>" + "<dtopoutput>" + result + "</dtopoutput>" + "</ dtopservice>"; @Path("{c") @GET @Produces("application/xml") public String convertctoffrominput(@pathparam("c") Double c) { Double peso; Double dolar = c; peso = ((dolar * 9) / 5) + 32; String result = "@Produces(\"application/xml\") Output: \n\nu$d to Peso Arg Tarjeta Converter Output: \n\n" + peso; return "<dtopservice>" + "<dolar>" + dolar + "</dolar>" + "<dtopoutput>" + result + "</dtopoutput>" + "</ dtopservice>";
Clase Java 2 @Path("/dtopservice") public class DolarToPesoService { @GET @Produces("application/xml") public String convertctof() { Double peso; Double dolar = 10.0; peso = dolar * 9.4 * 1.2; String result = "@Produces(\"application/xml\") Output: \n\nu$d to Peso Arg Tarjeta Converter Output: \n\n" + peso; return "<dtopservice>" + "<dolar>" + dolar + "</dolar>" + "<dtopoutput>" + result + "</dtopoutput>" + "</ dtopservice>"; @Path("{c") @GET @Produces("application/xml") public String convertctoffrominput(@pathparam("c") Double c) { Double peso; Double dolar = c; peso = ((dolar * 9) / 5) + 32; String result = "@Produces(\"application/xml\") Output: \n\nu$d to Peso Arg Tarjeta Converter Output: \n\n" + peso; return "<dtopservice>" + "<dolar>" + dolar + "</dolar>" + "<dtopoutput>" + result + "</dtopoutput>" + "</ dtopservice>";
Maven Click derecho en el projecto -> Maven -> Update Project Click derecho en el projecto > Run as -> Maven Build (opción 5) ->Add clean install -> Run
Arrancar el Tomcat
Test http://localhost:8080/restwebservice/services/ dtopservice/ http://localhost:8080/restwebservice/services/ dtopservice/50/ http://localhost:8080/restwebservice/services/ ptodservice/ http://localhost:8080/restwebservice/services/ ptodservice/50/
Cliente
Estructura del proyecto 1. Creamos un paquete para el cliente. 2. Va a ser una simple clase con un método main() Paquete donde crearon el servidor
Clase Java package ar.edu.unicen.exa.client; import com.sun.jersey.api.client.client; import com.sun.jersey.api.client.clientresponse; import com.sun.jersey.api.client.webresource; public class RestWebServiceClient { public static void main(string[] args) { System.out.println("STARTING"); RestWebServiceClient client = new RestWebServiceClient(); client.getptodresponse(); client.getdtopresponse(); private void getdtopresponse() { try { Client client = Client.create(); WebResource webresource2 = client.resource("http://localhost:8080/restwebservice/services/dtopservice/10"); ClientResponse response2 = webresource2.accept("application/xml").get(clientresponse.class); if (response2.getstatus()!= 200) { throw new RuntimeException("Failed : HTTP error code : " + response2.getstatus()); String output2 = response2.getentity(string.class); System.out.println("\n============Get Dollars To Pesos Arg ============"); System.out.println(output2); catch (Exception e) { e.printstacktrace(); private void getptodresponse() { try { Client client = Client.create(); WebResource webresource = client.resource("http://localhost:8080/restwebservice/services/ptodservice/10"); ClientResponse response = webresource.accept("application/json").get(clientresponse.class); if (response.getstatus()!= 200) { throw new RuntimeException("Failed : HTTP error code : " + response.getstatus()); String output = response.getentity(string.class); System.out.println("============Get Pesos Arg to Dollar Tarjeta============"); System.out.println(output); catch (Exception e) { e.printstacktrace();
FIN