google-code-export / morphia

Automatically exported from code.google.com/p/morphia
1 stars 0 forks source link

Null Embedded document Array field causes NullPointerException #342

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
(Morphia v1.00, MongoDB v2.0.1, MongoDB v2.6.1)

It happens in the following case:

@Entity class User { [...]
    @Embedded Picture[] pictures;
}

@Embedded class Picture { /* does not matter*/ }

when I create "new User()", pictures array remain uninitalized and null and 
produces the stack trace below. However if I initialize "pictures = new 
Pictures[0]" as an empty array in the constructor, it works (and does not 
create pictures field in new records as expected). 

I'm using Morphia with Play! framework Morphia plugin. However I think that's 
not relevant.

------------
Please include a stack trace below:

21:38:33,161 ERROR ~ Error occurred: 
com.google.code.morphia.mapping.MappingException: Error mapping 
field:models.User.picture
com.google.code.morphia.mapping.MappingException: Error mapping 
field:models.User.picture
    at com.google.code.morphia.mapping.Mapper.toDBObject(Mapper.java:448)
    at com.google.code.morphia.mapping.Mapper.toDBObject(Mapper.java:430)
    at com.google.code.morphia.DatastoreImpl.entityToDBObj(DatastoreImpl.java:707)
    at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:755)
    at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:826)
    at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:820)
    at play.modules.morphia.Model.save2(Model.java:634)
    at play.modules.morphia.Model.save(Model.java:624)
    at service.UserService.signUpUser(UserService.java:103)
    at controllers.Account.processSignUp(Account.java:74)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:546)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:500)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:159)
    at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:220)
    at play.Invoker$Invocation.run(Invoker.java:265)
    at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:200)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.NullPointerException
    at java.util.Arrays$ArrayList.<init>(Arrays.java:3357)
    at java.util.Arrays.asList(Arrays.java:3343)
    at com.google.code.morphia.mapping.EmbeddedMapper.writeCollection(EmbeddedMapper.java:54)
    at com.google.code.morphia.mapping.EmbeddedMapper.toDBObject(EmbeddedMapper.java:30)
    at com.google.code.morphia.mapping.Mapper.writeMappedField(Mapper.java:535)
    at com.google.code.morphia.mapping.Mapper.toDBObject(Mapper.java:446)
    ... 29 more

Original issue reported on code.google.com by ahmetalp...@gmail.com on 15 Nov 2011 at 7:46

GoogleCodeExporter commented 9 years ago
Can you try 0.99.1snapshot which is newer

Original comment by scotthernandez on 15 Nov 2011 at 7:50

GoogleCodeExporter commented 9 years ago
With 0.99.1-SNAPSHOT, I got the following exception (complete stack trace 
attached). It may be related to version incompatibility between Mongo Java 
Driver and Morphia version however I'm not sure. What do you think?

----------
Stack Trace:

Caused by: java.lang.NoClassDefFoundError: org/bson/BasicBSONEncoder
    at com.google.code.morphia.Morphia.<init>(Morphia.java:46)
    at com.google.code.morphia.Morphia.<init>(Morphia.java:42)
    at play.modules.morphia.MorphiaPlugin.onConfigurationRead(MorphiaPlugin.java:231)
        [...]
Caused by: java.lang.ClassNotFoundException: org.bson.BasicBSONEncoder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        [...]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 9 more

Original comment by ahmetalp...@gmail.com on 15 Nov 2011 at 8:10

Attachments:

GoogleCodeExporter commented 9 years ago
Yes, you need the 2.7.x driver

Original comment by scotthernandez on 15 Nov 2011 at 8:14

GoogleCodeExporter commented 9 years ago
Exactly the same exception persists on mongo-2.7.2.jar & 
morphia-0.99.1-SNAPSHOT.jar. 

Original comment by ahmetalp...@gmail.com on 15 Nov 2011 at 8:25

GoogleCodeExporter commented 9 years ago
This issue was closed by revision r1781.

Original comment by scotthernandez on 16 Nov 2011 at 4:57

GoogleCodeExporter commented 9 years ago
Thanks. However I checked out the code and then tried to mvn install and got 
the following:

[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project com.google.code.morphia:morphia:0.99.1-SNAPSHOT 
(/Users/alp/morphia-read-only/morphia/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM: Failure to find 
com.google.code.morphia:morphia-parent:pom:1.2 in http://repo1.maven.org/maven2 
was cached in the local repository, resolution will not be reattempted until 
the update interval of central has elapsed or updates are forced and 
'parent.relativePath' points at wrong local POM @ line 4, column 10 -> [Help 2]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e 
switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.

When are you going to take next snapshot?

Original comment by ahmetalp...@gmail.com on 16 Nov 2011 at 11:49