2016-09-08 4 views
1

У меня проблема со следующим.метод не найден исключение, но метод существует и реализуется

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, он работает, но, очевидно, я не хочу, чтобы бросить.

Это последний осущ я должен получать:

public class JcrResourcePreviewRepositoryImpl extends AbstractJcrEntityRepository<ResourceMetadata> implements ResourcePreviewRepository 

Но хотя у меня есть процесс реализации и доступный метод, я получаю эту ошибку. Как я могу это исправить?

Благодарим за помощь.

ОБНОВЛЕНИЕ С РЕШЕНИЕМ Я не буду публиковать это ответ, но мне пришлось добавить недостающий метод в интерфейс. Хотя класс impl, возвращаемый Продюсером, безусловно, реализует этот метод, но только через наследование интерфейса плюс его расширение. Поэтому объявление этого метода дважды в цепочке наследования разрешило его.

+2

Больше кода было бы полезно. – Justplayit94

+2

Я не вижу причин предполагать, что этот метод существует в интерфейсе. – Stultuske

+0

Вопросы поиска справки по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать [mcve] – xenteros

ответ

0

Как AbstractJcrRepository does'nt реализует ResourcePreviewRepository, это не эта реализация, которая используется, когда произошло исключение.

+0

, который не имеет смысла правильно ?, потому что ResourcePreviewRepository наследует методы из расширения. Также он отлично компилируется. Окончательная реализация должна содержать метод impl. –

+0

ResourcePreviewRepository - это интерфейс, поэтому он не выполняет реализацию его расширения. Реализация ResourcePreviewRepository должна расширять AbstractJcrRepository, чтобы получить его. – Phox

+0

он делает это, я добавлю еще код, может быть, это было неясно –

Смежные вопросы