Own unique id not work

227 views
Skip to first unread message

Michael Nahberger

unread,
Feb 19, 2013, 3:11:02 PM2/19/13
to jongo...@googlegroups.com
Hello,

i have my own DAO-Objekt like this:

public class FooDAO {
@Id
private String myId;
private String bar;
public FooDAO () {}
public String getMyId() {return myId;}
public void setMyId(String myId) {this.myId = myId;}
public String getBar() {return bar;}
public void setBar(String bar) {this.bar= bar;}
}

and my code to save new object:

MongoCollection myColl .....

MyDAO my = new MyDAO ();
my.setMyId([#MY_OWN_GENERATED_SHORT_UNIQUE_ID]);
my.setBar("foo");

myColl.save(my);



now here is the problem. The save methode throws this exception:

Unable to save object ... due to a marshalling error


What do i wrong? How can i genrate my own unique id?

Benoît GUEROUT

unread,
Feb 19, 2013, 3:41:28 PM2/19/13
to jongo...@googlegroups.com
Hello,

Can you post the exception stack trace ?

--
You received this message because you are subscribed to the Google Groups "Jongo" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jongo-user+...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Michael Nahberger

unread,
Feb 19, 2013, 5:55:26 PM2/19/13
to jongo...@googlegroups.com
java.lang.IllegalArgumentException: Unable to save object [...] due to a marshalling error
at org.jongo.Save.marshallDocument(Save.java:80)
at org.jongo.Save.createDBObjectToUpdate(Save.java:60)
at org.jongo.Save.execute(Save.java:53)
at org.jongo.MongoCollection.save(MongoCollection.java:123)
...
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
at com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor.intercept(AnnotationWorkflowInterceptor.java:135)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.jongo.marshall.MarshallingException: Unable to marshall [ansi: B005C2SDXM | created: Tue Feb 19 23:53:51 CET 2013] into bson
at org.jongo.marshall.jackson.JacksonEngine.marshall(JacksonEngine.java:55)
at org.jongo.Save.marshallDocument(Save.java:77)
... 59 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: invalid ObjectId [B005C2SDXM] (through reference chain: de.compidev.bestprice.model.ItemDAO["_id"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:183)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:559)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:143)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:120)
at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:610)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:497)
at org.jongo.marshall.jackson.JacksonEngine.marshall(JacksonEngine.java:53)
... 60 more
Caused by: java.lang.IllegalArgumentException: invalid ObjectId [B005C2SDXM]
at org.bson.types.ObjectId.<init>(ObjectId.java:128)
at org.bson.types.ObjectId.<init>(ObjectId.java:122)
at org.jongo.marshall.jackson.id.ObjectIdSerializer.serialize(ObjectIdSerializer.java:30)
at org.jongo.marshall.jackson.id.ObjectIdSerializer.serialize(ObjectIdSerializer.java:26)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:544)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:551)
... 65 more

Benoît GUEROUT

unread,
Feb 20, 2013, 8:00:18 AM2/20/13
to jongo...@googlegroups.com
An issue has been created : https://github.com/bguerout/jongo/issues/109

--

Ryan Shelley

unread,
Jun 9, 2013, 4:39:48 AM6/9/13
to jongo...@googlegroups.com
So I've tried this tonight and I get:

com.ticketmaster.orderwe.exception.DataAccessException: java.lang.IllegalArgumentException: Unable to insert pojo with Id. Use save() method instead.
at com.ticketmaster.orderwe.persistence.dao.impl.WorkflowTaskDao.saveTasks(WorkflowTaskDao.java:223)
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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
at com.ticketmaster.cop.performance.PerfInstrumentAspect.doPerformanceInstrumentation(PerfInstrumentAspect.java:22)
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 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy118.saveTasks(Unknown Source)
at com.ticketmaster.orderwe.persistence.dao.WorkflowTaskModelIT.testUpdateState(WorkflowTaskModelIT.java:128)
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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.IllegalArgumentException: Unable to insert pojo with Id. Use save() method instead.
at org.jongo.Insert.insert(Insert.java:62)
at org.jongo.MongoCollection.insert(MongoCollection.java:136)
at com.ticketmaster.orderwe.persistence.dao.impl.WorkflowTaskDao.saveTasks(WorkflowTaskDao.java:220)
... 53 more

My code looks like:

@JsonProperty("_id")
private String id;

Using Jongo 0.4. Not sure what's wrong with that?

Mark Lewis

unread,
Jun 9, 2013, 10:37:17 AM6/9/13
to jongo...@googlegroups.com
On Sun, Jun 9, 2013 at 1:39 AM, Ryan Shelley <rfshe...@gmail.com> wrote:
So I've tried this tonight and I get:

... 
Caused by: java.lang.IllegalArgumentException: Unable to insert pojo with Id. Use save() method instead. at org.jongo.Insert.insert(Insert.java:62)
at org.jongo.MongoCollection.insert(MongoCollection.java:136)
at com.ticketmaster.orderwe.persistence.dao.impl.WorkflowTaskDao.saveTasks(WorkflowTaskDao.java:220)
... 53 more
... 
 

It looks like your code is calling the .insert() method to save data.  .insert() will throw this exception if an object with the specified ID already exists.  You should either get rid of the object first (if it's not expected to be there but showed up in testing somehow), or change the code to use .save(), which will either insert the object if not present or update it if it is. 

Ryan Shelley

unread,
Jun 9, 2013, 1:27:19 PM6/9/13
to jongo...@googlegroups.com, ma...@fortressofgeekdom.org
Yeah, I tried that, and while I don't get an error, I also don't get a record inserted. I thought maybe I needed an "upsert" set, but I don't think I can do that on a "save."

My WriteResult reads:

{ "serverUsed" : "localhost:27017" , "n" : 0 , "lastOp" : { "$ts" : 1370798653 , "$inc" : 1} , "connectionId" : 75726 , "err" :  null  , "ok" : 1.0}

Ryan Shelley

unread,
Jun 9, 2013, 1:49:14 PM6/9/13
to jongo...@googlegroups.com
I'm on the road but something came to me that might be relevant. I'm trying to batch insert, so I'm passing an array to insert or save. Save doesn't error, so I may be inserting the array as an object and not each element as individual objects.

Ryan Shelley

unread,
Jun 9, 2013, 4:06:06 PM6/9/13
to jongo...@googlegroups.com
So that was it. Is there possibly a way to support batch insert with a custom "_id"?

Benoît GUEROUT

unread,
Jun 10, 2013, 7:06:52 AM6/10/13
to jongo...@googlegroups.com
Hi,

You are right, batch insertions in v0.4 is a bit too restrictive.
This has been relaxed in v0.5, here is an early version 
**This version must be considered as a SNAPSHOT of future 0.5 release**

<dependencies>
  <dependency>
    <groupId>org.jongo</groupId>
    <artifactId>jongo</artifactId>
    <version>0.5-early-20130531-1529</version>
  </dependency>
</dependencies>
...
<repositories>
    <repository>
       <id>cloudbees-jongo-early-release</id>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

Ryan Shelley

unread,
Jun 10, 2013, 10:31:48 PM6/10/13
to jongo...@googlegroups.com
Ah, ok. Good to know. I can't use a snapshot in my release right now, so I'll stick with a for loop, and upgrade to 0.5 when it's released.

Thanks for helping troubleshoot this with me!
Reply all
Reply to author
Forward
0 new messages