我对我正在使用的REST客户端有疑问,但首先我将解释该服务:
我有一个界面:
public interface IEntityResource<T extends BaseEntity>{
public List<T> findAll();
}
我有一个REST提供程序来执行此操作:
@Path("system")
public class SystemResource extends AbstractEntityResource<PITSystem>{
// Some stuff here
}
我的AbstractEntityResource执行此操作:
@Override
public List<T> findAll() {
L.error("Returning all");
for(T entity : getEntityDao().findAll()){
L.error("Returning class: " + entity.getClass());
}
return getEntityDao().findAll();
}
所有这些都很有效,并且有100%的测试覆盖率。当我部署它时,我可以添加实体没问题。
我的客户端看起来像这样:
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
interface PITSystemInterface extends IEntityResource<PITSystem>{}
public class ProxyClientExample {
public static void main(String ar[]) throws Exception{
ProxyClientExample pce = new ProxyClientExample();
ResteasyClient client = new ResteasyClientBuilder().build();
WebTarget target = client.target("http://mike:mike@localhost:8080/pit-beta1/rest/v1/system");
ResteasyWebTarget rtarget = (ResteasyWebTarget) target;
PITSystemInterface simple = rtarget.proxy(PITSystemInterface.class);
PITSystem s = new PITSystem();
s.setName("Test " + new java.util.Date().getTime());
s.setDescription("Created: " + new java.util.Date().getTime());
simple.create(s);
System.err.println(simple.getStatus());
for(PITSystem system : simple.findAll()){
System.err.println(system);
}
}
}
问题是底部的for循环给了我一个例外:
Exception in thread "main" java.lang.ClassCastException: BaseEntity cannot be cast to PITSystem
如果我将for循环更改为BaseEntity
则可行。我的服务器日志消息说:
返回课程:类PITSystem
返回课程:类PITSystem
返回课程:类PITSystem
出于某种原因,RESTEasy客户端似乎认为它是BaseEntity,但事实并非如此。有什么想法吗?