Java

Heute bin ich (mal wieder) über diese Fehlermeldung in der Kombination aus Spring, Autowire und Cobertura gestoßen:


Can not set de.[...].Service field de.[...].Service to $Proxy37

Abhilfe schafft die Zeile im Spring-Test-Context:
<aop:config proxy-target-class="true" />
<aop:aspectj-autoproxy />

Keine Tags zu diesem Beitrag.
Datum: Donnerstag, 1. Juli 2010 um 12:01 Uhr von Knut Fischer
Themengebiet: Java Trackback:Trackback-URL
Beitrag als Feed: RSS 2.0 Diesen Artikel kommentieren

3 Kommentare

  1. 1

    Hi,

    danke für den Tipp. Haben das gleiche Problem mit Cobertura. Leider hat dein Fix bei uns nicht funktioniert, da das durch die beiden Zeilen angeschaltete Class-Proxying für als „final“ deklarierte Klassen nicht funktioniert.
    Hattest du denn rausbekommen was der Grund für diese Cobertura-Eigenart ist oder hast du das Rätsel durch ausprobieren gelöst? 🙂

    Grüße,

    Stefan

    Stefan am Dienstag, 14. Dezember 2010 19:11
  2. 2

    Ich hab es jetzt nicht mehr ausprobiert. Cobertura nutzt ja ByteCode Manipulation (via ASM), ich tippe das hängt damit zusammen. Nutzt du den Interfaces für deine Dependencies (die die final sind?). Nach meinem Verständnis sollte das dann keine Probleme geben. Das „Class-Proxying“ von Spring AOP über CGLIB geht über Sub-Classing, was bei final nicht funktioniert. Die billigste Lösung wär wahrscheinlich das final wegzulassen

    Knut Fischer am Dienstag, 14. Dezember 2010 20:30
  3. 3

    Hi,

    du hast recht. Ich hatte nicht alle Dependencies über Interfaces definiert. Mit Klassen-Dependencies scheint Cobertura ohne weiteres nicht klarzukommen, Spring anscheinend schon (auch ohne aop:config proxy-target-classes=“true“). -> Problem behoben

    Stefan am Mittwoch, 15. Dezember 2010 16:16

Kommentar abgeben