Skip to content

Commit

Permalink
[RESTEASY-1432] - Interface with generic type does not work with clie…
Browse files Browse the repository at this point in the history
…nt proxy (#1968)
  • Loading branch information
MMarus authored and ronsigal committed May 7, 2019
1 parent 6490fec commit 78b4ec0
Show file tree
Hide file tree
Showing 10 changed files with 174 additions and 7 deletions.
Expand Up @@ -6,12 +6,14 @@
import org.jboss.resteasy.client.jaxrs.i18n.Messages;
import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation;
import org.jboss.resteasy.client.jaxrs.internal.ClientResponse;
import org.jboss.resteasy.spi.util.Types;

import javax.ws.rs.core.GenericType;

import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;

/**
Expand Down Expand Up @@ -48,13 +50,13 @@ public Object extractEntity(ClientContext context, Object... args)
{
throw new RuntimeException(Messages.MESSAGES.noTypeInformation());
}
Type type = Types.resolveTypeVariables(context.getInvocation().getClientInvoker().getDeclaring(),
method.getGenericReturnType());
GenericType gt = null;
if (method.getGenericReturnType() != null && !(method.getGenericReturnType() instanceof TypeVariable))
{
gt = new GenericType(method.getGenericReturnType());
}
else
{

if(!(type instanceof TypeVariable)) {
gt = new GenericType(type);
} else {
gt = new GenericType(method.getReturnType());
}
Object obj = ClientInvocation.extractResult(gt, response, method.getAnnotations());
Expand Down
Expand Up @@ -6,6 +6,12 @@
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import javax.ws.rs.client.ClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
import org.jboss.resteasy.test.client.proxy.resource.GenericEntities.EntityExtendingBaseEntity;
import org.jboss.resteasy.test.client.proxy.resource.GenericEntities.GenericEntityExtendingBaseEntityProxy;
import org.jboss.resteasy.test.client.proxy.resource.GenericEntities.GenericEntityExtendingBaseEntityResource;
import org.jboss.resteasy.test.client.proxy.resource.GenericEntities.MultipleGenericEntities;
import org.jboss.resteasy.test.client.proxy.resource.GenericEntities.MultipleGenericEntitiesProxy;
import org.jboss.resteasy.test.client.proxy.resource.GenericEntities.MultipleGenericEntitiesResource;
import org.jboss.resteasy.test.client.proxy.resource.GenericProxyBase;
import org.jboss.resteasy.test.client.proxy.resource.GenericProxySpecificProxy;
import org.jboss.resteasy.test.client.proxy.resource.GenericProxyResource;
Expand All @@ -22,6 +28,11 @@

import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import java.util.HashMap;
import java.util.List;

import static org.jboss.resteasy.test.client.proxy.resource.GenericEntities.GenericEntityExtendingBaseEntityResource.FIRST_NAME;
import static org.jboss.resteasy.test.client.proxy.resource.GenericEntities.GenericEntityExtendingBaseEntityResource.LAST_NAME;

/**
* @tpSubChapter Resteasy-client
Expand All @@ -48,7 +59,10 @@ public static void after() throws Exception {
public static Archive<?> deployUriInfoSimpleResource() {
WebArchive war = TestUtil.prepareArchive(GenericProxyTest.class.getSimpleName());
war.addClasses(GenericProxyBase.class, GenericProxySpecificProxy.class);
return TestUtil.finishContainerPrepare(war, null, GenericProxyResource.class);
war.addPackage(MultipleGenericEntities.class.getPackage());
return TestUtil.finishContainerPrepare(war, null, GenericProxyResource.class,
GenericEntityExtendingBaseEntityResource.class,
MultipleGenericEntitiesResource.class);
}

private static String generateBaseUrl() {
Expand Down Expand Up @@ -84,4 +98,28 @@ public void testEchoNoProxy() {

response.close();
}

/**
* @tpTestDetails Test generic proxy in client extending another interface. Test for RESTEASY-1432.
* @tpSince RESTEasy 3.7.0
*/
@Test
public void testInterfaceWithGenericTypeWithClientProxy() {
GenericEntityExtendingBaseEntityProxy proxy = client.target(generateBaseUrl()).proxy(GenericEntityExtendingBaseEntityProxy.class);
EntityExtendingBaseEntity entity;

entity = proxy.findOne();
Assert.assertEquals(entity.getLastName(), LAST_NAME);

List<EntityExtendingBaseEntity> entities = proxy.findAll();
Assert.assertEquals(entities.get(0).getLastName(), LAST_NAME);


MultipleGenericEntitiesProxy proxy1 = client.target(generateBaseUrl()).proxy(MultipleGenericEntitiesProxy.class);

HashMap<String, EntityExtendingBaseEntity> hashMap = proxy1.findHashMap();
entity = hashMap.get(FIRST_NAME);
Assert.assertEquals(entity.getLastName(), LAST_NAME);
}

}
@@ -0,0 +1,13 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

public class BaseEntity {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
@@ -0,0 +1,20 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

public class EntityExtendingBaseEntity extends BaseEntity {
private String lastName;

public EntityExtendingBaseEntity() {}

public EntityExtendingBaseEntity(final String name, final String lastName) {
super.setName(name);
this.lastName = lastName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
}
@@ -0,0 +1,22 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.List;

@Path("/")
public interface GenericEntityExtendingBaseEntity<T extends BaseEntity> {

@GET
@Path("one")
@Produces(MediaType.APPLICATION_JSON)
T findOne();

@GET
@Path("all")
@Produces(MediaType.APPLICATION_JSON)
List<T> findAll();

}
@@ -0,0 +1,6 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

public interface GenericEntityExtendingBaseEntityProxy extends GenericEntityExtendingBaseEntity<EntityExtendingBaseEntity> {

}

@@ -0,0 +1,28 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

import java.util.ArrayList;
import java.util.List;

public class GenericEntityExtendingBaseEntityResource implements GenericEntityExtendingBaseEntity<EntityExtendingBaseEntity> {
public static final String FIRST_NAME = "FirstName";
public static final String LAST_NAME = "LastName";

public static List<EntityExtendingBaseEntity> generateEntities(int count) {
List<EntityExtendingBaseEntity> entityExtendingBaseEntities = new ArrayList<>();
for(int i = 0; i < count; i++) {
entityExtendingBaseEntities.add(new EntityExtendingBaseEntity(FIRST_NAME, LAST_NAME));
}
return entityExtendingBaseEntities;
}

@Override
public List<EntityExtendingBaseEntity> findAll() {
return generateEntities(2);
}

@Override
public EntityExtendingBaseEntity findOne() {
return new EntityExtendingBaseEntity(FIRST_NAME, LAST_NAME);
}

}
@@ -0,0 +1,17 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.HashMap;

@Path("")
public interface MultipleGenericEntities<K, V> {

@GET
@Path("hashMap")
@Produces(MediaType.APPLICATION_JSON)
HashMap<K,V> findHashMap();

}
@@ -0,0 +1,5 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

public interface MultipleGenericEntitiesProxy extends MultipleGenericEntities<String, EntityExtendingBaseEntity> {

}
@@ -0,0 +1,16 @@
package org.jboss.resteasy.test.client.proxy.resource.GenericEntities;

import java.util.HashMap;

import static org.jboss.resteasy.test.client.proxy.resource.GenericEntities.GenericEntityExtendingBaseEntityResource.FIRST_NAME;
import static org.jboss.resteasy.test.client.proxy.resource.GenericEntities.GenericEntityExtendingBaseEntityResource.LAST_NAME;

public class MultipleGenericEntitiesResource implements MultipleGenericEntities<String, EntityExtendingBaseEntity> {

@Override
public HashMap<String, EntityExtendingBaseEntity> findHashMap() {
HashMap<String, EntityExtendingBaseEntity> res = new HashMap<>();
res.put(FIRST_NAME, new EntityExtendingBaseEntity(FIRST_NAME, LAST_NAME));
return res;
}
}

0 comments on commit 78b4ec0

Please sign in to comment.