Dieser Fehler wird verursacht durch mit GORM Einheiten interagieren, die mit GORM nicht ordnungsgemäß registriert. Der Fehler hat nichts damit zu tun, wo die Interaktion ausgelöst wird (src/groovy
, grails-app/services/
, etc ...).
Nicht immer, aber am häufigsten tritt dieser Fehler in einer Testumgebung auf, in der der Entitätstyp nicht bei GORM registriert wurde.
Siehe das Projekt unter https://github.com/jeffbrown/illegalaccessgorm. Dieses Projekt enthält Folgendes.
A domain Klasse:
// grails-app/domain/demo/Person.groovy
package demo
class Person {
String name
}
A Service:
// grails-app/services/demo/HelperService.groovy
package demo
class HelperService {
int getNumberOfPeople() {
Person.count()
}
}
eine Dienstprogrammklasse:
// src/groovy/demo/SomeHelper.groovy
package demo
class SomeHelper {
int getNumberOfPeople() {
Person.count()
}
}
einen Komponententest für den Service:
// test/unit/demo/HelperServiceSpec.grovy
package demo
import grails.test.mixin.TestFor
import spock.lang.Specification
@TestFor(HelperService)
@Mock(Person)
class HelperServiceSpec extends Specification {
void "test gorm method"() {
expect:
service.numberOfPeople == 0
}
}
Ein Unit-Test für die Utility-Klasse:
// test/unit/demo/SomeHelperSpec.groovy
package demo
import spock.lang.Specification
@Mock(Person)
class SomeHelperSpec extends Specification {
void "test gorm method"() {
given:
def helper = new SomeHelper()
expect:
helper.numberOfPeople == 0
}
}
Diese beiden Tests bestehen. Wenn Sie die @Mock(Person)
von einer von ihnen entfernen, wird fehlschlagen Sie den Test mit den folgenden:
java.lang.IllegalStateException: Method on class [demo.Person] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
Wenn das Problem in einem gewissen Kontext geschieht anders als ein Test, mehr über den Kontext zu wissen, wäre hilfreich. Andere wahrscheinliche Verdächtige sind Java-Entitäten, die aus irgendeinem Grund nicht richtig initialisiert werden, und in einigen Fällen können Domänenklassen, die von Plugins importiert werden, problematisch sein.
Auch zu wissen, welche Version von Grails Sie verwenden, kann relevant sein.
Ich hoffe, dass alles einen Sinn ergibt.
Sie müssen mehr Kontext zu Ihrer Frage bereitstellen. Wo benutzt du deine Klassen innerhalb von 'src/groovy'? Was ruft sie an, und im Gegenzug rufen Sie Ihre Domain-Klassen auf? Versuchen Sie, mehr Details zu Ihrer Frage zu liefern, mit konkreten Beispielen, was Sie tun, und Sie erhalten bessere Antworten. –
import com.chatportal.ShiroUser Klasse ChatUtility { \t static main (args) { \t \t def chatUtility = new ChatUtility() \t \t chatUtility? .Anzeige (1) } \t \t \t def Display (def id) { \t \t println "ChatUtility Chat Benutzer:" + ShiroUser.get (id) \t} } –
Ist der Fehler in einem Test passiert oder in t er läuft app? –