| = Cliente Rest MicroProfile |
| :index-group: MicroProfile |
| :jbake-type: page |
| :jbake-status: published |
| |
| Este es un ejemplo básico sobre cómo configurar y utilizar Cliente Rest de MicroProfile en TomEE. |
| |
| === Ejecutar las pruebas para los diferentes escenarios relacionados con la validación de JWT |
| |
| .... |
| mvn clean test |
| .... |
| |
| === Requisitos y configuración |
| |
| Para utilizar el Cliente Rest de MicroProfile se requieren 3 cambios en su proyecto: |
| |
| [arabic] |
| . Agregar la siguiente dependencia al `pom.xml`: |
| + |
| .... |
| <dependency> |
| <groupId>org.eclipse.microprofile.rest.client</groupId> |
| <artifactId>microprofile-rest-client-api</artifactId> |
| <version>${microprofile.rest-client.version}</version> |
| <scope>provided</scope> |
| </dependency> |
| .... |
| . Proveer el archivo de configuración: `microprofile-config.properties` |
| + |
| .... |
| org.superbiz.rest.BookResourceClient/mp-rest/url=http://localhost:4444 |
| .... |
| . Proporcionar una interfaz que pueda crear a partir del recurso JAX-RS |
| que desea consumir: `BookResourceClient.java` |
| + |
| .... |
| package org.superbiz.rest; |
| |
| import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; |
| import javax.enterprise.context.Dependent; |
| import javax.ws.rs.*; |
| import javax.ws.rs.core.MediaType; |
| import java.util.List; |
| |
| @Dependent |
| @RegisterRestClient |
| @Path("/test/api/library") |
| @Produces(MediaType.APPLICATION_JSON) |
| @Consumes(MediaType.APPLICATION_JSON) |
| public interface BookResourceClient { |
| |
| @GET |
| String status(); |
| |
| @POST |
| @Path("/books") |
| void addBook(Book newBook); |
| |
| @DELETE |
| @Path("/books/{id}") |
| void deleteBook(@PathParam("id") int id); |
| |
| @PUT |
| @Path("/books") |
| void updateBook(Book updatedBook); |
| |
| @GET |
| @Path("/books/{id}") |
| Book getBook(@PathParam("id") int id); |
| |
| @GET |
| @Path("/books") |
| List<Book> getListOfBooks(); |
| |
| } |
| .... |
| |
| === Uso del Client Rest de MicroProfile en TomEE |
| |
| La clase `BookResourceTest.java` muestra lo fácil que es utilizar el enfoque |
| con seguridad de tipos (type-safe) proporcionado por el Client Rest de MicroProfile |
| para consumir un recurso JAX-RS existente. |
| |
| .... |
| package org.superbiz.rest; |
| |
| import org.eclipse.microprofile.rest.client.inject.RestClient; |
| import org.jboss.arquillian.container.test.api.Deployment; |
| import org.jboss.arquillian.junit.Arquillian; |
| import org.jboss.shrinkwrap.api.ShrinkWrap; |
| import org.jboss.shrinkwrap.api.asset.StringAsset; |
| import org.jboss.shrinkwrap.api.spec.WebArchive; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import javax.inject.Inject; |
| |
| import static org.junit.Assert.assertTrue; |
| |
| @RunWith(Arquillian.class) |
| public class BookResourceTest { |
| |
| @Deployment() |
| public static WebArchive createDeployment() { |
| final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war") |
| .addClass(BookResource.class) |
| .addClass(Book.class) |
| .addClass(BookBean.class) |
| .addClass(BookResourceClient.class) |
| .addClass(ApplicationConfig.class) |
| .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml") |
| .addAsResource("META-INF/microprofile-config.properties"); |
| return webArchive; |
| } |
| |
| |
| @Inject |
| @RestClient |
| private BookResourceClient bookResourceClient; |
| |
| @Test() |
| public void testServerStatus(){ |
| bookResourceClient.addBook(new Book(1,"TomEE Book")); |
| } |
| |
| @Test |
| public void testBookResource(){ |
| bookResourceClient.addBook(new Book(1, "TomEE and MicroProfile Adventures")); |
| bookResourceClient.addBook(new Book(2, "Top 10 Tomee Configuraiton Tips")); |
| |
| |
| assertTrue(bookResourceClient.getListOfBooks().size() == 2); |
| assertTrue(bookResourceClient.getBook(1).getName().equalsIgnoreCase("TomEE and MicroProfile Adventures")); |
| |
| bookResourceClient.deleteBook(1); |
| assertTrue(bookResourceClient.getListOfBooks().size() == 1); |
| assertTrue(bookResourceClient.getBook(2).getName().equalsIgnoreCase("Top 10 Tomee Configuraiton Tips")); |
| |
| bookResourceClient.updateBook(new Book(2, "Top 3 Tomee Configuraiton Tips")); |
| assertTrue(bookResourceClient.getListOfBooks().size() == 1); |
| assertTrue(bookResourceClient.getBook(2).getName().equalsIgnoreCase("Top 3 Tomee Configuraiton Tips")); |
| } |
| |
| } |
| .... |
| |
| === Acerca de la arquitectura de prueba |
| |
| Los casos de prueba de este proyecto se construyen utilizando Arquillian |
| y TomEE Remote. La configuración del arquillianse se puede encontrar en |
| `src/test/resources/arquillian.xml` |