Skip to content

Commit

Permalink
RESTEASY1246
Browse files Browse the repository at this point in the history
  • Loading branch information
liweinan committed Jun 13, 2016
1 parent 8bfc117 commit 043d608
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 49 deletions.
Expand Up @@ -4,31 +4,41 @@
import org.jboss.resteasy.plugins.server.sun.http.HttpContextBuilder; import org.jboss.resteasy.plugins.server.sun.http.HttpContextBuilder;
import org.jboss.resteasy.test.TestPortProvider; import org.jboss.resteasy.test.TestPortProvider;
import org.jboss.resteasy.test.nextgen.wadl.resources.BasicResource; import org.jboss.resteasy.test.nextgen.wadl.resources.BasicResource;
import org.jboss.resteasy.test.nextgen.wadl.resources.issues.RESTEASY1246;
import org.jboss.resteasy.wadl.ResteasyWadlDefaultResource; import org.jboss.resteasy.wadl.ResteasyWadlDefaultResource;
import org.jboss.resteasy.wadl.ResteasyWadlGenerator; import org.jboss.resteasy.wadl.ResteasyWadlGenerator;
import org.jboss.resteasy.wadl.jaxb.Resource;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;


import javax.ws.rs.client.Client; import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

/** /**
* @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a> * @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a>
*/ */
public class TestAllResources { public class TestAllWADLResources {
private static HttpServer httpServer; private static HttpServer httpServer;
private static HttpContextBuilder contextBuilder; private static HttpContextBuilder contextBuilder;
private static int port = TestPortProvider.getPort() + 1; private static int port = TestPortProvider.getPort() + 1;
private static Client client = ClientBuilder.newClient(); private static Client client = ClientBuilder.newClient();
String url = "http://127.0.0.1:${port}/application.xml".replaceAll("\\$\\{port\\}",
Integer.valueOf(port).toString());


@BeforeClass @BeforeClass
public static void before() throws Exception { public static void before() throws Exception {
httpServer = HttpServer.create(new InetSocketAddress(port), 10); httpServer = HttpServer.create(new InetSocketAddress(port), 10);
contextBuilder = new HttpContextBuilder(); contextBuilder = new HttpContextBuilder();
contextBuilder.getDeployment().getActualResourceClasses().add(BasicResource.class); contextBuilder.getDeployment().getActualResourceClasses().add(BasicResource.class);
contextBuilder.getDeployment().getActualResourceClasses().add(ResteasyWadlDefaultResource.class); contextBuilder.getDeployment().getActualResourceClasses().add(ResteasyWadlDefaultResource.class);
contextBuilder.getDeployment().getActualResourceClasses().add(RESTEASY1246.class);
contextBuilder.bind(httpServer); contextBuilder.bind(httpServer);
ResteasyWadlDefaultResource.getServices().put("/", ResteasyWadlGenerator.generateServiceRegistry(contextBuilder.getDeployment())); ResteasyWadlDefaultResource.getServices().put("/", ResteasyWadlGenerator.generateServiceRegistry(contextBuilder.getDeployment()));
httpServer.start(); httpServer.start();
Expand All @@ -49,7 +59,18 @@ public static void after() throws Exception {


@Test @Test
public void testBasicResource() throws Exception { public void testBasicResource() throws Exception {
BasicTest basicTest = new BasicTest(port, client); TestBase basicTest = new TestBase(port, client);
basicTest.testBasicResource(); basicTest.testAll();

}

@Test
public void testResteasy1246() throws Exception {
WebTarget target = client.target(url);
Response response = target.request().get();
// get Application
org.jboss.resteasy.wadl.jaxb.Application application = response.readEntity(org.jboss.resteasy.wadl.jaxb.Application.class);
org.jboss.resteasy.wadl.jaxb.Method multipleProvides = TestBase.findMethodById(TestBase.findResourceByName(application, "/issues/1246"), "multipleProvides");
assertEquals("Multiple representations should be present", 2, multipleProvides.getResponse().get(0).getRepresentation().size());
} }
} }
Expand Up @@ -17,17 +17,17 @@
/** /**
* @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a> * @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a>
*/ */
public class BasicTest { public class TestBase {


private int port; private int port;
private Client client; private Client client;


public BasicTest(int port, Client client) { public TestBase(int port, Client client) {
this.port = port; this.port = port;
this.client = client; this.client = client;
} }


public void testBasicResource() throws Exception { public void testAll() throws Exception {
String url = "http://127.0.0.1:${port}/application.xml".replaceAll("\\$\\{port\\}", String url = "http://127.0.0.1:${port}/application.xml".replaceAll("\\$\\{port\\}",
Integer.valueOf(port).toString()); Integer.valueOf(port).toString());
WebTarget target = client.target(url); WebTarget target = client.target(url);
Expand Down Expand Up @@ -100,7 +100,7 @@ public void testBasicResource() throws Exception {


} }


private org.jboss.resteasy.wadl.jaxb.Method findMethodById(org.jboss.resteasy.wadl.jaxb.Resource resource, String id) { public static org.jboss.resteasy.wadl.jaxb.Method findMethodById(org.jboss.resteasy.wadl.jaxb.Resource resource, String id) {
for (Object methodOrResource : resource.getMethodOrResource()) { for (Object methodOrResource : resource.getMethodOrResource()) {
if (methodOrResource.getClass().equals(org.jboss.resteasy.wadl.jaxb.Method.class)) if (methodOrResource.getClass().equals(org.jboss.resteasy.wadl.jaxb.Method.class))
if (((org.jboss.resteasy.wadl.jaxb.Method) methodOrResource).getId().equals(id)) if (((org.jboss.resteasy.wadl.jaxb.Method) methodOrResource).getId().equals(id))
Expand All @@ -109,7 +109,7 @@ private org.jboss.resteasy.wadl.jaxb.Method findMethodById(org.jboss.resteasy.wa
return null; return null;
} }


private org.jboss.resteasy.wadl.jaxb.Resource findResourceByName(Object target, String resourceName) { public static org.jboss.resteasy.wadl.jaxb.Resource findResourceByName(Object target, String resourceName) {
if (target.getClass().equals(org.jboss.resteasy.wadl.jaxb.Application.class)) { if (target.getClass().equals(org.jboss.resteasy.wadl.jaxb.Application.class)) {
for (org.jboss.resteasy.wadl.jaxb.Resource resource : ((org.jboss.resteasy.wadl.jaxb.Application) target).getResources().get(0).getResource()) { for (org.jboss.resteasy.wadl.jaxb.Resource resource : ((org.jboss.resteasy.wadl.jaxb.Application) target).getResources().get(0).getResource()) {
if (resource.getPath().equals(resourceName)) { if (resource.getPath().equals(resourceName)) {
Expand All @@ -126,7 +126,7 @@ private org.jboss.resteasy.wadl.jaxb.Resource findResourceByName(Object target,
return null; return null;
} }


class ExistenceVerifier { public class ExistenceVerifier {
private Map<String, Boolean> data = new HashMap<>(); private Map<String, Boolean> data = new HashMap<>();


public void createVerifier(String... keys) { public void createVerifier(String... keys) {
Expand Down
Expand Up @@ -53,7 +53,7 @@ public static void end() throws Exception {


@Test @Test
public void test() throws Exception { public void test() throws Exception {
BasicTest basicTest = new BasicTest(port, client); TestBase basicTest = new TestBase(port, client);
basicTest.testBasicResource(); basicTest.testAll();
} }
} }
@@ -0,0 +1,21 @@
package org.jboss.resteasy.test.nextgen.wadl.resources.issues;

import org.jboss.resteasy.test.nextgen.wadl.resources.jaxb.Customer;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

/**
* Created by weli on 6/13/16.
*/
@Path("/issues/1246")
public class RESTEASY1246 {

@GET
@Produces({"application/xml", "application/json"})
public String multipleProvides() {
return null;
}
}
Expand Up @@ -11,10 +11,7 @@
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.*;
import java.util.Collection;
import java.util.List;
import java.util.Map;


/** /**
* @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a> * @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a>
Expand All @@ -24,8 +21,8 @@ public class ResteasyWadlMethodMetaData {
private ResourceMethodInvoker resourceInvoker; private ResourceMethodInvoker resourceInvoker;
private Method method; private Method method;
private Class<?> klass; private Class<?> klass;
private String produces; private List<String> produces;
private String consumesMIMEType; private List<String> consumesMIMETypes;
private String uri; private String uri;
private String functionName; private String functionName;
private List<ResteasyWadlMethodParamMetaData> parameters = new ArrayList<ResteasyWadlMethodParamMetaData>(); private List<ResteasyWadlMethodParamMetaData> parameters = new ArrayList<ResteasyWadlMethodParamMetaData>();
Expand Down Expand Up @@ -89,10 +86,10 @@ public ResteasyWadlMethodMetaData(ResteasyWadlServiceRegistry serviceRegistry, R
} }
} }
// this must be after we scan the params in case of @Form // this must be after we scan the params in case of @Form
this.consumesMIMEType = getConsumes(consumes); this.consumesMIMETypes = getConsumes(consumes);
if (wantsForm && !"application/x-www-form-urlencoded".equals(consumesMIMEType)) { if (wantsForm && !"application/x-www-form-urlencoded".equals(consumesMIMETypes)) {
LogMessages.LOGGER.warn(Messages.MESSAGES.overridingConsumesAnnotation()); LogMessages.LOGGER.warn(Messages.MESSAGES.overridingConsumesAnnotation());
this.consumesMIMEType = "application/x-www-form-urlencoded"; this.consumesMIMETypes = Arrays.asList("application/x-www-form-urlencoded");
} }
} }


Expand Down Expand Up @@ -171,29 +168,19 @@ private void addParameter(Class<?> type, Annotation[] annotations,
value)); value));
} }


private String getProduces(Produces produces) { private List<String> getProduces(Produces produces) {
if (produces == null) if (produces == null)
return null; return new ArrayList<>();
String[] value = produces.value(); String[] values = produces.value();
if (value.length == 0) return Arrays.asList(values);
return null;
if (value.length == 1)
return value[0];
StringBuffer buf = new StringBuffer();
for (String mime : produces.value()) {
if (buf.length() != 0)
buf.append(",");
buf.append(mime);
}
return buf.toString();
} }


private String getConsumes(Consumes consumes) { private List<String> getConsumes(Consumes consumes) {
if (consumes == null) if (consumes == null)
return "text/plain"; return Arrays.asList("text/plain");
if (consumes.value().length > 0) if (consumes.value().length > 0)
return consumes.value()[0]; return Arrays.asList(consumes.value());
return "text/plain"; return Arrays.asList("text/plain");
} }


public static String appendURIFragments(String... fragments) { public static String appendURIFragments(String... fragments) {
Expand Down Expand Up @@ -224,12 +211,12 @@ public Class<?> getKlass() {
return klass; return klass;
} }


public String getProduces() { public List<String> getProduces() {
return produces; return produces;
} }


public String getConsumesMIMEType() { public List<String> getConsumesMIMETypes() {
return consumesMIMEType; return consumesMIMETypes;
} }


public String getUri() { public String getUri() {
Expand Down
Expand Up @@ -114,16 +114,17 @@ private Response createResponse(ResteasyWadlServiceRegistry serviceRegistry, Res
MediaType mediaType = MediaType.WILDCARD_TYPE; MediaType mediaType = MediaType.WILDCARD_TYPE;


if (methodMetaData.getProduces() != null) { if (methodMetaData.getProduces() != null) {
mediaType = MediaType.valueOf(methodMetaData.getProduces()); for (String produces : methodMetaData.getProduces()) {
if (mediaType == null) { mediaType = MediaType.valueOf(produces);
mediaType = serviceRegistry.getProviderFactory().getConcreteMediaTypeFromMessageBodyWriters(_type, _generic, methodMetaData.getMethod().getAnnotations(), MediaType.WILDCARD_TYPE); if (mediaType == null) {
if (mediaType == null) mediaType = serviceRegistry.getProviderFactory().getConcreteMediaTypeFromMessageBodyWriters(_type, _generic, methodMetaData.getMethod().getAnnotations(), MediaType.WILDCARD_TYPE);
mediaType = MediaType.WILDCARD_TYPE; if (mediaType == null)
mediaType = MediaType.WILDCARD_TYPE;
}
Representation representation = createRepresentation(mediaType);
response.getRepresentation().add(representation);
} }
} }

Representation representation = createRepresentation(mediaType);
response.getRepresentation().add(representation);
return response; return response;
} }


Expand Down

0 comments on commit 043d608

Please sign in to comment.