diff --git a/providers/jettison/pom.xml b/providers/jettison/pom.xml index af89bdab085..51c6727caa9 100755 --- a/providers/jettison/pom.xml +++ b/providers/jettison/pom.xml @@ -37,12 +37,6 @@ org.jboss.spec.javax.servlet jboss-servlet-api_3.1_spec - - org.jboss.resteasy - tjws - ${project.version} - test - org.jboss.logging diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesAbstract.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesAbstract.java index 486bb530dec..9d97db08379 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesAbstract.java +++ b/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesAbstract.java @@ -1,14 +1,12 @@ package org.jboss.resteasy.test.i18n; -import java.util.Locale; - -import javax.ws.rs.core.MediaType; - -import org.junit.Assert; - import org.jboss.resteasy.plugins.providers.jaxb.json.i18n.Messages; +import org.junit.Assert; import org.junit.Test; +import javax.ws.rs.core.MediaType; +import java.util.Locale; + /** * * @author Ron Sigal diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesParent.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesParent.java index 15a53993963..f7ef600ab10 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesParent.java +++ b/providers/jettison/src/test/java/org/jboss/resteasy/test/i18n/TestMessagesParent.java @@ -1,12 +1,12 @@ package org.jboss.resteasy.test.i18n; +import org.junit.AfterClass; +import org.junit.BeforeClass; + import java.io.InputStream; import java.util.Locale; import java.util.Properties; -import org.junit.AfterClass; -import org.junit.BeforeClass; - /** * * @author Ron Sigal diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/Kunde.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/Kunde.java deleted file mode 100644 index e62e2c41d3e..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/Kunde.java +++ /dev/null @@ -1,219 +0,0 @@ -package org.jboss.resteasy.test.providers.jaxb.regression.resteasy175; - -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import java.text.DateFormat; -import java.text.ParseException; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Locale; - -import static java.util.Calendar.YEAR; -import static javax.xml.bind.annotation.XmlAccessType.FIELD; - - -@XmlRootElement -@XmlAccessorType(FIELD) -public class Kunde implements java.io.Serializable -{ - private static final long serialVersionUID = 8488010636885492122L; - - @XmlAttribute(name = "id", required = true) - protected Long id = null; - - @XmlElement(required = true) - protected String nachname = ""; - - protected String vorname = ""; - - @XmlAttribute(required = true) - protected String kundennr = "NnVn-001"; - - protected Date seit = null; - - @XmlTransient - protected int anzJahre; - - protected String details; - - @XmlTransient - protected Date erzeugt = null; - - @XmlTransient - protected Date aktualisiert = null; - - public Kunde() - { - super(); - } - - public Long getId() - { - return id; - } - - public void setId(Long id) - { - this.id = id; - } - - public String getNachname() - { - return nachname; - } - - public void setNachname(String nachname) - { - this.nachname = nachname; - } - - public String getVorname() - { - return vorname; - } - - public void setVorname(String vorname) - { - this.vorname = vorname; - } - - public Date getSeit() - { - return seit; - } - - public void setSeit(Date seit) - { - this.seit = seit; - } - - public int getAnzJahre() - { - final GregorianCalendar now = new GregorianCalendar(); - final GregorianCalendar seitCal = new GregorianCalendar(); - Date temp = seit; - if (temp == null) - temp = new Date(); - seitCal.setTime(temp); - - anzJahre = now.get(YEAR) - seitCal.get(YEAR); - - return anzJahre; - } - - // Parameter, z.B. DateFormat.MEDIUM, Locale.GERMANY - // MEDIUM fuer Format dd.MM.yyyy - public String getSeitAsString(int style, Locale locale) - { - Date temp = seit; - if (temp == null) - temp = new Date(); - final DateFormat f = DateFormat.getDateInstance(style, locale); - return f.format(temp); - } - - // Parameter, z.B. DateFormat.MEDIUM, Locale.GERMANY - // MEDIUM fuer Format dd.MM.yyyy - public void setSeit(String seit, int style, Locale locale) - { - final DateFormat f = DateFormat.getDateInstance(style, locale); - try - { - this.seit = f.parse(seit); - } - catch (ParseException e) - { - throw new RuntimeException(e); - } - } - - public String getDetails() - { - return details; - } - - public void setDetails(String details) - { - this.details = details; - } - - public Date getAktualisiert() - { - return aktualisiert; - } - - public void setAktualisiert(Date aktualisiert) - { - this.aktualisiert = aktualisiert; - } - - public Date getErzeugt() - { - return erzeugt; - } - - public void setErzeugt(Date erzeugt) - { - this.erzeugt = erzeugt; - } - - @Override - public String toString() - { - return "id=" + id + - ", nachname=" + nachname + ", vorname=" + vorname + - ", nr=" + kundennr + - ", seit=" + getSeitAsString(DateFormat.MEDIUM, Locale.GERMANY) + - ", anzJahre=" + getAnzJahre() + - ", erzeugt=" + erzeugt + - ", aktualisiert=" + aktualisiert; - } - - @Override - public int hashCode() - { - final int PRIME = 31; - int result = 1; - result = PRIME * result + ((nachname == null) ? 0 : nachname.hashCode()); - result = PRIME * result + ((seit == null) ? 0 : seit.hashCode()); - result = PRIME * result + ((vorname == null) ? 0 : vorname.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) - { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Kunde other = (Kunde) obj; - if (nachname == null) - { - if (other.nachname != null) - return false; - } - else if (!nachname.equals(other.nachname)) - return false; - if (seit == null) - { - if (other.seit != null) - return false; - } - else if (!seit.equals(other.seit)) - return false; - if (vorname == null) - { - if (other.vorname != null) - return false; - } - else if (!vorname.equals(other.vorname)) - return false; - return true; - } -} \ No newline at end of file diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundeList.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundeList.java deleted file mode 100644 index 617dc8943fe..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundeList.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.jboss.resteasy.test.providers.jaxb.regression.resteasy175; - -import javax.xml.bind.annotation.XmlElementRef; -import javax.xml.bind.annotation.XmlRootElement; -import java.util.Collection; - -@XmlRootElement(name = "kunden") -public class KundeList -{ - @XmlElementRef - public Collection kunden; - - public KundeList() - { - } - - public KundeList(Collection kunden) - { - this.kunden = kunden; - } -} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundeTest.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundeTest.java deleted file mode 100644 index 1ceccd001d7..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundeTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.jboss.resteasy.test.providers.jaxb.regression.resteasy175; - -import org.jboss.resteasy.test.BaseResourceTest; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import static org.jboss.resteasy.test.TestPortProvider.generateURL; - -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.core.Response; - -/** - * @author Bill Burke - * @version $Revision: 1 $ - */ -public class KundeTest extends BaseResourceTest -{ - @Before - public void setUp() throws Exception - { - dispatcher.getRegistry().addPerRequestResource(KundenverwaltungResource.class); - } - - @Test - public void testKunde() throws Exception - { - Response response = ClientBuilder.newClient().target(generateURL("/kundenverwaltung/kunden")).request().get(); - Assert.assertEquals(200, response.getStatus()); - response.close(); - } - -} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundenverwaltungResource.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundenverwaltungResource.java deleted file mode 100644 index b63212ef67e..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/KundenverwaltungResource.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.jboss.resteasy.test.providers.jaxb.regression.resteasy175; - -import org.jboss.resteasy.annotations.providers.jaxb.json.Mapped; -import org.jboss.resteasy.annotations.providers.jaxb.json.XmlNsMap; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import static javax.ws.rs.core.MediaType.APPLICATION_JSON; -import static javax.ws.rs.core.MediaType.APPLICATION_XML; - - -@Path("/kundenverwaltung") -@Produces(APPLICATION_XML) -@Consumes(APPLICATION_XML) -public class KundenverwaltungResource -{ - /** - * Beispiel mit JSON - * Funktioniert nicht mit RESTEASY: https://jira.jboss.org/jira/browse/RESTEASY-175 - */ - @GET - @Path("/kunden") - @Produces(APPLICATION_JSON) - @Mapped(namespaceMap = { - @XmlNsMap(namespace = "http://hska.de/kundenverwaltung", jsonName = "kunden") - }) - public KundeList findKundenJSON() - { - - final List kunden = new ArrayList(4); - for (int i = 0; i < 4; i++) - { - final Kunde k = new Kunde(); - k.setId(Long.valueOf(i)); - k.setNachname("Lastname" + i); - k.setSeit(new Date()); - - kunden.add(k); - } - - // Konvertierung in eigene List-Klasse wg. Wurzelelement - final KundeList kundeList = new KundeList(kunden); - - return kundeList; - } -} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/package-info.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/package-info.java deleted file mode 100644 index 9b5616901d2..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/providers/jaxb/regression/resteasy175/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * RESTful Web Service für Kunden mittels JAX-RS und JAXB. - */ -@javax.xml.bind.annotation.XmlSchema(namespace = "http://hska.de/kundenverwaltung") package org.jboss.resteasy.test.providers.jaxb.regression.resteasy175; diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/TestJAXB.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/TestJAXB.java deleted file mode 100644 index 314de23bb32..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/TestJAXB.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.jboss.resteasy.test.xml; - -import org.apache.http.client.HttpClient; -import org.apache.http.impl.client.DefaultHttpClient; -import org.jboss.resteasy.annotations.providers.jaxb.json.Mapped; -import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; -import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; -import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine; -import org.jboss.resteasy.core.Dispatcher; -import org.jboss.resteasy.plugins.providers.jaxb.json.BadgerContext; -import org.jboss.resteasy.plugins.providers.jaxb.json.JettisonMappedContext; -import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory; -import org.jboss.resteasy.test.EmbeddedContainer; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -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; -import java.util.concurrent.TimeUnit; - -import static org.jboss.resteasy.test.TestPortProvider.generateBaseUrl; - -/** - * Simple smoke test - * - * @author Bill Burke - * @version $Revision: 1 $ - */ -public class TestJAXB -{ - - private static Dispatcher dispatcher; - - @BeforeClass - public static void before() throws Exception - { - dispatcher = EmbeddedContainer.start().getDispatcher(); - } - - @AfterClass - public static void after() throws Exception - { - EmbeddedContainer.stop(); - } - - @Test - public void testNoDefaultsResource() throws Exception - { - POJOResourceFactory noDefaults = new POJOResourceFactory(BookStore.class); - dispatcher.getRegistry().addResourceFactory(noDefaults); - - HttpClient httpClient = new DefaultHttpClient(); - ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient); - ResteasyWebTarget target = new ResteasyClientBuilder().httpEngine(engine).build().target(generateBaseUrl()); - BookStoreClient client = target.proxy(BookStoreClient.class); - - Book book = client.getBookByISBN("596529260"); - Assert.assertNotNull(book); - Assert.assertEquals("RESTful Web Services", book.getTitle()); - - // TJWS does not support chunk encodings well so I need to kill kept - // alive connections - httpClient.getConnectionManager().closeIdleConnections(0, TimeUnit.MILLISECONDS); - - book = new Book("Bill Burke", "666", "EJB 3.0"); - client.addBook(book); - book = new Book("Bill Burke", "3434", "JBoss Workbook"); - client.addBookJson(book); - // TJWS does not support chunk encodings so I need to kill kept alive - // connections - httpClient.getConnectionManager().closeIdleConnections(0, TimeUnit.MILLISECONDS); - book = client.getBookByISBN("666"); - Assert.assertEquals("Bill Burke", book.getAuthor()); - book = client.getBookByISBNJson("3434"); - Assert.assertEquals("Bill Burke", book.getAuthor()); - Assert.assertEquals("JBoss Workbook", book.getTitle()); - httpClient.getConnectionManager().closeIdleConnections(0, TimeUnit.MILLISECONDS); - } - - @XmlRootElement - public static class Library - { - private String name; - private List books; - - @XmlAttribute - public String getName() - { - return name; - } - - public void setName(String name) - { - this.name = name; - } - - @XmlElement(name = "registered-books") - public List getBooks() - { - return books; - } - - public void setBooks(List books) - { - this.books = books; - } - } - - @Test - @Mapped(attributesAsElements = {"title"}) - public void testJSON() throws Exception - { - { - Mapped mapped = TestJAXB.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); - System.out.println("Mapped: "); - String val = writer.toString(); - System.out.println(val); - - // test Mapped attributeAsElement - Assert.assertTrue(val.indexOf("@title") == -1); - } - { - BadgerContext context = new BadgerContext(Book.class); - StringWriter writer = new StringWriter(); - context.createMarshaller().marshal(new Book("Bill Burke", "666", "EJB 3.0"), writer); - System.out.println("Badger: "); - System.out.println(writer.toString()); - } - Library library = new Library(); - ArrayList 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); - System.out.println("Badger: "); - String s = writer.toString(); - System.out.println(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); - System.out.println("Mapped: "); - String s = writer.toString(); - System.out.println(s); - Library lib = (Library) context.createUnmarshaller().unmarshal(new StringReader(s)); - Assert.assertEquals(lib.getName(), "BPL"); - Assert.assertEquals(lib.getBooks().size(), 2); - } - } - -} \ No newline at end of file diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/TestXXE.java b/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/TestXXE.java deleted file mode 100644 index 78b304a52ec..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/TestXXE.java +++ /dev/null @@ -1,484 +0,0 @@ -package org.jboss.resteasy.test.xxe; - -import org.junit.Assert; -import org.jboss.resteasy.core.Dispatcher; -import org.jboss.resteasy.spi.ResteasyDeployment; -import org.jboss.resteasy.test.EmbeddedContainer; -import org.junit.After; -import org.junit.Test; - -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation.Builder; -import javax.ws.rs.core.GenericEntity; -import javax.ws.rs.core.GenericType; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlRootElement; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.jboss.resteasy.test.TestPortProvider.generateURL; - -/** - * Unit tests for RESTEASY-647. - * - * Idea for test comes from Tim McCune: - * http://jersey.576304.n2.nabble.com/Jersey-vulnerable-to-XXE-attack-td3214584.html - * - * @author Ron Sigal - * @date Feb 25, 2012 - */ -public class TestXXE -{ - protected static ResteasyDeployment deployment; - protected static Dispatcher dispatcher; - protected static Client client; - - @Path("/") - public static class MovieResource - { - @POST - @Path("xmlRootElement") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(FavoriteMovieXmlRootElement movie) - { - System.out.println("MovieResource(xmlRootElment): title = " + movie.getTitle()); - return movie.getTitle(); - } - - @POST - @Path("xmlType") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(FavoriteMovieXmlType movie) - { - System.out.println("MovieResource(xmlType): title = " + movie.getTitle()); - return movie.getTitle(); - } - - @POST - @Path("JAXBElement") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(JAXBElement value) - { - System.out.println("MovieResource(JAXBElement): title = " + value.getValue().getTitle()); - return value.getValue().getTitle(); - } - - @POST - @Path("list") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(List list) - { - String titles = ""; - Iterator it = list.iterator(); - while (it.hasNext()) - { - String title = it.next().getTitle(); - System.out.println("MovieResource(list): title = " + title); - titles += title; - } - return titles; - } - - @POST - @Path("set") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(Set set) - { - String titles = ""; - Iterator it = set.iterator(); - while (it.hasNext()) - { - String title = it.next().getTitle(); - System.out.println("MovieResource(list): title = " + title); - titles += title; - } - return titles; - } - - @POST - @Path("array") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(FavoriteMovieXmlRootElement[] array) - { - String titles = ""; - for (int i = 0; i < array.length; i++) - { - String title = array[i].getTitle(); - System.out.println("MovieResource(list): title = " + title); - titles += title; - } - return titles; - } - - @POST - @Path("map") - @Consumes({"application/*+json","application/json"}) - public String addFavoriteMovie(Map map) - { - String titles = ""; - Iterator it = map.keySet().iterator(); - while (it.hasNext()) - { - String title = map.get(it.next()).getTitle(); - System.out.println("MovieResource(map): title = " + title); - titles += title; - } - return titles; - } - } - - @XmlRootElement - public static class FavoriteMovieXmlRootElement { - private String _title; - public String getTitle() { - return _title; - } - public void setTitle(String title) { - _title = title; - } - } - - public static void before(String expandEntityReferences) throws Exception - { - Hashtable initParams = new Hashtable(); - Hashtable contextParams = new Hashtable(); - contextParams.put("resteasy.document.expand.entity.references", expandEntityReferences); - deployment = EmbeddedContainer.start(initParams, contextParams); - dispatcher = deployment.getDispatcher(); - deployment.getRegistry().addPerRequestResource(MovieResource.class); - client = ClientBuilder.newClient(); - } - - public static void before() throws Exception - { - deployment = EmbeddedContainer.start(); - dispatcher = deployment.getDispatcher(); - deployment.getRegistry().addPerRequestResource(MovieResource.class); - client = ClientBuilder.newClient(); - } - - @After - public void after() throws Exception - { - client.close(); - EmbeddedContainer.stop(); - dispatcher = null; - deployment = null; - } - - @Test - public void testXmlRootElementDefault() throws Exception - { - before(); - FavoriteMovieXmlRootElement m = new FavoriteMovieXmlRootElement(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/xmlRootElement")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - System.out.println("Result: " + entity); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testXmlRootElementWithoutExpansion() throws Exception - { - before("false"); - FavoriteMovieXmlRootElement m = new FavoriteMovieXmlRootElement(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/xmlRootElement")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - System.out.println("Result: " + entity); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testXmlRootElementWithExpansion() throws Exception - { - before("true"); - FavoriteMovieXmlRootElement m = new FavoriteMovieXmlRootElement(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/xmlRootElement")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testXmlTypeDefault() throws Exception - { - before(); - FavoriteMovieXmlType m = new FavoriteMovieXmlType(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/xmlType")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - System.out.println("Result: " + entity); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testXmlTypeWithoutExpansion() throws Exception - { - before("false"); - FavoriteMovieXmlType m = new FavoriteMovieXmlType(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/xmlType")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - System.out.println("Result: " + entity); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testXmlTypeWithExpansion() throws Exception - { - before("true"); - FavoriteMovieXmlType m = new FavoriteMovieXmlType(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/xmlType")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - System.out.println("result: " + entity); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testJAXBElementDefault() throws Exception - { - before(); - FavoriteMovieXmlType m = new FavoriteMovieXmlType(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/JAXBElement")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testJAXBElementWithoutExpansion() throws Exception - { - before("false"); - FavoriteMovieXmlType m = new FavoriteMovieXmlType(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/JAXBElement")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testJAXBElementWithExpansion() throws Exception - { - before("true"); - FavoriteMovieXmlType m = new FavoriteMovieXmlType(); - m.setTitle("&xxe"); - Builder request = client.target(generateURL("/JAXBElement")).request(); - Response response = request.post(Entity.entity(m, "application/*+json")); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - @Test - public void testListDefault() throws Exception - { - doListTest(null); - } - - @Test - public void testListWithoutExpansion() throws Exception - { - doListTest(false); - } - - @Test - public void testListWithExpansion() throws Exception - { - doListTest(true); - } - - @Test - public void testSetDefault() throws Exception - { - doSetTest(null); - } - - @Test - public void testSetWithoutExpansion() throws Exception - { - doSetTest(false); - } - - @Test - public void testSetWithExpansion() throws Exception - { - doSetTest(true); - } - - @Test - public void testArrayDefault() throws Exception - { - doArrayTest(null); - } - - @Test - public void testArrayWithoutExpansion() throws Exception - { - doArrayTest(false); - } - - @Test - public void testArrayWithExpansion() throws Exception - { - doArrayTest(true); - } - - @Test - public void testMapDefault() throws Exception - { - doMapTest(null); - } - - @Test - public void testMapWithoutExpansion() throws Exception - { - doMapTest(false); - } - - @Test - public void testMapWithExpansion() throws Exception - { - doMapTest(true); - } - - void doListTest(Boolean expand) throws Exception - { - if (expand == null) - { - before(); - expand = false; - } - else - { - before(Boolean.toString(expand)); - } - List list = new ArrayList(); - FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); - m1.setTitle("&xxe"); - list.add(m1); - FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); - m2.setTitle("Le Regle de Jeu"); - list.add(m2); - Builder request = client.target(generateURL("/list")).request(); - GenericType type = new GenericType>() {}; - GenericEntity> genericEntity = new GenericEntity>(list, type.getType()); - Entity>> entity = Entity.entity(genericEntity, MediaType.APPLICATION_JSON_TYPE); - Response response = request.post(entity); - Assert.assertEquals(200, response.getStatus()); - String result = response.readEntity(String.class); - Assert.assertTrue(result.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - void doSetTest(Boolean expand) throws Exception - { - if (expand == null) - { - before(); - expand = false; - } - else - { - before(Boolean.toString(expand)); - } - Set set = new HashSet(); - FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); - m1.setTitle("&xxe"); - set.add(m1); - FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); - m2.setTitle("Le Regle de Jeu"); - set.add(m2); - GenericType type = new GenericType>() {}; - GenericEntity> genericEntity = new GenericEntity>(set, type.getType()); - Entity>> entity = Entity.entity(genericEntity, MediaType.APPLICATION_JSON_TYPE); - Builder request = client.target(generateURL("/set")).request(); - Response response = request.post(entity); - Assert.assertEquals(200, response.getStatus()); - String result = response.readEntity(String.class); - Assert.assertTrue(result.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - void doArrayTest(Boolean expand) throws Exception - { - if (expand == null) - { - before(); - expand = false; - } - else - { - before(Boolean.toString(expand)); - } - FavoriteMovieXmlRootElement[] array = new FavoriteMovieXmlRootElement[2]; - FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); - m1.setTitle("&xxe"); - array[0] = m1; - FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); - m2.setTitle("Le Regle de Jeu"); - array[1] = m2; - Builder request = client.target(generateURL("/array")).request(); - Response response = request.post(Entity.entity(array, MediaType.APPLICATION_JSON_TYPE)); - Assert.assertEquals(200, response.getStatus()); - String entity = response.readEntity(String.class); - Assert.assertTrue(entity.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } - - void doMapTest(Boolean expand) throws Exception - { - if (expand == null) - { - before(); - expand = false; - } - else - { - before(Boolean.toString(expand)); - } - Map map = new HashMap(); - FavoriteMovieXmlRootElement m = new FavoriteMovieXmlRootElement(); - m.setTitle("&xxe"); - map.put("american", m); - m = new FavoriteMovieXmlRootElement(); - m.setTitle("La Regle de Jeu"); - map.put("french", m); - GenericType type = new GenericType>() {}; - GenericEntity> genericEntity = new GenericEntity>(map, type.getType()); - Entity>> entity = Entity.entity(genericEntity, MediaType.APPLICATION_JSON_TYPE); - Builder request = client.target(generateURL("/map")).request(); - Response response = request.post(entity); - Assert.assertEquals(200, response.getStatus()); - String result = response.readEntity(String.class); - Assert.assertTrue(result.indexOf("xx:xx:xx:xx:xx:xx:xx") < 0); - } -} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/movie.xsd b/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/movie.xsd deleted file mode 100644 index 94268674917..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/movie.xsd +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/testpasswd b/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/testpasswd deleted file mode 100644 index a823614d73b..00000000000 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/testpasswd +++ /dev/null @@ -1 +0,0 @@ -xx:xx:xx:xx:xx:xx:xx \ No newline at end of file diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/JaxbSmokeTest.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/JaxbSmokeTest.java new file mode 100644 index 00000000000..d6424bee2c4 --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/JaxbSmokeTest.java @@ -0,0 +1,169 @@ +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 books; + + @XmlAttribute + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @XmlElement(name = "registered-books") + public List getBooks() { + return books; + } + + public void setBooks(List 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 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); + } + } + +} \ No newline at end of file diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/JettisonCustomerTest.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/JettisonCustomerTest.java new file mode 100644 index 00000000000..4045bd37511 --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/JettisonCustomerTest.java @@ -0,0 +1,70 @@ +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.resteasy.client.jaxrs.ResteasyClient; +import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; +import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; +import org.jboss.resteasy.test.providers.jettison.resource.JettisonCustomer; +import org.jboss.resteasy.test.providers.jettison.resource.JettisonCustomerList; +import org.jboss.resteasy.test.providers.jettison.resource.JettisonCustomerManagementResource; +import org.jboss.resteasy.util.HttpResponseCodes; +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.ws.rs.core.Response; + +/** + * @tpSubChapter Jettison provider + * @tpChapter Integration tests + * @tpTestCaseDetails Regression test for RESTEASY-175 + * @tpSince RESTEasy 3.0.16 + */ +@RunWith(Arquillian.class) +@RunAsClient +public class JettisonCustomerTest { + + private static ResteasyClient client; + + @Deployment + public static Archive deploy() { + WebArchive war = TestUtil.prepareArchive(JettisonCustomerTest.class.getSimpleName()); + war.addClasses(JettisonCustomer.class, JettisonCustomerList.class); + return TestUtil.finishContainerPrepare(war, null, JettisonCustomerManagementResource.class); + } + + @Before + public void before() { + client = new ResteasyClientBuilder().build(); + } + + @After + public void after() { + client.close(); + client = null; + } + + private String generateURL(String path) { + return PortProviderUtil.generateURL(path, JettisonCustomerTest.class.getSimpleName()); + } + + @Test + public void testCustomer() { + ResteasyWebTarget target = client.target(generateURL("/management/customers")); + Response response = target.request().get(); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + JettisonCustomerList customers = response.readEntity(JettisonCustomerList.class); + Assert.assertEquals(4, customers.size()); + + response.close(); + } +} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/Book.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/Book.java similarity index 54% rename from providers/jettison/src/test/java/org/jboss/resteasy/test/xml/Book.java rename to testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/Book.java index 43e7ff53297..b2a8ef6fb6b 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/Book.java +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/Book.java @@ -1,61 +1,48 @@ -package org.jboss.resteasy.test.xml; +package org.jboss.resteasy.test.providers.jettison.resource; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; -/** - * @author Bill Burke - * @version $Revision: 1 $ - */ @XmlRootElement(name = "book") -public class Book -{ +public class Book { private String author; private String ISBN; private String title; - public Book() - { + public Book() { } - public Book(String author, String ISBN, String title) - { + public Book(String author, String ISBN, String title) { this.author = author; this.ISBN = ISBN; this.title = title; } @XmlElement - public String getAuthor() - { + public String getAuthor() { return author; } - public void setAuthor(String author) - { + public void setAuthor(String author) { this.author = author; } @XmlElement - public String getISBN() - { + public String getISBN() { return ISBN; } - public void setISBN(String ISBN) - { + public void setISBN(String ISBN) { this.ISBN = ISBN; } @XmlAttribute - public String getTitle() - { + public String getTitle() { return title; } - public void setTitle(String title) - { + public void setTitle(String title) { this.title = title; } } diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/BookStoreClient.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/BookStoreClient.java similarity index 68% rename from providers/jettison/src/test/java/org/jboss/resteasy/test/xml/BookStoreClient.java rename to testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/BookStoreClient.java index 76b783c216a..b420b851f7e 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/BookStoreClient.java +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/BookStoreClient.java @@ -1,4 +1,4 @@ -package org.jboss.resteasy.test.xml; +package org.jboss.resteasy.test.providers.jettison.resource; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -8,40 +8,36 @@ import javax.ws.rs.Produces; import java.util.Collection; -/** - * @author Bill Burke - * @version $Revision: 1 $ - */ -@Path("bookstore") -public interface BookStoreClient -{ +@Path("/bookstore") +public interface BookStoreClient { + @GET - @Path("books/{isbn}") + @Path("/books/{isbn}") @Produces("text/xml") Book getBookByISBN(@PathParam("isbn") String isbn); @PUT - @Path("books") + @Path("/books") @Consumes("text/xml") void addBook(Book book); @GET - @Path("books") + @Path("/books") @Produces("text/xml") Collection getAllBooks(); @GET - @Path("books/{isbn}") + @Path("/books/{isbn}") @Produces("application/json") Book getBookByISBNJson(@PathParam("isbn") String isbn); @PUT - @Path("books") + @Path("/books") @Consumes("application/json") void addBookJson(Book book); @GET - @Path("books") + @Path("/books") @Produces("application/json") Collection getAllBooksJson(); } diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/BookStore.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/BookStoreResource.java similarity index 66% rename from providers/jettison/src/test/java/org/jboss/resteasy/test/xml/BookStore.java rename to testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/BookStoreResource.java index 4e962e770be..c3e2e0846f2 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xml/BookStore.java +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/BookStoreResource.java @@ -1,4 +1,4 @@ -package org.jboss.resteasy.test.xml; +package org.jboss.resteasy.test.providers.jettison.resource; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -10,42 +10,33 @@ import java.util.HashMap; import java.util.Map; -/** - * @author Bill Burke - * @version $Revision: 1 $ - */ -@Path("bookstore") -public class BookStore -{ - private static Map availableBooks = new HashMap(); - - static - { +@Path("/bookstore") +public class BookStoreResource { + private static Map availableBooks = new HashMap<>(); + + static { availableBooks.put("596529260", new Book("Leonard Richardson", "596529260", "RESTful Web Services")); availableBooks.put("3897217279", new Book("Sam Ruby", "3897217279", "Web Services mit REST")); } @GET - @Path("books/{isbn}") + @Path("/books/{isbn}") @Produces({"text/xml", "application/json"}) - public Book getBookByISBN(@PathParam("isbn") String isbn) - { + public Book getBookByISBN(@PathParam("isbn") String isbn) { return availableBooks.get(isbn); } @PUT - @Path("books") + @Path("/books") @Consumes({"text/xml", "application/json"}) - public void addBook(Book book) - { + public void addBook(Book book) { availableBooks.put(book.getISBN(), book); } @GET - @Path("books") + @Path("/books") @Produces({"text/xml", "application/json"}) - public Collection getAllBooks() - { + public Collection getAllBooks() { return availableBooks.values(); } diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomer.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomer.java new file mode 100644 index 00000000000..7f6bf703878 --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomer.java @@ -0,0 +1,188 @@ +package org.jboss.resteasy.test.providers.jettison.resource; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import java.io.Serializable; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Locale; + +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class JettisonCustomer implements Serializable { + + private static final long serialVersionUID = -6949084426046457758L; + + @XmlAttribute(name = "id", required = true) + protected Long id = null; + + @XmlAttribute(required = true) + protected String surname = ""; + + protected String firstName = ""; + + @XmlAttribute(required = true) + protected String customerNumber = "NnVn-001"; + + protected Date since = null; + + @XmlTransient + protected int activeYears; + + protected String details; + + @XmlTransient + protected Date generated = null; + + @XmlAttribute + protected Date updated = null; + + public JettisonCustomer() { + super(); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getCustomerNumber() { + return customerNumber; + } + + public void setCustomerNumber(String customerNumber) { + this.customerNumber = customerNumber; + } + + public Date getSince() { + return since; + } + + public void setSince(Date since) { + this.since = since; + } + + public int getActiveYears() { + final GregorianCalendar now = new GregorianCalendar(); + final GregorianCalendar sinceCal = new GregorianCalendar(); + + Date temp = since; + if (temp == null) { + temp = new Date(); + } + + sinceCal.setTime(temp); + activeYears = now.get(Calendar.YEAR) - sinceCal.get(Calendar.YEAR); + + return activeYears; + } + + public String getSinceAsString(int style, Locale locale) { + Date temp = since; + if (temp == null) { + temp = new Date(); + } + + final DateFormat df = DateFormat.getDateInstance(style, locale); + return df.format(temp); + } + + public void setSince(String since, int style, Locale locale) { + final DateFormat df = DateFormat.getDateInstance(style, locale); + + try { + this.since = df.parse(since); + } catch (ParseException pe) { + throw new RuntimeException(pe); + } + } + + public void setActiveYears(int activeYears) { + this.activeYears = activeYears; + } + + public String getDetails() { + return details; + } + + public void setDetails(String details) { + this.details = details; + } + + public Date getGenerated() { + return generated; + } + + public void setGenerated(Date generated) { + this.generated = generated; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } + + @Override + public String toString() { + return "JettisonCustomer{" + + "id=" + id + + ", surname='" + surname + '\'' + + ", firstName='" + firstName + '\'' + + ", customerNumber='" + customerNumber + '\'' + + ", since=" + getSinceAsString(DateFormat.MEDIUM, Locale.ENGLISH) + + ", activeYears=" + getActiveYears() + + ", details='" + details + '\'' + + ", generated=" + generated + + ", updated=" + updated + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + JettisonCustomer that = (JettisonCustomer) o; + + if (surname != null ? !surname.equals(that.surname) : that.surname != null) return false; + if (firstName != null ? !firstName.equals(that.firstName) : that.firstName != null) return false; + return since != null ? since.equals(that.since) : that.since == null; + + } + + @Override + public int hashCode() { + int result = surname != null ? surname.hashCode() : 0; + result = 31 * result + (firstName != null ? firstName.hashCode() : 0); + result = 31 * result + (since != null ? since.hashCode() : 0); + return result; + } +} diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomerList.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomerList.java new file mode 100644 index 00000000000..3f10e10790b --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomerList.java @@ -0,0 +1,23 @@ +package org.jboss.resteasy.test.providers.jettison.resource; + +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.Collection; + +@XmlRootElement(name = "customers") +public class JettisonCustomerList { + + @XmlElementRef + public Collection customers; + + public JettisonCustomerList() { + } + + public JettisonCustomerList(Collection customers) { + this.customers = customers; + } + + public int size() { + return customers.size(); + } +} diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomerManagementResource.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomerManagementResource.java new file mode 100644 index 00000000000..bb94db81e18 --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/providers/jettison/resource/JettisonCustomerManagementResource.java @@ -0,0 +1,42 @@ +package org.jboss.resteasy.test.providers.jettison.resource; + +import org.jboss.resteasy.annotations.providers.jaxb.json.Mapped; +import org.jboss.resteasy.annotations.providers.jaxb.json.XmlNsMap; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Path("/management") +@Produces(MediaType.APPLICATION_XML) +@Consumes(MediaType.APPLICATION_XML) +public class JettisonCustomerManagementResource { + + @GET + @Path("/customers") + @Produces(MediaType.APPLICATION_JSON) + @Mapped(namespaceMap = { + @XmlNsMap(namespace = "http://namespace.org/customermanagement", jsonName = "cusotmers") + }) + public JettisonCustomerList findCutomerJSON() { + + int capacity = 4; + final List customers = new ArrayList<>(capacity); + for (int i = 0; i < capacity; i++) { + final JettisonCustomer cust = new JettisonCustomer(); + cust.setId(Long.valueOf(i)); + cust.setSurname("Lastname" + i); + cust.setSince(new Date()); + + customers.add(cust); + } + + final JettisonCustomerList customerList = new JettisonCustomerList(customers); + return customerList; + } +} diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/XxeJettisonTest.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/XxeJettisonTest.java new file mode 100644 index 00000000000..844b1c8e1a5 --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/XxeJettisonTest.java @@ -0,0 +1,360 @@ +package org.jboss.resteasy.test.xxe; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.OperateOnDeployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.logging.Logger; +import org.jboss.resteasy.client.jaxrs.ResteasyClient; +import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; +import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters; +import org.jboss.resteasy.test.xxe.resource.xxeJettison.FavoriteMovie; +import org.jboss.resteasy.test.xxe.resource.xxeJettison.FavoriteMovieXmlRootElement; +import org.jboss.resteasy.test.xxe.resource.xxeJettison.FavoriteMovieXmlType; +import org.jboss.resteasy.test.xxe.resource.xxeJettison.JettisonMovieResource; +import org.jboss.resteasy.test.xxe.resource.xxeJettison.MovieMap; +import org.jboss.resteasy.test.xxe.resource.xxeJettison.ObjectFactory; +import org.jboss.resteasy.util.HttpResponseCodes; +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.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @tpSubChapter XXE + * @tpChapter Integration tests + * @tpTestCaseDetails Regression test for RESTEASY-647. + * @tpSince RESTEasy 3.0.16 + */ +@RunWith(Arquillian.class) +@RunAsClient +public class XxeJettisonTest { + + private static final Logger log = Logger.getLogger(XxeJettisonTest.class); + private static ResteasyClient client; + + private static final String DEFAULT = "default"; + private static final String FALSE = "false"; + private static final String TRUE = "true"; + + @Deployment(name = DEFAULT) + public static Archive deployDefault() { + return deploy(DEFAULT); + } + + @Deployment(name = FALSE) + public static Archive deployFalse() { + return deploy(FALSE); + } + + @Deployment(name = TRUE) + public static Archive deplouTrue() { + return deploy(TRUE); + } + + @Before + public void before() { + client = new ResteasyClientBuilder().build(); + } + + @After + public void after() { + client.close(); + client = null; + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testXmlRootElementDefault() { + doTestXmlRootElement(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testXmlRootElementWithoutExpansion() { + doTestXmlRootElement(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testXmlRootElementWithExpansion() { + doTestXmlRootElement(TRUE); + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testXmlTypeDefault() { + doTestXmlType(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testXmlTypeWithoutExpansion() { + doTestXmlType(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testXmlTypeWithExpansion() { + doTestXmlType(TRUE); + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testJAXBElementDefault() { + doTestJAXBElement(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testJAXBElementWithoutExpansion() { + doTestJAXBElement(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testJAXBElementWithExpansion() { + doTestJAXBElement(TRUE); + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testListDefault() { + doTestList(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testListWithoutExpansion() { + doTestList(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testListWithExpansion() { + doTestList(TRUE); + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testSetDefault() { + doTestSet(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testSetWithoutExpansion() { + doTestSet(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testSetWithExpansion() { + doTestSet(TRUE); + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testArrayDefault() { + doTestArray(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testArrayWithoutExpansion() { + doTestArray(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testArrayWithExpansion() { + doTestArray(TRUE); + } + + @Test + @OperateOnDeployment(DEFAULT) + public void testMapDefault() { + doTestMap(DEFAULT); + } + + @Test + @OperateOnDeployment(FALSE) + public void testMapWithoutExpansion() { + doTestMap(FALSE); + } + + @Test + @OperateOnDeployment(TRUE) + public void testMapWithExpansion() { + doTestMap(TRUE); + } + + private void doTestXmlRootElement(String deploymentName) { + FavoriteMovieXmlRootElement m = new FavoriteMovieXmlRootElement(); + m.setTitle("&xxe"); + + WebTarget target = client.target(PortProviderUtil.generateURL("/xmlRootElement", deploymentName)); + Response response = target.request().post(Entity.entity(m, "application/*+json")); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String entity = response.readEntity(String.class); + log.info("Result: " + entity); + Assert.assertTrue(!entity.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private void doTestXmlType(String deploymentName) { + FavoriteMovieXmlType m = new FavoriteMovieXmlType(); + m.setTitle("&xxe"); + + WebTarget target = client.target(PortProviderUtil.generateURL("/xmlType", deploymentName)); + Response response = target.request().post(Entity.entity(m, "application/*+json")); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String entity = response.readEntity(String.class); + log.info("Result: " + entity); + Assert.assertTrue(!entity.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private void doTestJAXBElement(String deploymentName) { + FavoriteMovieXmlType m = new FavoriteMovieXmlType(); + m.setTitle("&xxe"); + + WebTarget target = client.target(PortProviderUtil.generateURL("/JAXBElement", deploymentName)); + Response response = target.request().post(Entity.entity(m, "application/*+json")); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String entity = response.readEntity(String.class); + log.info("Result: " + entity); + Assert.assertTrue(!entity.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private void doTestList(String deploymentName) { + + List list = new ArrayList<>(); + FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); + m1.setTitle("&xxe"); + list.add(m1); + + FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); + m2.setTitle("Le Regle de Jeu"); + list.add(m2); + + WebTarget target = client.target(PortProviderUtil.generateURL("/list", deploymentName)); + + GenericType type = new GenericType>() { + }; + GenericEntity> genericEntity = new GenericEntity<>(list, type.getType()); + Entity>> entity = Entity.entity(genericEntity, "application/*+json"); + + Response response = target.request().post(entity); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String result = response.readEntity(String.class); + log.info("Result: " + result); + Assert.assertTrue(!result.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private void doTestSet(String deploymentName) { + + Set set = new HashSet<>(); + FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); + m1.setTitle("&xxe"); + set.add(m1); + + FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); + m2.setTitle("Le Regle de Jeu"); + set.add(m2); + + WebTarget target = client.target(PortProviderUtil.generateURL("/set", deploymentName)); + + GenericType type = new GenericType>() { + }; + GenericEntity> genericEntity = new GenericEntity<>(set, type.getType()); + Entity>> entity = Entity.entity(genericEntity, "application/*+json"); + + Response response = target.request().post(entity); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String result = response.readEntity(String.class); + log.info("Result: " + result); + Assert.assertTrue(!result.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private void doTestArray(String deploymentName) { + + FavoriteMovieXmlRootElement[] array = new FavoriteMovieXmlRootElement[2]; + FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); + m1.setTitle("&xxe"); + array[0] = m1; + + FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); + m2.setTitle("Le Regle de Jeu"); + array[1] = m2; + + WebTarget target = client.target(PortProviderUtil.generateURL("/array", deploymentName)); + Response response = target.request().post(Entity.entity(array, "application/*+json")); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String entity = response.readEntity(String.class); + log.info("Result: " + entity); + Assert.assertTrue(!entity.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private void doTestMap(String deploymentName) { + + Map map = new MovieMap<>(); + FavoriteMovieXmlRootElement m1 = new FavoriteMovieXmlRootElement(); + m1.setTitle("&xxe"); + map.put("american", m1); + + FavoriteMovieXmlRootElement m2 = new FavoriteMovieXmlRootElement(); + m2.setTitle("La Regle de Jeu"); + map.put("french", m2); + + WebTarget target = client.target(PortProviderUtil.generateURL("/map", deploymentName)); + + GenericType type = new GenericType>() { + }; + GenericEntity> genericEntity = new GenericEntity<>(map, type.getType()); + Entity>> entity = Entity.entity(genericEntity, MediaType.APPLICATION_JSON_TYPE); + + Response response = target.request().post(entity); + + Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus()); + String result = response.readEntity(String.class); + log.info("Result: " + result); + Assert.assertTrue(!result.contains("xx:xx:xx:xx:xx:xx:xx")); + } + + private static Archive deploy(String deploymentName) { + WebArchive war = TestUtil.prepareArchive(deploymentName); + war.addClasses(FavoriteMovie.class, FavoriteMovieXmlType.class, + FavoriteMovieXmlRootElement.class, ObjectFactory.class); + war.addAsManifestResource("jboss-deployment-structure-no-jackson.xml", "jboss-deployment-structure.xml"); + + Map contextParams = new Hashtable<>(); + if (!deploymentName.equals(DEFAULT)) { + contextParams.put(ResteasyContextParameters.RESTEASY_EXPAND_ENTITY_REFERENCES, deploymentName); + } + + return TestUtil.finishContainerPrepare(war, contextParams, JettisonMovieResource.class); + } +} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/FavoriteMovie.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovie.java similarity index 77% rename from providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/FavoriteMovie.java rename to testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovie.java index 113d7cab751..32fa72943eb 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/FavoriteMovie.java +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovie.java @@ -1,12 +1,4 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2012.01.31 at 11:07:18 PM EST -// - - -package org.jboss.resteasy.test.xxe; +package org.jboss.resteasy.test.xxe.resource.xxeJettison; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovieXmlRootElement.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovieXmlRootElement.java new file mode 100644 index 00000000000..7feccf59e3a --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovieXmlRootElement.java @@ -0,0 +1,20 @@ +package org.jboss.resteasy.test.xxe.resource.xxeJettison; + +import org.jboss.resteasy.annotations.providers.NoJackson; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +@NoJackson +public class FavoriteMovieXmlRootElement { + + private String _title; + + public String getTitle() { + return _title; + } + + public void setTitle(String title) { + _title = title; + } +} \ No newline at end of file diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/FavoriteMovieXmlType.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovieXmlType.java similarity index 78% rename from providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/FavoriteMovieXmlType.java rename to testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovieXmlType.java index d3c283cbc2b..b3a8a3bb769 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/FavoriteMovieXmlType.java +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/FavoriteMovieXmlType.java @@ -1,12 +1,6 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2012.02.01 at 02:48:20 PM EST -// +package org.jboss.resteasy.test.xxe.resource.xxeJettison; - -package org.jboss.resteasy.test.xxe; +import org.jboss.resteasy.annotations.providers.NoJackson; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -37,6 +31,7 @@ @XmlType(name = "favoriteMovieXmlType", propOrder = { "title" }) +@NoJackson public class FavoriteMovieXmlType { @XmlElement(required = true) diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/JettisonMovieResource.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/JettisonMovieResource.java new file mode 100644 index 00000000000..261ad28aac1 --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/JettisonMovieResource.java @@ -0,0 +1,105 @@ +package org.jboss.resteasy.test.xxe.resource.xxeJettison; + +import org.jboss.logging.Logger; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.xml.bind.JAXBElement; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Path("/") +public class JettisonMovieResource { + + private static final Logger log = Logger.getLogger(JettisonMovieResource.class); + + @POST + @Path("xmlRootElement") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(FavoriteMovieXmlRootElement movie) { + log.info("MovieResource(xmlRootElment): title = " + movie.getTitle()); + return movie.getTitle(); + } + + @POST + @Path("xmlType") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(FavoriteMovieXmlType movie) { + log.info("MovieResource(xmlType): title = " + movie.getTitle()); + return movie.getTitle(); + } + + @POST + @Path("JAXBElement") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(JAXBElement value) { + log.info("MovieResource(JAXBElement): title = " + value.getValue().getTitle()); + return value.getValue().getTitle(); + } + + @POST + @Path("list") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(List list) { + StringBuilder titles = new StringBuilder(); + + for (FavoriteMovieXmlRootElement movie : list) { + String title = movie.getTitle(); + log.info("MovieResource(list): title = " + title); + titles.append(title).append(", "); + } + + titles.setLength(titles.length() - 2); + return titles.toString(); + } + + @POST + @Path("set") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(Set set) { + StringBuilder titles = new StringBuilder(); + + for (FavoriteMovieXmlRootElement movie : set) { + String title = movie.getTitle(); + log.info("MovieResource(list): title = " + title); + titles.append(title).append(", "); + } + + titles.setLength(titles.length() - 2); + return titles.toString(); + } + + @POST + @Path("array") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(FavoriteMovieXmlRootElement[] array) { + StringBuilder titles = new StringBuilder(); + + for (FavoriteMovieXmlRootElement movie : array) { + String title = movie.getTitle(); + log.info("MovieResource(list): title = " + title); + titles.append(title).append(", "); + } + + titles.setLength(titles.length() - 2); + return titles.toString(); + } + + @POST + @Path("map") + @Consumes({"application/*+json", "application/json"}) + public String addFavoriteMovie(Map map) { + StringBuilder titles = new StringBuilder(); + + for (FavoriteMovieXmlRootElement movie : map.values()) { + String title = movie.getTitle(); + log.info("MovieResource(map): title = " + title); + titles.append(title).append(", "); + } + + titles.setLength(titles.length() - 2); + return titles.toString(); + } +} diff --git a/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/MovieMap.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/MovieMap.java new file mode 100644 index 00000000000..15441321e9d --- /dev/null +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/MovieMap.java @@ -0,0 +1,11 @@ +package org.jboss.resteasy.test.xxe.resource.xxeJettison; + +import org.jboss.resteasy.annotations.providers.NoJackson; + +import java.util.HashMap; + +@NoJackson +public class MovieMap extends HashMap { + private static final long serialVersionUID = -4947257779972800629L; + +} diff --git a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/ObjectFactory.java b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/ObjectFactory.java similarity index 80% rename from providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/ObjectFactory.java rename to testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/ObjectFactory.java index a8739c81930..102f5478686 100644 --- a/providers/jettison/src/test/java/org/jboss/resteasy/test/xxe/ObjectFactory.java +++ b/testsuite/integration-tests/src/test/java/org/jboss/resteasy/test/xxe/resource/xxeJettison/ObjectFactory.java @@ -1,12 +1,6 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2012.02.01 at 02:48:20 PM EST -// +package org.jboss.resteasy.test.xxe.resource.xxeJettison; - -package org.jboss.resteasy.test.xxe; +import org.jboss.resteasy.annotations.providers.NoJackson; import javax.xml.bind.JAXBElement; import javax.xml.bind.annotation.XmlElementDecl;