我遇到以下问题。
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类确实实现了这个方法,但只能通过继承接口加上它的扩展。因此,在继承链中两次声明此方法可以解决它。
答案 0 :(得分:0)
由于AbstractJcrRepository
确实实现了ResourcePreviewRepository
,所以在发生异常时不会使用此实现。