java - 方法未发现异常,但方法确实存在并已实现

标签 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 方法确实存在于名为 AbstractJcrRepository 的 GenericRepository 的具体实现中。而且这个方法也是在 EntityRepository 接口(interface)中定义的(我预计问题就在这里)。

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

但是,尽管我确实有实现和可用的方法,但我收到此错误。我该如何解决这个问题?

感谢您的帮助。

更新解决方案 我不会发布这是一个答案,但我必须将缺少的方法添加到界面中。虽然 Producer 返回的 impl 类确实实现了此方法,但只能通过继承接口(interface)及其扩展来实现。所以在继承链中声明这个方法两次就解决了。

最佳答案

由于 AbstractJcrRepository 没有实现 ResourcePreviewRepository,因此异常发生时不会使用此实现。

关于java - 方法未发现异常,但方法确实存在并已实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39384544/

相关文章:

java - 支持 Maven 的 Java 3D 图形库

asynchronous - EJB 异步线程与 Vaadin,注入(inject)不工作(Vaadin 8、Vaadin-CDI、EJB ManagedExecutorService 线程)

java - 将值传递给注入(inject)的 EJB

JAVA - WELD 装饰器错误

java - java se环境下应用程序如何 Weld 容器服务?

java - linux 父进程可以保护子进程免受信号影响吗?

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

java - 在 JSF 中使用构建器模式?

jsf - 警告 : Parameter 1 of type List<Bean<? >> 来自 public void org.omnifaces.cdi.eager.EagerBeansRepository.setXxx 不可解析为具体类型

java - 如果只使用两次,创建一个新的对象引用会不会更快?