我有一个问题。
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方法确实存在于名为AbstractJcrRepository的GenericRepository的具体实现中。但是这个方法也是在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添加强制转换时,它确实工作,但显然我不想强制转换。
这是我应该得到的最终含义:
public class JcrResourcePreviewRepositoryImpl extends AbstractJcrEntityRepository<ResourceMetadata> implements ResourcePreviewRepository
但是,虽然我有实现和方法可用,我得到这个错误。我该如何解决这个问题?
谢谢你的帮助。
UPDATE WITH SOLUTION我不会张贴这是一个答案,但我不得不添加缺失的方法接口。虽然生产者返回的impl类确实实现了这个方法,但只能通过继承接口加上扩展来实现。因此,在继承链中声明该方法两次就解决了这个问题。
由于AbstractJcrRepository
不实现ResourcePreviewRepository
,因此在发生异常时使用的不是这个实现。