blob: abaea229a7eb7df254b2d4040d9812e98e9b72a0 [file] [log] [blame]
= 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.
[source,java]
----
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`:
+
[source,java]
----
<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`
+
[source,java]
----
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`
+
[source,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.
[source,java]
----
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`