2016-09-08 4 views
1

Ich habe ein Problem mit dem Folgenden.Methode nicht gefunden Ausnahme aber Methode existiert und ist implementiert

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

Während Laufzeit und Debugging ist dies die Klasse. Diese

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

ist die Definition des ResourcePreviewRepository

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

Jetzt: die objectExists Methode existiert bei der konkreten Umsetzung von GenericRepository genannt AbstractJcrRepository. Aber auch diese Methode ist in der EntityRepository-Schnittstelle definiert (ich vermute, hier liegt das Problem).

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 { 
     ... 
    } 

} 

Beachten Sie, dass, wenn ich eine Besetzung zu GenericRepository hinzufügen, es funktioniert, aber natürlich will ich nicht werfen.

Dies ist der letzte impl soll ich zu bekommen:

public class JcrResourcePreviewRepositoryImpl extends AbstractJcrEntityRepository<ResourceMetadata> implements ResourcePreviewRepository 

Aber obwohl ich die Umsetzung zu tun haben und die Methode zur Verfügung ich diesen Fehler erhalten. Wie kann ich das beheben?

Danke für Ihre Hilfe.

UPDATE MIT LÖSUNG Ich werde nicht posten Dies ist eine Antwort, aber ich musste die fehlende Methode zur Schnittstelle hinzufügen. Obwohl die Impl-Klasse, die vom Producer zurückgegeben wird, diese Methode zwar implementiert, aber nur durch die Vererbung einer Schnittstelle plus ihrer Erweiterung. Diese Methode zweimal in der Vererbungskette zu deklarieren, löste sie also.

+2

Mehr Code wäre hilfreich. – Justplayit94

+2

Ich sehe keinen Grund anzunehmen, dass diese Methode in der Schnittstelle existiert. – Stultuske

+0

Fragen zur Fehlersuche ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve] – xenteros

Antwort

0

Da AbstractJcrRepository does'nt implementiert ResourcePreviewRepository, ist es nicht diese Implementierung, die verwendet wird, wenn die Ausnahme aufgetreten ist.

+0

hinzu, der keinen Sinn ergibt, denn das ResourcePreviewRepository erbt die Methoden von der Erweiterung. Auch es kompiliert gut. Die endgültige Implementierung sollte die Methode impl enthalten. –

+0

ResourcePreviewRepository ist eine Schnittstelle, so dass die Implementierung seiner Erweiterung nicht erforderlich ist. Die Implementierung von ResourcePreviewRepository muss das AbstractJcrRepository erweitern, um es zu erhalten. – Phox

+0

tut es das, ich werde mehr Code hinzufügen, vielleicht war das unklar –

Verwandte Themen