grails / gorm-graphql Goto Github PK
View Code? Open in Web Editor NEWAn automatic GraphQL schema generator for GORM
License: Apache License 2.0
An automatic GraphQL schema generator for GORM
License: Apache License 2.0
The monolithic grails project has been broken up into several smaller projects. Visit http://github.com/grails.
I want to create mutation with domain class talk ,how to write the document?
@GrailsCompileStatic
class Speaker {
String firstName
String lastName
String name
String email
String bio
static hasMany = [talks: Talk]
static graphql = true
static constraints = {
email nullable: true, email: true
bio nullable: true
}
static mapping = {
bio type: 'text'
name formula: 'concat(FIRST_NAME,\' \',LAST_NAME)'
talks sort: 'id'
}
}
@GrailsCompileStatic
class Talk {
Speaker speaker
String title
int duration
static graphql = true
static belongsTo = [speaker: Speaker]
}
if i use the code like this:
mutation {
talkCreate(talk: {
title: "about K8S"
duration: 120
speaker: {
id: 1
}
}) {
id
title
duration
speaker {
id
}
errors {
field
message
}
}
}
the speaker_id always set null, why?
I've created a branch for this: https://github.com/grails/gorm-graphql/tree/grails-4
query('authorList', [Author]) {
dataFetcher(new EntityDataFetcher<List<Author>>(Author.gormPersistentEntity) {
@Override
protected DetachedCriteria buildCriteria(DataFetchingEnvironment environment) {
Author.where {name != 'King'}
}
})
}
Results in schema of:
authorList: [Author]
rather than:
authorList(
max: Int
offset: Int
sort: String
order: String
ignoreCase: Boolean
): [Author]
From the GraphQL spec:
Every field on a GraphQL object type can have zero or more arguments, for example the length field below:
type Starship {
id: ID!
name: String!
length(unit: LengthUnit = METER): Float
}
I was expecting there to be some way similar to defining query operations, a la...
query('authorByName', Author) {
argument('name', String)
...
}
but there doesn't appear to be any way to define arguments for fields.
The only workaround I can see is to define another query operation, but then you lose the context of the "source" (parent) object, and at that point it largely defeats the purpose of using GraphQL because you're having to make multiple queries to retrieve the same data that should otherwise be retrievable in a single query.
When a domain class includes a Map property, the user must either exclude it or manually define how it is mapped (e.g. https://grails.github.io/gorm-graphql/snapshot/guide/index.html#otherNotes)
Excluding it though automatically enables all operations on the given class. If you don't want any of those operations, you're left with doing something like this:
static graphql = GraphQLMapping.build {
exclude 'coordinates'
operations.get.enabled false
operations.list.enabled false
operations.count.enabled false
operations.create.enabled false
operations.delete.enabled false
operations.update.enabled false
}
See the example at https://github.com/jamesdh/gorm-graphql-bug/blob/master/grails-app/domain/com/bugz/Address.groovy#L15-L23
Kinda verbose/ugly. Would be nice if there were a cleaner way to handle this.
Following is the error snippet which indicates authentication failure:
[gh-pages 58a36da] Updating GraphQL Docs for Travis build: https://travis-ci.org/grails/gorm-graphql/builds/666895817
1437 180 files changed, 1068 insertions(+), 562 deletions(-)
1438remote: Invalid username or password.
1439fatal: Authentication failed for 'https://[secure]@github.com/grails/gorm-graphql.git/'
1440The command "./travis-build.sh" exited with 0.
see Complete Build Log for more details.
Including this plugin in a Grails 3.2.10 application via:
compile "org.grails.plugins:gorm-graphql:1.0.0"
causes the following error on startup:
Caused by: java.lang.ClassNotFoundException: org.grails.compiler.web.converters.RenderConverterTrait
If I define domain with not default datastore like:
class Speaker {
String firstName
String lastName
String name
String email
String bio
static graphql = GraphQLMapping.build {
operations.delete.enabled false
//or
//operations.get
//operations.list
//operations.count
//operations.create
//operations.update
//operations.delete
}
static constraints = {
email nullable: true, email: true
bio nullable: true
}
static mapping = {
datasource "rimm" // <------ here
bio type: 'text'
name formula: 'concat(FIRST_NAME,\' \',LAST_NAME)'
talks sort: 'id'
}
}
I am getting error like:
curl -X "POST" "http://localhost:8080/graphql" \ 52 ↵
-H "Content-Type: application/graphql" \
-d $'
{
speakerCount
}'
{"data":{"speakerCount":null},"errors":[{"message":"Exception while fetching data (/speakerCount) : Class org.grails.gorm.graphql.fetcher.DefaultGormDataFetcher can not access a member of class org.grails.orm.hibernate.HibernateDatastore$2 with modifiers \"public volatile\"","errorType":"DataFetchingException","locations":[{"line":3,"column":3}]}]}
Because we may be burdened with domain models that are either poorly or lengthily named, it would be helpful to have the ability to provide custom operation names in the GraphQLMapping DSL.
I've already actually implemented this, just need to submit a PR for it.
According to the spec graphql response is allowed to contain 'extension' node which is actually filtered out in GraphqlController
This is what was really implied in #37.
Since this is now already public and possibly in use, I'd suggest a operations.provided.enabled
which specifically prevents the generation of the get/list/count/create/update/delete queries only.
Hi!
I have class Foo
with custom property bar
.
class Foo {
static graphql = GraphQLMapping.build {
add('bar', Bar) {
dataFetcher { Foo foo, ClosureDataFetchingEnvironment env ->
//The fetchArguments will be populated based on what properties
//were requested from the 'bar'
Bar.where { .list(env.fetchArguments)
}
}
}
}
}
like in this example https://grails.github.io/gorm-graphql/snapshot/api/org/grails/gorm/graphql/fetcher/impl/ClosureDataFetchingEnvironment.html
And domain class Bar
contains property baz
. So I try to filter by this parameter baz
{
foo(id: 1000) {
id
bar (baz: "bla") {
id
}
}
}
but I'm getting an error: Validation error of type UnknownArgument: Unknown field argument baz
What I'm doing wrong? Please help
Apply Change similar to grails/grails-core#13387
Currently gorm-graphql
is using older graphql-java
v11 which contains deprecated approach of adding dataFetcher
(e.g) to the field definition, instead it should be migrated to the GraphQLCodeRegistry
. Also in DataFetchingEnvironment
was deprecated getFields
which is used in EntityFetchOptions
.
Related to #7
When using a circular association (in my example via one-to-many association), schema generation will fail ~50% of the time on startup:
class User {
Address address
static constraints = {
address nullable: true
}
static graphic = true
}
class Address {
Set<User> owners
static hasMany = [
owners: User
]
}
results in...
Caused by: graphql.AssertException: type Address not found in schema
at graphql.Assert.assertNotNull(Assert.java:13)
at graphql.schema.GraphQLTypeResolvingVisitor.visitGraphQLTypeReference(GraphQLTypeResolvingVisitor.java:42)
at graphql.schema.GraphQLTypeReference.accept(GraphQLTypeReference.java:45)
at graphql.schema.TypeTraverser$TraverserDelegateVisitor.enter(TypeTraverser.java:73)
at graphql.util.Traverser.traverse(Traverser.java:106)
at graphql.schema.TypeTraverser.doTraverse(TypeTraverser.java:60)
at graphql.schema.TypeTraverser.depthFirst(TypeTraverser.java:52)
at graphql.schema.TypeTraverser.depthFirst(TypeTraverser.java:40)
at graphql.schema.SchemaUtil.replaceTypeReferences(SchemaUtil.java:106)
at graphql.schema.GraphQLSchema$Builder.build(GraphQLSchema.java:341)
at graphql.schema.GraphQLSchema$Builder.build(GraphQLSchema.java:314)
at org.grails.gorm.graphql.Schema.generate(Schema.groovy:446)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
I've include a full project reproducing this at https://github.com/jamesdh/gorm-graphql-bug. Either running the app or running integration tests should reproduce it ~50% of the time.
When defining a custom property/field, the docs say we can use the provided fetchArguments
for retrieving the fetch options or the list of join properties. However, it's perpetually empty, and hence we lose out on the automatic join operations.
Oddly enough, the test for this functionality appears to actually confirm this:
If you look at the second query, you can see it queried for more properties than were specified in the original query, and if you debug the actual test, you'll see that env.fetchArguments is always an empty Map. Hence the test is incorrect, given the actually expected behavior.
It appears this is the root cause:
So either that is intended (and arguably not very useful) and the docs are misleading, or the docs are correct and this is actually not functioning as intended.
com.graphql-java:graphql-spring-boot-starter:3.9.2
for graphQLServletmutation {
talkCreate(talk: {title: "new talk", duration: 20, speaker: {id: "6bd39acb-c4b6-46b2-a564-5779d75cee2d"}}) {
id
title
duration
errors {
field
message
}
}
}
{
"data": {
"talkCreate": {
"id": null,
"title": "new talk",
"duration": 20,
"errors": [
{
"field": "speaker",
"message": "Property [speaker] of class [class neo.script.gorm.graphql.demo.domain.Talk] cannot be null"
}
]
}
}
}
org.grails.gorm.graphql.plugin.binding.GrailsGraphQLDataBinder
, speaker(id:1)
do not set for Talk.Will you solve this problem?
* What went wrong:
Some problems were found with the configuration of task ':docs:publishGuide' (type 'PublishGuide').
- Type 'grails.doc.gradle.PublishGuide' property 'asciidoc' has redundant getters: 'getAsciidoc()' and 'isAsciidoc()'.
Reason: Boolean property 'asciidoc' has both an `is` and a `get` getter.
Possible solutions:
1. Remove one of the getters.
2. Annotate one of the getters with @Internal.
Please refer to https://docs.gradle.org/7.6.3/userguide/validation_problems.html#redundant_getters for more details about this problem.
- Type 'grails.doc.gradle.PublishGuide' property 'asciidoc' of type boolean shouldn't be annotated with @Optional.
Reason: Properties of primitive type cannot be optional.
Possible solutions:
1. Remove the @Optional annotation.
2. Use the java.lang.Boolean type instead.
Please refer to https://docs.gradle.org/7.6.3/userguide/validation_problems.html#cannot_use_optional_on_primitive_types for more details about this problem.
- Type 'grails.doc.gradle.PublishGuide' property 'macros' is missing an input or output annotation.
Reason: A property without annotation isn't considered during up-to-date checking.
Possible solutions:
1. Add an input or output annotation.
2. Mark it as @Internal.
Please refer to https://docs.gradle.org/7.6.3/userguide/validation_problems.html#missing_annotation for more details about this problem.
- Type 'grails.doc.gradle.PublishGuide' property 'workDir' is missing an input or output annotation.
Reason: A property without annotation isn't considered during up-to-date checking.
Possible solutions:
1. Add an input or output annotation.
2. Mark it as @Internal.
Please refer to https://docs.gradle.org/7.6.3/userguide/validation_problems.html#missing_annotation for more details about this problem.
Working through the docs on Type Conversion and Creation I thought it would be fairly straight forward to register a custom output object (non-scalar) type that isn't a persistent entity. However, I'm not sure it's possible given how the Typed trait resolves output types.
As you can see in line 55/56, it tries to retrieve it and typecast it as a GraphQLInputType, resulting in...
GroovyCastException: Cannot cast object 'GraphQLObjectType{...}' with class 'graphql.schema.GraphQLObjectType' to class 'graphql.schema.GraphQLInputType'
Mostly just creating this as a reminder to myself to submit a fix, but would appreciate any insights others might have in case I'm missing something obvious.
I think all these problems might be inter-related to each other.
Hi!
I set up an example Grails Application project following this guide, however when setting the firstName
property as not nullable this constraint is not respected, GraphiQL displays it as a nullable field in the SpeakerCreate
type.
static constraints = {
firstName nullable: false
email nullable: true, email: true
bio nullable: true
}
static graphql = GraphQLMapping.build {
property('firstName',
[
order : 2,
description: 'Author first name'
nullable: false'
])
}
Only if I remove the entire property mapping is the nullable constraint respected, but this prevents me from mapping the property with a custom order and description.
static constraints = {
firstName nullable: false
email nullable: true, email: true
bio nullable: true
}
static graphql = GraphQLMapping.build {
/*property('firstName',
[
order : 2,
description: 'Author first name'
nullable: false'
])*/
}
Thanks in advance
I have a class with multiple layers of nesting that I would like to attach to the graphql queries for many domain classes (i.e. a good use-case for add()
)
I didn't make this POGO a domain class, because the whole thing is read-only (no DB persistence) and built at query-time.
This means I need to declare my gql types manually instead of automatically by the plugin (fine), but I'm hoping to colocate the gql type markup and properties on the nested classes, and keep my code DRY.
However, because of the nesting on the POGO, I couldn't find a way to make re-use of the whole class without declaring the full gql type markup on each domain class.
I have created a repo showing this: https://github.com/brdbry/gorm-graphql-nested-pogo
See the IncomingIntercoDrawdown and OutgoingIntercoDrawdown domain classes for an example.
Would it be possible to allow some way of achieving nesting POGOs in the plugin e.g. some GQL type name suffix parameter that can be passed in when defining the type at the top level?
Failing that, can you think of an alternative design pattern I could use instead?
Alternative solutions considered and failed already (though I may have done something wrong):
mapWith = 'none'
and it didn't work, but I just saw isAttached()
approach here (https://stackoverflow.com/questions/3490135/do-grails-domain-classes-have-to-be-tied-to-a-database) so I'll try that too).Thanks in advance.
Using Spring Security together with GORM GraphQL we want to be able to add authentication headers in our integration tests to validate our app security, data integrity and tenancy that has been setup with GraphQL interceptors and Spring Security configuration.
This can be done by attaching GET parameter /graphql?access_token=XXX or allowing developer to add HTTP headers to RxHttpClient.
If you have a domain class that is marked with @GrailsCompileSatic and this class has a property with a constraint nullable: true, and if this class is enabled for GraphQL with a custom operation/query, then the nullable: true constraint behaves like nullable: false.
Steps to reproduce:
Create a new project (Tested with Grails 4.0.4 / 4.0.5 and their default gorm version)
Add compile "org.grails.plugins:gorm-graphql-plugin:2.0.0"
dependency
Create a domain class, say MyDomain
marked with @GrailsCompileStatic
and a nullable
property, like:
@GrailsCompileStatic
class MyDomain {
String name
static constraints = {
name nullable: true
}
}
@GrailsCompileStatic
class MyDomain {
String name
static constraints = {
name nullable: true
}
static graphql = GraphQLMapping.build {
query("myQuery", Integer) {
dataFetcher(new DataFetcher() {
@Override
Object get(DataFetchingEnvironment environment) throws Exception {
return new Integer(0)
}
})
}
}
}
If you just put static graphql=true
or static graphql = GraphQLMapping.build {}
there's no issue.
class BootStrap {
def init = { servletContext ->
new MyDomain().save(failOnError: true)
}
def destroy = {
}
}
gradlew bootRun
. It is expected the instance to be persisted with no errors, because it has only one field, which is null
, and that field allows null
. Instead, you see a validation exception:grails.validation.ValidationException: Validation Error(s) occurred during save():
- Field error in object 'test.MyDomain' on field 'name': rejected value [null]; codes [test.MyDomain.name.nullable.error.test.MyDomain.name,test.MyDomain.name.null
able.error.name,test.MyDomain.name.nullable.error.java.lang.String,test.MyDomain.name.nullable.error,myDomain.name.nullable.error.test.MyDomain.name,myDomain.name.
nullable.error.name,myDomain.name.nullable.error.java.lang.String,myDomain.name.nullable.error,test.MyDomain.name.nullable.test.MyDomain.name,test.MyDomain.name.nu
llable.name,test.MyDomain.name.nullable.java.lang.String,test.MyDomain.name.nullable,myDomain.name.nullable.test.MyDomain.name,myDomain.name.nullable.name,myDomain
.name.nullable.java.lang.String,myDomain.name.nullable,nullable.test.MyDomain.name,nullable.name,nullable.java.lang.String,nullable]; arguments [name,class test.My
Domain]; default message [O campo [{0}] da classe [{1}] nÒo pode ser vazio]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:80)
at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:74)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1732)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1556)
at org.codehaus.groovy.runtime.InvokerHelper.invokeConstructorOf(InvokerHelper.java:1042)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.newInstance(DefaultGroovyMethods.java:17159)
at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.save(AbstractHibernateGormInstanceApi.groovy:134)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:153)
at test.MyDomain.save(MyDomain.groovy)
at test.MyDomain.save(MyDomain.groovy)
at org.grails.datastore.gorm.GormEntity$save.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
at testconstraintnotnull.BootStrap$_closure1.doCall(BootStrap.groovy:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:101)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1099)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
at groovy.lang.Closure.call(Closure.java:405)
at groovy.lang.Closure.call(Closure.java:399)
at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:594)
at grails.util.Environment.executeForEnvironment(Environment.java:587)
at grails.util.Environment.executeForCurrentEnvironment(Environment.java:563)
at org.grails.web.servlet.boostrap.DefaultGrailsBootstrapClass.callInit(DefaultGrailsBootstrapClass.java:74)
at org.grails.web.servlet.context.GrailsConfigUtils.executeGrailsBootstraps(GrailsConfigUtils.java:83)
at org.grails.plugins.web.servlet.context.BootStrapClassRunner.onStartup(BootStrapClassRunner.groovy:56)
at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy:269)
at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
at grails.boot.GrailsApp.run(GrailsApp.groovy:99)
at grails.boot.GrailsApp.run(GrailsApp.groovy:485)
at grails.boot.GrailsApp.run(GrailsApp.groovy:472)
at testconstraintnotnull.Application.main(Application.groovy:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Now if you either remove @GrailsCompileStatic or remove the custom query or remove graphql
at all, the app just runs
I uploaded a semple here
Heya, I'm trying to take an old grails 3 app using the graphql plugin and update it to a current app generated with the defaults (grails 5.2.5 web profile) of application forge without success.
Here is a link to the project with a single domain class
https://github.com/Cortrah/gql-plugin-test
The instructions say to add this to the depedencies
compile "org.grails.plugins:gorm-graphql-plugin:2.0.0"
Apparently changes in gradle seem to imply that this should now be
compileOnly "org.grails.plugins:gorm-graphql-plugin:2.0.0"
I've also tried this slightly later version without success
compileOnly "org.grails.plugins:gorm-graphql-plugin:2.0.2.BUILD-SNAPSHOT"
The basic web scaffolding works for the domain class, just not the graphql endpoint or the graphiql link.
looking at the installed plugins list from the home page doesn't list the graphql plugin
and
http://localhost:8080/graphql/browser returns a 404
Any thoughts or directions for me to investigate would be appreciated.
Thanks!
gorm-graphql 2.0.1 pulls in graphql-java 14.1 which has multiple CVEs against it.
Even on the 3.0.x branch, it still only pulls in graphql-java 17.3 which still has the 2023 CVE against it.
Unfortunately here are breaking changes between graphql-java 14.x and the versions needed to fix these vulnerabilities, so forcing the version difference doesn't seem to be an option.
Role-Based Api and User-Based Filter is not working for graphql in grails.
This easily happens when the inheritance hierarchy in question is an association on a parent domain model that is being queried. If the object is not already in Hibernates cache, it generates a proxy for it when being retrieved, but then GraphQL is unable to adequately determine its type when fulfilling the query.
Adding this mostly as a placeholder/reminder to submit a PR that clarifies this gotcha in the docs.
Heya. I've been pulling together a really trivial example project that demonstrates a custom operation on a grails 4.0.0 app - with the hope of submitting some doc improvements and suggesting we use this lib in a service. Demo/test project is here: https://github.com/ianibo/graphql_grails4_test. and you can recreate this case by checking that out; using grails (4.0.0) run-app and then running the script test_api.sh at the root of the project in a different shell. Had a few stumbles along the way but almost there now and having loads of fun. Just one real headache left: In my test script if I submit a mutation as follows:
curl -X "POST" "http://localhost:8080/graphql" \
-H "Content-Type: application/graphql" \
-d $'
mutation {
widgetCreate(widget: {
name: "AATestWidget",
description: "AATestWidget Description"
}) {
id
name
description
errors {
field
message
}
}
}
'
Everything works great - but in trying to use this code in a test harness, I'd like to generate the value of the widget argument using some other libraries. Specifically, I'd like to use groovy.json.JsonOutput to render a map as JSON and then use that JSON a the mutation parameter. The only problem is that groovy.json.JsonOutput insists on quoting it's keys, so what gets sent in this case is
mutation {
widgetCreate(widget: {
"name": "AATestWidget",
"description": "AATestWidget Description"
}) {
id
name
description
errors {
field
message
}
}
}
Sending this, however, always results in
{"data":null,"errors":[{"message":"Invalid Syntax : offending token '"name"' at line 4 column 5","errorType":"InvalidSyntax","locations":[{"line":4,"column":5}]}]}
In reading the docs at https://graphql.org/learn/queries/ it seems that it's OK for the content of the argument to be well-formed JSON. Is there any way to either enable sending a well-formed JSON parameter within the body of the argument or have I missed any more obvious way of achieving this (Or just misunderstood what is going on here)?
Cheers in advance,
Ian.
Currently, if you supply your own dataFetcher for a given field, the GORM database query gets delineated at the point of that dataFetcher. The original query is executed as if the custom dataFetcher was not even provided (to the extent that the fields being queried were already part of the graph), and then any queries performed within the custom dataFetcher are executed in addition to that.
In the case of a deep object graph, with 1-to-Many associations and with potentially multiple custom dataFetchers, this becomes inefficient very quickly. It should be possible that instead we simply pass the unexecuted DetachedCriteria along to a deeper custom dataFetcher. That in turn could use DetachedCriteria's query composition abilities to modify the original query, so on and so forth, ultimately resulting in one single, efficient query.
There is some problems to work with multiple datasources(for example MySQL and MongoDB). I've made local fix that plugin generate schema for both datasources. But there is an big work to add return type from one datasources to another. Are you working on it or maybe I should make a pull request?
In my application that uses this plugin I am packaging it via Gradle
.
Packaged via gradlew war
results in these jars getting added to WEB-INF/lib
:
-rw-r--r-- 1 user1 group1 374K Mar 12 10:31 gorm-graphql-1.0.2.jar
-rw-r--r-- 1 user1 group1 647K Dec 20 10:26 graphql-java-6.0.jar
When deploying the Gradle built warfile I get the following error:
ERROR g.b.c.GrailsApplicationPostProcessor Error loading spring/resources.groovy file: org/grails/gorm/graphql/plugin/GraphQLPostProcessor
java.lang.NoClassDefFoundError: org/grails/gorm/graphql/plugin/GraphQLPostProcessor
Packaging via grails war
results in these jars getting added to WEB-INF/lib
:
-rw-r--r-- 1 user1 group1 557K Mar 12 10:31 gorm-graphql-1.0.2.jar
-rw-r--r-- 1 user1 group1 647K Dec 20 10:26 graphql-java-6.0.jar
-rw-r--r-- 1 user1 group1 374K Mar 8 19:09 org.grails-gorm-graphql-1.0.2.jar
-rw-r--r-- 1 user1 group1 557K Mar 8 19:09 org.grails.plugins-gorm-graphql-1.0.2.jar
The missing resource is in the gorm-graphql-1.0.2.jar
file If and Only If it's build via grails
.
I believe there is an incorrect dependency in the plugin that is preventing is from being built via 'gradlew'.
Given:
class Bar{
Foo foo
static graphql = true
}
class Foo{
static hasMany = [items:FooItem]
}
class FooItem{
static belongsTo = [foo:Foo]
}
This will throw a StackOverflowError, it tries to create reference from Foo to FooItem and back.
Adding static graphql = true
to Foo solves this, because then there's a mapping available and a reference will be created.
If this is not supported a warning could be logged?
heya - 2.0.0 looks really good and MultiTenancy support is definitely better - out of the box confirmed working with Database-Per-Tenant mappings too - so that's great.
Trying to add in a custom data fetcher when working in Multi-Tenancy mode seems to encounter a similar problem to v1 with static access at applicaiton startup:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'graphQL': Cannot resolve reference to bean 'graphQLSchema' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'graphQLSchema': Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [graphql.schema.GraphQLSchema]: Factory method 'generate' threw exception; nested exception is org.grails.datastore.mapping.multitenancy.exceptions.TenantNotFoundException: Tenant could not be resolved outside a web request
The project works perfectly with the out-of-the-box config until we declare a custom fetcher (Simplified example):
static graphql = GraphQLMapping.lazy {
query('generalAlertBaseQuery', pagedResult(AlertBase)) {
defaultListArguments()
argument('qterm', String) {
nullable true
description "Left anchored alert name to search for"
}
dataFetcher(new PaginatedEntityDataFetcher<List<AlertBase>>(AlertBase.gormPersistentEntity) {
@Override
protected DetachedCriteria buildCriteria(DataFetchingEnvironment environment) {
def q = new DetachedCriteria(AlertBase).build {
rlike('name',/${environment.getArgument('qterm')}/)
}
return q
}
})
}
}
This code is yanked directly from a v1 test rig, and I've only scanned over the updated 2.0.0 docs so apologies if I've missed something critical.
Is it possible that custom fetchers can be made to work in the multi-tenant setup? WIll try and update the test project to recreate this in a simple env.
@jameskleeh Currently is not possible to build war that has all required gorm-graphql-* jars. Can we please fix the build as the PR has been merged to fix this war issue.
Right now the default is to return everything. In most applications, that can easily bring things to a crashing halt. I believe this should be pretty straightforward once #56 is in, but would appreciate any insights others might have.
Currently I get Error exist in bytecode
errors in any Grails 4 sample apps if I use grapqhl
in any domain class.
An easy way to reproduce it is to run:
./gradlew :examples-grails-docs-app:integrationTest --tests demo.SpeakerIntegrationSpec
This is a sample stacktrace:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'methodValidationPostProcessor' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:228)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:707)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at grails.boot.GrailsApp.run(GrailsApp.groovy:93)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:127)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:43)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:97)
at org.spockframework.runtime.BaseSpecRunner.invoke(BaseSpecRunner.java:475)
at org.spockframework.runtime.BaseSpecRunner.runInitializer(BaseSpecRunner.java:341)
at org.spockframework.runtime.BaseSpecRunner.runInitializer(BaseSpecRunner.java:336)
at org.spockframework.runtime.BaseSpecRunner.initializeAndRunIteration(BaseSpecRunner.java:274)
at org.spockframework.runtime.BaseSpecRunner.runSimpleFeature(BaseSpecRunner.java:266)
at org.spockframework.runtime.BaseSpecRunner.doRunFeature(BaseSpecRunner.java:260)
at org.spockframework.runtime.BaseSpecRunner$5.invoke(BaseSpecRunner.java:243)
at org.spockframework.runtime.BaseSpecRunner.invokeRaw(BaseSpecRunner.java:484)
at org.spockframework.runtime.BaseSpecRunner.invoke(BaseSpecRunner.java:467)
at org.spockframework.runtime.BaseSpecRunner.runFeature(BaseSpecRunner.java:235)
at org.spockframework.runtime.BaseSpecRunner.runFeatures(BaseSpecRunner.java:185)
at org.spockframework.runtime.BaseSpecRunner.doRunSpec(BaseSpecRunner.java:95)
at org.spockframework.runtime.BaseSpecRunner$1.invoke(BaseSpecRunner.java:81)
at org.spockframework.runtime.BaseSpecRunner.invokeRaw(BaseSpecRunner.java:484)
at org.spockframework.runtime.BaseSpecRunner.invoke(BaseSpecRunner.java:467)
at org.spockframework.runtime.BaseSpecRunner.runSpec(BaseSpecRunner.java:73)
at org.spockframework.runtime.BaseSpecRunner.run(BaseSpecRunner.java:64)
at org.spockframework.runtime.Sputnik.run(Sputnik.java:63)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:676)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:974)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:848)
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:574)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:514)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:477)
at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:227)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1401)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
... 76 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:304)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)
... 92 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:300)
... 102 common frames omitted
Caused by: java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass$1.run(CachedSAMClass.java:108)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass$1.run(CachedSAMClass.java:106)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getDeclaredMethods(CachedSAMClass.java:106)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getAbstractMethods(CachedSAMClass.java:124)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getSAMMethodImpl(CachedSAMClass.java:198)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getSAMMethod(CachedSAMClass.java:165)
at org.codehaus.groovy.reflection.ClassInfo.isSAM(ClassInfo.java:405)
at org.codehaus.groovy.reflection.ClassInfo.createCachedClass(ClassInfo.java:395)
at org.codehaus.groovy.reflection.ClassInfo.access$300(ClassInfo.java:75)
at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:453)
at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:443)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37)
at org.codehaus.groovy.reflection.ClassInfo.getCachedClass(ClassInfo.java:164)
at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
at org.codehaus.groovy.reflection.ParameterTypes.getParametersTypes0(ParameterTypes.java:85)
at org.codehaus.groovy.reflection.ParameterTypes.getParameterTypes(ParameterTypes.java:67)
at org.codehaus.groovy.reflection.CachedMethod.compareToCachedMethod(CachedMethod.java:167)
at org.codehaus.groovy.reflection.CachedMethod.compareTo(CachedMethod.java:150)
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:202)
at java.util.Arrays.sort(Arrays.java:1246)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:155)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:119)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37)
at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:302)
at groovy.lang.MetaClassImpl.populateMethods(MetaClassImpl.java:403)
at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:353)
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3329)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:289)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:331)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:271)
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:969)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:74)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:161)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
at demo.Author.<clinit>(Author.groovy:23)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:156)
at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
at java.lang.reflect.Field.get(Field.java:393)
at org.codehaus.groovy.reflection.CachedField.getProperty(CachedField.java:55)
at org.grails.datastore.mapping.reflect.ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy(ClassPropertyFetcher.java:224)
at org.grails.datastore.mapping.reflect.ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy(ClassPropertyFetcher.java:205)
at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:94)
at org.grails.orm.hibernate.cfg.HibernateMappingContext$HibernateMappingFactory.createIdentityMapping(HibernateMappingContext.java:231)
at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.getIdentityMapping(GormMappingConfigurationStrategy.java:928)
at org.grails.datastore.mapping.model.config.JpaMappingConfigurationStrategy.getIdentityMapping(JpaMappingConfigurationStrategy.java:289)
at org.grails.datastore.mapping.model.AbstractClassMapping.<init>(AbstractClassMapping.java:35)
at org.grails.orm.hibernate.cfg.HibernatePersistentEntity$1.<init>(HibernatePersistentEntity.java:35)
at org.grails.orm.hibernate.cfg.HibernatePersistentEntity.<init>(HibernatePersistentEntity.java:35)
at org.grails.orm.hibernate.cfg.HibernateMappingContext.createPersistentEntity(HibernateMappingContext.java:108)
at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:274)
at org.grails.orm.hibernate.cfg.HibernateMappingContext.<init>(HibernateMappingContext.java:73)
at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.buildConfiguration(HibernateConnectionSourceFactory.java:94)
at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.create(HibernateConnectionSourceFactory.java:85)
at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:39)
at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:23)
at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64)
at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52)
at org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24)
at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:200)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172)
... 104 common frames omitted
2019-01-03 07:49:15.578 ERROR --- [ Test worker] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@41061388] to prepare test instance [demo.SpeakerIntegrationSpec@3f4582cb]
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:43)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:97)
at org.spockframework.runtime.BaseSpecRunner.invoke(BaseSpecRunner.java:475)
at org.spockframework.runtime.BaseSpecRunner.runInitializer(BaseSpecRunner.java:341)
at org.spockframework.runtime.BaseSpecRunner.runInitializer(BaseSpecRunner.java:336)
at org.spockframework.runtime.BaseSpecRunner.initializeAndRunIteration(BaseSpecRunner.java:274)
at org.spockframework.runtime.BaseSpecRunner.runSimpleFeature(BaseSpecRunner.java:266)
at org.spockframework.runtime.BaseSpecRunner.doRunFeature(BaseSpecRunner.java:260)
at org.spockframework.runtime.BaseSpecRunner$5.invoke(BaseSpecRunner.java:243)
at org.spockframework.runtime.BaseSpecRunner.invokeRaw(BaseSpecRunner.java:484)
at org.spockframework.runtime.BaseSpecRunner.invoke(BaseSpecRunner.java:467)
at org.spockframework.runtime.BaseSpecRunner.runFeature(BaseSpecRunner.java:235)
at org.spockframework.runtime.BaseSpecRunner.runFeatures(BaseSpecRunner.java:185)
at org.spockframework.runtime.BaseSpecRunner.doRunSpec(BaseSpecRunner.java:95)
at org.spockframework.runtime.BaseSpecRunner$1.invoke(BaseSpecRunner.java:81)
at org.spockframework.runtime.BaseSpecRunner.invokeRaw(BaseSpecRunner.java:484)
at org.spockframework.runtime.BaseSpecRunner.invoke(BaseSpecRunner.java:467)
at org.spockframework.runtime.BaseSpecRunner.runSpec(BaseSpecRunner.java:73)
at org.spockframework.runtime.BaseSpecRunner.run(BaseSpecRunner.java:64)
at org.spockframework.runtime.Sputnik.run(Sputnik.java:63)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'methodValidationPostProcessor' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:228)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:707)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at grails.boot.GrailsApp.run(GrailsApp.groovy:93)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:127)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
... 56 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:676)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:974)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:848)
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:574)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:514)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:477)
at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:227)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1401)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
... 76 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:304)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)
... 92 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:300)
... 102 common frames omitted
Caused by: java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass$1.run(CachedSAMClass.java:108)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass$1.run(CachedSAMClass.java:106)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getDeclaredMethods(CachedSAMClass.java:106)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getAbstractMethods(CachedSAMClass.java:124)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getSAMMethodImpl(CachedSAMClass.java:198)
at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getSAMMethod(CachedSAMClass.java:165)
at org.codehaus.groovy.reflection.ClassInfo.isSAM(ClassInfo.java:405)
at org.codehaus.groovy.reflection.ClassInfo.createCachedClass(ClassInfo.java:395)
at org.codehaus.groovy.reflection.ClassInfo.access$300(ClassInfo.java:75)
at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:453)
at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:443)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37)
at org.codehaus.groovy.reflection.ClassInfo.getCachedClass(ClassInfo.java:164)
at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
at org.codehaus.groovy.reflection.ParameterTypes.getParametersTypes0(ParameterTypes.java:85)
at org.codehaus.groovy.reflection.ParameterTypes.getParameterTypes(ParameterTypes.java:67)
at org.codehaus.groovy.reflection.CachedMethod.compareToCachedMethod(CachedMethod.java:167)
at org.codehaus.groovy.reflection.CachedMethod.compareTo(CachedMethod.java:150)
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:202)
at java.util.Arrays.sort(Arrays.java:1246)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:155)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:119)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37)
at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:302)
at groovy.lang.MetaClassImpl.populateMethods(MetaClassImpl.java:403)
at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:353)
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3329)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:289)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:331)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:271)
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:969)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:74)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:161)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
at demo.Author.<clinit>(Author.groovy:23)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:156)
at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
at java.lang.reflect.Field.get(Field.java:393)
at org.codehaus.groovy.reflection.CachedField.getProperty(CachedField.java:55)
at org.grails.datastore.mapping.reflect.ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy(ClassPropertyFetcher.java:224)
at org.grails.datastore.mapping.reflect.ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy(ClassPropertyFetcher.java:205)
at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:94)
at org.grails.orm.hibernate.cfg.HibernateMappingContext$HibernateMappingFactory.createIdentityMapping(HibernateMappingContext.java:231)
at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.getIdentityMapping(GormMappingConfigurationStrategy.java:928)
at org.grails.datastore.mapping.model.config.JpaMappingConfigurationStrategy.getIdentityMapping(JpaMappingConfigurationStrategy.java:289)
at org.grails.datastore.mapping.model.AbstractClassMapping.<init>(AbstractClassMapping.java:35)
at org.grails.orm.hibernate.cfg.HibernatePersistentEntity$1.<init>(HibernatePersistentEntity.java:35)
at org.grails.orm.hibernate.cfg.HibernatePersistentEntity.<init>(HibernatePersistentEntity.java:35)
at org.grails.orm.hibernate.cfg.HibernateMappingContext.createPersistentEntity(HibernateMappingContext.java:108)
at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:274)
at org.grails.orm.hibernate.cfg.HibernateMappingContext.<init>(HibernateMappingContext.java:73)
at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.buildConfiguration(HibernateConnectionSourceFactory.java:94)
at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.create(HibernateConnectionSourceFactory.java:85)
at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:39)
at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:23)
at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64)
at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52)
at org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24)
at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:200)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172)
... 104 common frames omitted
Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:43)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:97)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Unsatisfied dependency expressed through method 'methodValidationPostProcessor' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:228)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:707)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at grails.boot.GrailsApp.run(GrailsApp.groovy:93)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:127)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
... 29 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastoreServiceRegistry': Cannot resolve reference to bean 'hibernateDatastore' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:676)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:974)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:848)
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:574)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:514)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:477)
at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:227)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1401)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
... 49 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:304)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)
... 65 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:300)
... 75 more
Caused by: java.lang.VerifyError: Bad invokespecial instruction: interface method reference is in an indirect superinterface.
Exception Details:
Location:
org/grails/gorm/graphql/entity/property/impl/CustomGraphQLProperty.org_grails_gorm_graphql_entity_dsl_helpers_Deprecatabletrait$super$getDeprecationReason()Ljava/lang/String; @42: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: 2ac1 00b1 9900 252a 12b1 b800 3ac0 00b1
0x0000010: b900 b501 0013 0106 03bd 008d b800 bcb8
0x0000020: 010c c000 c7b0 0000 bf2a b701 0eb0 00bf
0x0000030:
Stackmap Table:
full_frame(@38,{},{Object[#102]})
append_frame(@41,Object[#2])
full_frame(@46,{},{Object[#102]})
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37)
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:202)
at java.util.Arrays.sort(Arrays.java:1246)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37)
at demo.Author.<clinit>(Author.groovy:23)
at org.grails.datastore.mapping.reflect.ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy(ClassPropertyFetcher.java:224)
at org.grails.datastore.mapping.reflect.ClassPropertyFetcher.getStaticPropertyValuesFromInheritanceHierarchy(ClassPropertyFetcher.java:205)
at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:94)
at org.grails.orm.hibernate.cfg.HibernateMappingContext$HibernateMappingFactory.createIdentityMapping(HibernateMappingContext.java:231)
at org.grails.datastore.mapping.model.config.GormMappingConfigurationStrategy.getIdentityMapping(GormMappingConfigurationStrategy.java:928)
at org.grails.datastore.mapping.model.config.JpaMappingConfigurationStrategy.getIdentityMapping(JpaMappingConfigurationStrategy.java:289)
at org.grails.datastore.mapping.model.AbstractClassMapping.<init>(AbstractClassMapping.java:35)
at org.grails.orm.hibernate.cfg.HibernatePersistentEntity$1.<init>(HibernatePersistentEntity.java:35)
at org.grails.orm.hibernate.cfg.HibernatePersistentEntity.<init>(HibernatePersistentEntity.java:35)
at org.grails.orm.hibernate.cfg.HibernateMappingContext.createPersistentEntity(HibernateMappingContext.java:108)
at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:274)
at org.grails.orm.hibernate.cfg.HibernateMappingContext.<init>(HibernateMappingContext.java:73)
at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.buildConfiguration(HibernateConnectionSourceFactory.java:94)
at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.create(HibernateConnectionSourceFactory.java:85)
at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:39)
at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:23)
at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64)
at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52)
at org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24)
at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:200)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172)
... 77 more```
Reproduce:
class Foo{
Bar bar
static graphql=true
}
class Bar{
Foo foo
}
Error:
Caused by: graphql.GraphQLException: type Bar not found in schema
at graphql.schema.SchemaUtil.resolveTypeReference(SchemaUtil.java:217)
at graphql.schema.GraphQLFieldDefinition.replaceTypeReferences(GraphQLFieldDefinition.java:50)
Tasklist
Hi
Currently looking to see if this plugin might be able to help in a multi-tenant (database schema-per-tenant) microservice component that we would like to transition to graphql.
I'm having a problem using the plugin in our component because the example tenant app uses the SystemPropertyTenantResolver - which means that the example project has a tenant ID in it's hand at application startup time. This in turn means that when the doWithSpring block in GormGraphqlGrailsPlugin.groovy executes the ultimate call to findStaticApi in GormEnhancer can work as in a single tenant environment.
However, in a real multi-tenant scenario (We're using schema-per-tenant, which I suspect might give us a different problem) systems will usually derive the tenant from some property of the request - and as such, the tenant identifier is not available at spring-controlled component init time. The plugin currently fails with the stack-trace at the bottom of this issue when started with a non-test tenant resolver.
I'd like to help resolve this, but could use some advice on the best way forward - I was wondering about a defer option which would delay the call to Schema.generate until the first request came along? Appreciate thats not great for pre-caching the graphql state. Another feature of our environment is that when the app starts we don't have any tenants, although we do have hooks to call functions after new tenants are created (after liquibase migrations have run to create the structure for the tenant). Similarly, I'm not clear yet if all the cached data fetchers will be a problem for us in the (database) Schema-per-tenant environment, and if we really need a (GraphQL) Schema-per-tenant also?
Any thoughts or suggestions? As I said - really happy to try and work through this but need some guidance on where to start.
Cheers.
stacktrace follows::
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'graphQLSchema': Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [graphql.schema.GraphQLSchema]: Factory method 'generate' threw exception; nested exception is org.grails.datastore.mapping.multitenancy.exceptions.TenantNotFoundException: Tenant could not be resolved outside a web request
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1181)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1075)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at grails.boot.GrailsApp.run(GrailsApp.groovy:84)
at grails.boot.GrailsApp.run(GrailsApp.groovy:393)
at grails.boot.GrailsApp.run(GrailsApp.groovy:380)
at grails.boot.GrailsApp$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136)
at mod.directory.Application.main(Application.groovy:8)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [graphql.schema.GraphQLSchema]: Factory method 'generate' threw exception; nested exception is org.grails.datastore.mapping.multitenancy.exceptions.TenantNotFoundException: Tenant could not be resolved outside a web request
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 23 common frames omitted
Caused by: org.grails.datastore.mapping.multitenancy.exceptions.TenantNotFoundException: Tenant could not be resolved outside a web request
at com.k_int.okapi.OkapiTenantResolver.resolveTenantIdentifier(OkapiTenantResolver.groovy:65)
at grails.gorm.multitenancy.Tenants.currentId(Tenants.groovy:73)
at org.grails.datastore.gorm.GormEnhancer.findTenantId(GormEnhancer.groovy:270)
at org.grails.datastore.gorm.GormEnhancer.findStaticApi(GormEnhancer.groovy:296)
at org.grails.gorm.graphql.fetcher.DefaultGormDataFetcher.<init>(DefaultGormDataFetcher.groovy:51)
at org.grails.gorm.graphql.fetcher.DefaultGormDataFetcher.<init>(DefaultGormDataFetcher.groovy:44)
at org.grails.gorm.graphql.fetcher.impl.SingleEntityDataFetcher.<init>(SingleEntityDataFetcher.groovy)
at org.grails.gorm.graphql.Schema.generate(Schema.groovy:266)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 24 common frames omitted
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
org.codehaus.groovy:groovy-groovydoc
, org.codehaus.groovy:groovy-cli-picocli
, org.codehaus.groovy:groovy-test
)codenarc
, org.codenarc:CodeNarc
)These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
org.grails.plugins:views-json
, org.grails.plugins:views-gradle
).github/workflows/gradle.yml
actions/checkout v4
actions/setup-java v4
gradle/gradle-build-action v2
actions/checkout v4
actions/setup-java v4
gradle/gradle-build-action v2
gradle/gradle-build-action v2
.github/workflows/release-notes.yml
actions/checkout v4
release-drafter/release-drafter v5
ncipollo/release-action v1
.github/workflows/release.yml
actions/checkout v4
gradle/wrapper-validation-action v1
actions/setup-java v4
gradle.properties
org.grails:grails-gradle-plugin 6.1.1
org.grails.plugins:views-gradle 2.3.2
org.grails.plugins:views-json 2.3.2
com.graphql-java:graphql-java 20.7
org.codehaus.groovy:groovy-test 3.0.11
org.spockframework:spock-core 2.1-groovy-3.0
org.codehaus.groovy:groovy-cli-picocli 3.0.11
org.grails:grails-datastore-gorm 7.3.4
com.graphql-java:graphql-java-extended-scalars 20.2
org.codenarc:CodeNarc 3.3.0
org.grails:grails-datastore-gorm-hibernate5 7.3.1
org.grails:grails-datastore-gorm-mongodb 7.0.0.RELEASE
org.slf4j:slf4j-api 1.7.36
codenarc 3.3.0
org.codehaus.groovy:groovy-groovydoc 3.0.11
javax.servlet:javax.servlet-api 4.0.1
io.micronaut:micronaut-http-client 3.10.3
settings.gradle
com.gradle.enterprise 3.15.1
com.gradle.common-custom-user-data-gradle-plugin 1.12.1
build.gradle
io.github.gradle-nexus:publish-plugin 1.3.0
io.projectreactor:reactor-test 3.6.1
org.grails:grails-datastore-gorm 7.3.4
core/build.gradle
com.github.javaparser:javaparser-core 3.25.7
org.grails.plugins:views-json 2.3.2
org.javassist:javassist 3.29.2-GA
com.github.fakemongo:fongo 2.1.1
com.h2database:h2 2.2.224
org.apache.tomcat:tomcat-jdbc 8.5.97
org.apache.tomcat.embed:tomcat-embed-logging-log4j 8.5.2
docs/build.gradle
plugin/build.gradle
io.micronaut.rxjava2:micronaut-rxjava2-http-client 1.3.0
org.grails.plugins:converters 3.3.1
com.github.javaparser:javaparser-core 3.25.7
cglib:cglib-nodep 3.3.0
gradle/wrapper/gradle-wrapper.properties
gradle 7.6.3
This plugin is great but it's very painful to restart the application every time we need to make changes to the schema. Would it be possible to regenerate the schema when a change is made?
Overriding DataFetcher's currently is only supported on the automatically provided operations, and is not possible on custom operations or fields/properties.
This is cumbersome when dealing with a large object graph where a given entity type might be an associated property in numerous places, and where you want to restrict the data returned for that type, but not have to supply a custom DataFetcher everywhere the type is used.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.