package org.jboss.resteasy.test.providers.jettison;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.logging.Logger;
import org.jboss.resteasy.annotations.providers.jaxb.json.Mapped;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
import org.jboss.resteasy.plugins.providers.jaxb.json.BadgerContext;
import org.jboss.resteasy.plugins.providers.jaxb.json.JettisonMappedContext;
import org.jboss.resteasy.test.providers.jettison.resource.Book;
import org.jboss.resteasy.test.providers.jettison.resource.BookStoreClient;
import org.jboss.resteasy.test.providers.jettison.resource.BookStoreResource;
import org.jboss.resteasy.utils.PortProviderUtil;
import org.jboss.resteasy.utils.TestUtil;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
/**
* @tpSubChapter Jettison provider
* @tpChapter Integration tests
* @tpSince RESTEasy 3.0.16
*/
@RunWith(Arquillian.class)
@RunAsClient
public class JaxbSmokeTest {
private final Logger log = Logger.getLogger(JaxbSmokeTest.class.getName());
private static ResteasyClient client;
@Deployment
public static Archive<?> deploy() {
WebArchive war = TestUtil.prepareArchive(JaxbSmokeTest.class.getSimpleName());
war.addClass(Book.class);
return TestUtil.finishContainerPrepare(war, null, BookStoreResource.class);
}
@Before
public void before() throws Exception {
client = new ResteasyClientBuilder().build();
}
@After
public void after() throws Exception {
client.close();
client = null;
}
private String generateURL(String path) {
return PortProviderUtil.generateURL(path, JaxbSmokeTest.class.getSimpleName());
}
@Test
public void testNoDefaultsResource() {
ResteasyWebTarget target = client.target(generateURL(""));
BookStoreClient bookStoreClient = target.proxy(BookStoreClient.class);
Book book = bookStoreClient.getBookByISBN("596529260");
Assert.assertNotNull(book);
Assert.assertEquals("RESTful Web Services", book.getTitle());
book = new Book("Bill Burke", "666", "EJB 3.0");
bookStoreClient.addBook(book);
book = new Book("Bill Burke", "3434", "JBoss Workbook");
bookStoreClient.addBookJson(book);
book = bookStoreClient.getBookByISBN("666");
Assert.assertEquals("Bill Burke", book.getAuthor());
Assert.assertEquals("EJB 3.0", book.getTitle());
book = bookStoreClient.getBookByISBNJson("3434");
Assert.assertEquals("Bill Burke", book.getAuthor());
Assert.assertEquals("JBoss Workbook", book.getTitle());
}
@XmlRootElement
public static class Library {
private String name;
private List<Book> books;
@XmlAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "registered-books")
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
@Test
@Mapped(attributesAsElements = {"title"})
public void testJSON() throws Exception {
{
Mapped mapped = JaxbSmokeTest.class.getMethod("testJSON").getAnnotation(Mapped.class);
JettisonMappedContext context = new JettisonMappedContext(mapped, Book.class);
StringWriter writer = new StringWriter();
context.createMarshaller().marshal(new Book("Bill Burke", "666", "EJB 3.0"), writer);
String val = writer.toString();
log.info("Mapped: " + val);
// test Mapped attributeAsElement
Assert.assertTrue(!val.contains("@title"));
}
{
BadgerContext context = new BadgerContext(Book.class);
StringWriter writer = new StringWriter();
context.createMarshaller().marshal(new Book("Bill Burke", "666", "EJB 3.0"), writer);
log.info("Badger: " + writer.toString());
}
Library library = new Library();
List<Book> books = new ArrayList<>();
books.add(new Book("Bill Burke", "555", "JBoss Workbook"));
books.add(new Book("Bill Burke", "666", "EJB 3.0"));
library.setName("BPL");
library.setBooks(books);
{
BadgerContext context = new BadgerContext(Library.class);
StringWriter writer = new StringWriter();
context.createMarshaller().marshal(library, writer);
String s = writer.toString();
log.info("Badger: " + s);
Library lib = (Library) context.createUnmarshaller().unmarshal(new StringReader(s));
Assert.assertEquals(lib.getName(), "BPL");
Assert.assertEquals(lib.getBooks().size(), 2);
}
{
JettisonMappedContext context = new JettisonMappedContext(Library.class);
StringWriter writer = new StringWriter();
context.createMarshaller().marshal(library, writer);
String s = writer.toString();
log.info("Mapped: " + s);
Library lib = (Library) context.createUnmarshaller().unmarshal(new StringReader(s));
Assert.assertEquals(lib.getName(), "BPL");
Assert.assertEquals(lib.getBooks().size(), 2);
}
}
}