Как поддержать Полиморфизм с прокси RESTeasy Client?

Предположим, что этот метод JAX-RS:

@GET
@Path("/{id}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Employee get(@PathParam("id") Long id) {
     return myService.findbyId(id);
}  

Со следующим POJO:

@XmlRootElement
public class Employee {
    Integer id;
    String name;  (getters;setters etc...)
}
@XmlRootElement(name="employee") 
public class SepcialEmployee extends Employee  {
     Skill skill;  (getters;setters etc...)
}
@XmlRootElement(name="employee")
public class Manager extends Employee {
    String headOffice;   (getters;setters etc...)
}  

Это прекрасно работает с интеграцией RESTeasy/spring-MVC. И если я вызываю метод из веб-браузера; Я могу получить следующий ответ для т.е.

<employee Id="17">
    <name>Marc</name>
    <headOffice>accounting</headOffice>
</employee>  

Но если я использую RESTeasy Client Framework для моего модульного теста. клиентский прокси сгенерировал unmarsalles только класс Employee Parent, и я потерял дочернюю информацию (Manager.headOffice или SepcialEmployee.Skill). Ниже выписка из моего теста Junit:

public class Test {

 @Path("empl")
 public interface EmpProxy {

     @GET
     @Produces(MediaType.APPLICATION_XML)
     Employee getEmployee(@ClientURI String uri);
 }

 private static TJWSEmbeddedSpringMVCServer server;
 public static final String host = "http://localhost:8080/";
 public static final int port = 8080;
 private static EmpProxy proxy;

 @BeforeClass
 public static void setup() {
     server = new TJWSEmbeddedSpringMVCServer("classpath:test-dispatcher-servlet.xml", port);
     server.start();
     RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
     ResteasyClient client = new ResteasyClientBuilder().build();
     ResteasyWebTarget target = client.target(host);
     proxy = target.proxy(EmpProxy.class);  
 }

 @Test
 public void test(){
    String url = host+"/empl/17";
    Employee employee = proxy.getEmployee(url);
    System.out.println(employee);
 }
}

0 ответов

Другие вопросы по тегам