I’m having trouble pinning down the cause of a RuntimeException in a Wicket application. I’ve set numerous breakpoints, but none are firing when I submit my form, only when the form is loading. Here’s the stack:
WicketMessage: No get method defined for class: class this.is.my.class.WicketDocumentModel expression: DocumentUpload
Root cause:
org.apache.wicket.WicketRuntimeException: No get method defined for class: class this.is.my.class.WicketDocumentModel expression: DocumentUpload
at org.apache.wicket.util.lang.PropertyResolver.getGetAndSetter(PropertyResolver.java:445)
at org.apache.wicket.util.lang.PropertyResolver.getObjectAndGetSetter(PropertyResolver.java:287)
at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:90)
at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:117)
at org.apache.wicket.Component.getDefaultModelObject(Component.java:1664)
at org.apache.wicket.Component$3.compare(Component.java:548)
at org.apache.wicket.Component.setDefaultModelObject(Component.java:3049)
at org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1168)
at org.apache.wicket.markup.html.form.upload.FileUploadField.updateModel(FileUploadField.java:100)
at org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:225)
at org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:514)
at org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:493)
at org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrder(FormComponent.java:465)
at org.apache.wicket.markup.html.form.Form.internalUpdateFormComponentModels(Form.java:2051)
at org.apache.wicket.markup.html.form.Form.updateFormComponentModels(Form.java:2019)
at org.apache.wicket.markup.html.form.Form.process(Form.java:984)
at org.apache.wicket.markup.html.form.Form.process(Form.java:911)
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:876)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:182)
at org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget.java:73)
at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:456)
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:289)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
I did find discussion about a similar issue here, but I haven’t quite been able to turn the advice presented there into a solution for my situation. My class does not contain a Java variable named DocumentUpload, but does contain this:
fuf = new FileUploadField("DocumentUpload");
I spent several hours on this issue, and once again, I figured it out 20 minutes after I posted to SO about it. The fix is to turn the upload field declaration into one that provides a model, like this:
EDIT: It turns out this was related to 1.3 -> 1.4 migration. Per the migration guide,