Как поддержать Полиморфизм с прокси 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);
}
}