I found that having my DAO implement Serializable got me past the exception.
Is Wicket attempting to serialize my DAO? On Thu, Jul 18, 2013 at 11:24 AM, Daniel Watrous <dwmaill...@gmail.com>wrote: > My Wicket application uses Guice for DI and some AOP. I have successfully > injected a DAO and used that to display records. However, when I try to > save a new record in my form, I get the following exception > > ------------------------------------ > > Root cause: > > java.lang.IllegalArgumentException: can't serialize class $Proxy23 > at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:270) > at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:174) > > at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:226) > at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:174) > at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:226) > > at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:174) > at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:120) > at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27) > > at com.mongodb.OutMessage.putObject(OutMessage.java:289) > at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:239) > at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:204) > at com.mongodb.DBCollection.insert(DBCollection.java:148) > > at com.mongodb.DBCollection.insert(DBCollection.java:91) > at com.mongodb.DBCollection.save(DBCollection.java:810) > at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:731) > at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:793) > > at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:787) > at > com.hp.honeybadger.persistence.dao.morphia.MorphiaCnavUrlDAO.save(MorphiaCnavUrlDAO.java:50) > at java.lang.reflect.Method.invoke(Method.java:601) > > at > org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:435) > at $Proxy23.save(Unknown Source) > at com.hp.honeybadger.console.forms.CnavForm$1.onSubmit(CnavForm.java:72) > > at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1253) > at org.apache.wicket.markup.html.form.Form.process(Form.java:925) > at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:771) > > at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:704) > at java.lang.reflect.Method.invoke(Method.java:601) > at > org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258) > > at > org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:216) > at > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:240) > > at > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:226) > at > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:854) > > at > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) > at > org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:254) > at > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:211) > > at > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:282) > at > org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) > at > org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) > > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) > at > com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163) > at > com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) > > at > com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) > at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1332) > > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) > at > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524) > > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406) > > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) > > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) > at org.eclipse.jetty.server.Server.handle(Server.java:348) > at > org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452) > > at > org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47) > at > org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:894) > at > org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:948) > > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) > at > org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:66) > > at > org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:254) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) > > at java.lang.Thread.run(Thread.java:722) > > Complete stack: > > org.apache.wicket.WicketRuntimeException: Method onFormSubmitted of interface > org.apache.wicket.markup.html.form.IFormSubmitListener targeted at [CnavForm > [Component id = cnavForm]] on component [CnavForm [Component id = cnavForm]] > threw an exception > > at > org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268) > at > org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:216) > at > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:240) > > at > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:226) > at > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:854) > > at > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) > at > org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:254) > at > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:211) > > at > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:282) > at > org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) > > java.lang.reflect.InvocationTargetException > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at java.lang.reflect.Method.invoke(Method.java:601) > at > org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258) > > at > org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:216) > at > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:240) > > at > org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:226) > at > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:854) > > at > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) > at > org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:254) > at > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:211) > > at > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:282) > at > org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) > > > This is the Form class. It never makes it past the line > "cnavUrlDAO.save(cnavUrl);" > > public class CnavForm extends Form { > > @Inject private CnavUrlDAO cnavUrlDAO; > > class MorphiaCnavUrlModel extends MorphiaCnavUrl implements > Serializable {} > > public CnavForm(String id) { > super(id); > CnavUrl cnavUrl = new MorphiaCnavUrlModel(); > setModel(new Model((Serializable) cnavUrl)); > > add(new TextField("url", new PropertyModel(cnavUrl, "URL")) > .setRequired(true) > .add(new UrlValidator())); > add(new HiddenField("objectid", new PropertyModel(cnavUrl, "id"))); > > add(new Button("publish") { > @Override > public void onSubmit() { > CnavUrl cnavUrl = (CnavUrl) CnavForm.this.getModelObject(); > // check for existing record to know if this is a create > or update > if (((MorphiaCnavUrlModel)cnavUrl).getId() == null) { > // create > cnavUrlDAO.save(cnavUrl); > } else { > // update > cnavUrlDAO.save(cnavUrl); > } > } > }); > } > } > > Any idea what could be going on? It may be related to this: > > http://apache-wicket.1842946.n4.nabble.com/Unserializable-exceptions-on-declaring-springs-org-springframework-dao-annotation-PersistenceExceptir-td3172785.html > > Thanks, > Daniel >