方法未找到异常但方法确实存在并已实现

时间:2016-09-08 07:06:35

标签: java cdi weld

我遇到以下问题。

Caused by: java.lang.NoSuchMethodError :ResourcePreviewRepository.objectExists(Ljava/lang/String;)Z

在运行时和调试期间,这是类。

EntityRepository$GenericRepository$ResourcePreviewRepository$1323269030$Proxy$_$$_WeldClientProxy.objectExists(Unknown Source)

这是ResourcePreviewRepository的定义

public interface ResourcePreviewRepository extends GenericRepository<String>, EntityRepository<String, ResourceMetadata>

现在:objectExists方法存在于GenericRepository的具体实现中,名为AbstractJcrRepository。但是这个方法也在EntityRepository接口中定义(我希望这里存在问题)。

public interface GenericRepository<IdentifierType extends Serializable> {
   boolean objectExists(IdentifierType id) throws RepositoryException;
}


public class AbstractJcrRepository implements GenericRepository<String> {

   @Override
   public boolean objectExists(final String id) throws RepositoryException {
      ...
   }

}

请注意,当我向GenericRepository添加一个强制转换时,它确实有用,但显然我不想强制转换。

这是我应该得到的最后一个impl:

public class JcrResourcePreviewRepositoryImpl extends AbstractJcrEntityRepository<ResourceMetadata> implements ResourcePreviewRepository

但是虽然我确实有实现和方法可用但是我得到了这个错误。我该如何解决这个问题?

感谢您的帮助。

更新解决方案 我不会发布这是一个答案,但我不得不将缺少的方法添加到界面。虽然生产者返回的impl类确实实现了这个方法,但只能通过继承接口加上它的扩展。因此,在继承链中两次声明此方法可以解决它。

1 个答案:

答案 0 :(得分:0)

由于AbstractJcrRepository确实实现了ResourcePreviewRepository,所以在发生异常时不会使用此实现。