用于通用

时间:2016-07-04 00:07:15

标签: java resteasy

我对我正在使用的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,但事实并非如此。有什么想法吗?

0 个答案:

没有答案