Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.InstantiationException when using inheritance and abstract base class and embedded object #111

Open
4 tasks done
puneetbehl opened this issue Apr 9, 2020 · 0 comments

Comments

@puneetbehl
Copy link
Contributor

puneetbehl commented Apr 9, 2020

Task List

  • Steps to reproduce provided
  • Stacktrace (if present) provided
  • Example that reproduces the problem uploaded to Github
  • Full description of the issue provided (see below)

When using Inheritance from an abstract base class as an embedded object, the list criteria query throws java.lang.InstantiationException.

Steps to Reproduce

  1. Create a Grails 4 application.
  2. Remove hibernate dependencies and add the Grails MongoDB plugin.
  3. Create an abstract base domain class Address as:
abstract class Address {
    String street
}
  1. Create another domain class HomeAddress.groovy which implements Address as:
class HomeAddress extends Address {

    String type = "home"
}
  1. Create a domain class Patient.groovy which as embedded address as:
class Patient {

    Address address

    static embedded = ['address']
}
  1. Try to access list of all patient using following query:
Patient.list()

Expected Behaviour

The query Patient.list() should return all the patients with embedded address information without any error.

Actual Behaviour

The following exception is thrown:

Caused by: java.lang.reflect.UndeclaredThrowableException
	at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:319)
	at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:40)
	at org.grails.datastore.gorm.GormStaticApi.list(GormStaticApi.groovy:607)
	at org.grails.datastore.gorm.GormEntity$Trait$Helper.list(GormEntity.groovy:682)
	... 1 more
Caused by: java.lang.InstantiationException
	at org.grails.datastore.bson.codecs.BsonPersistentEntityCodec.decode(BsonPersistentEntityCodec.groovy:76)
	at org.grails.datastore.bson.codecs.decoders.EmbeddedDecoder.decode(EmbeddedDecoder.groovy:27)
	at org.grails.datastore.bson.codecs.BsonPersistentEntityCodec.decode(BsonPersistentEntityCodec.groovy:121)
	at com.mongodb.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52)
	at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60)
	at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
	at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
	at org.bson.codecs.configuration.LazyCodec.decode(LazyCodec.java:47)
	at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101)
	at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63)
	at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
	at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
	at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:48)
	at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:393)
	at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:299)
	at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255)
	at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99)
	at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:444)
	at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:72)
	at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:200)
	at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:269)
	at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:131)
	at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:123)
	at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:242)
	at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:233)
	at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:136)
	at com.mongodb.operation.FindOperation$1.call(FindOperation.java:701)
	at com.mongodb.operation.FindOperation$1.call(FindOperation.java:695)
	at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:462)
	at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:406)
	at com.mongodb.operation.FindOperation.execute(FindOperation.java:695)
	at com.mongodb.operation.FindOperation.execute(FindOperation.java:83)
	at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:179)
	at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:132)
	at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:86)
	at org.grails.datastore.mapping.mongo.query.MongoQuery.executeQuery(MongoQuery.java:527)
	at org.grails.datastore.mapping.mongo.query.MongoQuery.executeQuery(MongoQuery.java:464)
	at org.grails.datastore.mapping.query.Query.doList(Query.java:589)
	at org.grails.datastore.mapping.query.Query.list(Query.java:568)
	at org.grails.datastore.gorm.GormStaticApi.list_closure20(GormStaticApi.groovy:608)
	at groovy.lang.Closure.call(Closure.java:405)
	... 5 more

Environment Information

  • Operating System: macOS
  • Grails Version: 4.0.3
  • JDK Version: 1.8.hs-adpt
  • Container Version (If Applicable): MongoDB 3 Docker Image

Example Application

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant