You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Daniel Watrous <dw...@gmail.com> on 2013/07/18 19:24:59 UTC

Last cause: can't serialize class $Proxy23

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

Re: Last cause: can't serialize class $Proxy23

Posted by Dan Retzlaff <dr...@gmail.com>.
No, Wicket is not trying to serialize your DAO. The exception occurs in the
action phase of the request handling. It looks like you've passed an object
to MongoDB which has a reference to the @Injected DAO, or at least to the
component that has the DAO. It's this MongoDB DefaultDBEncoder.writeObject
thing that's serializing/encoding something it shouldn't.

If it's not clear by inspection how the object being passed to save() holds
a reference (e.g. by being an inner class) then set a breakpoint and the
debugger should point to the offending reference.


On Thu, Jul 18, 2013 at 2:34 PM, Daniel Watrous <dw...@gmail.com>wrote:

> 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 <dwmaillist@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
> >
>

Re: Last cause: can't serialize class $Proxy23

Posted by Gabriel Landon <gl...@piti.pf>.
Your DAO is declare in your form and you use it inside an inner method, so
yes, wicket is going to serrialize it.

I think you should use @SpringBean, instead of @inject.




--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Last-cause-can-t-serialize-class-Proxy23-tp4660352p4660358.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Last cause: can't serialize class $Proxy23

Posted by Daniel Watrous <dw...@gmail.com>.
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 <dw...@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
>