I’ve got an enum type called AssetType which is part of a custom class called Asset. I’ve setup Asset in a Form using BeanItem(). When I do a form commit() I get:
om.vaadin.event.ListenerMethod$MethodException
Cause: com.vaadin.data.Buffered$SourceException
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1193)
at com.vaadin.ui.Button.fireClick(Button.java:539)
at com.vaadin.ui.Button.changeVariables(Button.java:206)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1299)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1219)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:735)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.vaadin.data.Buffered$SourceException
at com.vaadin.ui.Form.commit(Form.java:365)
at vortex.console.ui.AssetEditor$1.buttonClick(AssetEditor.java:76)
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 com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:490)
... 35 more
Caused by: com.vaadin.data.Buffered$SourceException
at com.vaadin.ui.AbstractField.commit(AbstractField.java:246)
at com.vaadin.ui.Form.commit(Form.java:339)
... 41 more
Caused by: com.vaadin.data.Property$ConversionException: java.lang.NoSuchMethodException: vortex.model.AssetType.<init>(java.lang.String)
at com.vaadin.data.util.MethodProperty.convertValue(MethodProperty.java:697)
at com.vaadin.data.util.MethodProperty.setValue(MethodProperty.java:666)
at com.vaadin.ui.AbstractField.commit(AbstractField.java:241)
... 42 more
Caused by: java.lang.NoSuchMethodException: vortex.model.AssetType.<init>(java.lang.String)
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getConstructor(Class.java:1657)
at com.vaadin.data.util.MethodProperty.convertValue(MethodProperty.java:690)
... 44 more
The AssetType type is auto-generated using Texo (see below).
I can probably modify AssetType but I’m not sure what method is missing that is needed to avoid the NoSUchMethodException. Suggestions???
Thanks in advance,
mike
public enum AssetType {
NOTSET(0, "NOTSET", "NOTSET") {
/**
* @return always true for this instance
* @generated
*/
@Override
public boolean isNOTSET() {
return true;
}
},
HARDWARE(1, "Hardware", "Hardware") {
/**
* @return always true for this instance
* @generated
*/
@Override
public boolean isHardware() {
return true;
}
},
SOFTWARE(2, "Software", "Software") {
/**
* @return always true for this instance
* @generated
*/
@Override
public boolean isSoftware() {
return true;
}
};
private static final AssetType[] VALUES_ARRAY = new AssetType[]
{ NOTSET,
HARDWARE, SOFTWARE };
public static final List<AssetType> VALUES = Collections
.unmodifiableList(Arrays.asList(VALUES_ARRAY));
public static AssetType get(String literal) {
for (int i = 0; i < VALUES_ARRAY.length; ++i) {
AssetType result = VALUES_ARRAY[i]
;
if (result.toString().equals(literal)) {
return result;
}
}
return null;
}
public static AssetType getByName(String name) {
for (int i = 0; i < VALUES_ARRAY.length; ++i) {
AssetType result = VALUES_ARRAY[i]
;
if (result.getName().equals(name)) {
return result;
}
}
return null;
}
public static AssetType get(int value) {
for (AssetType enumInstance : VALUES_ARRAY) {
if (enumInstance.getValue() == value) {
return enumInstance;
}
}
return null;
}
private final int value;
private final String name;
private final String literal;
private AssetType(int value, String name, String literal) {
this.value = value;
this.name = name;
this.literal = literal;
}
public boolean isNOTSET() {
return false;
}
public boolean isHardware() {
return false;
}
public boolean isSoftware() {
return false;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
public String getLiteral() {
return literal;
}
@Override
public String toString() {
return literal;
}
}
It’s a public constructor with a String argument that is missing in AssetType. But it’s not even possible to add public constructor for enum.
I assume that you use
DefaultFieldFactory for your form. It will create a
TextField for a enum typed field. And
BeanItem will use
MethodProperty for all properties in the item. When you commit the form, it will try to set a String value read from the TextFIeld to the datasource. And finally MethodProperty fails to convert String to a Enum.
Create your own FieldFactory for the form that can handle enums. For example, TextField could be changed to ComboBox which can handle enums without any problems. See sample code of FieldFactory implementation at
Sampler .
com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in com.colureware.vaadin.mvp.views.entity.AbstractEntityEditView$1 failed.
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
at com.vaadin.ui.Button.fireClick(Button.java:567)
at com.vaadin.ui.Button.changeVariables(Button.java:223)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:325)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
at com.colureware.vaadin.application.servlet.VaadinApplicationStartupServlet.service(VaadinApplicationStartupServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.vaadin.data.Buffered$SourceException
at com.vaadin.ui.Form.commit(Form.java:365)
at com.colureware.vaadin.mvp.views.entity.AbstractEntityEditView.save(AbstractEntityEditView.java:251)
at com.colureware.vaadin.mvp.views.entity.AbstractEntityEditView$1.buttonClick(AbstractEntityEditView.java:149)
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:606)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
… 36 more
Caused by: com.vaadin.data.Buffered$SourceException
at org.vaadin.addon.customfield.CustomField.commit(CustomField.java:186)
at com.vaadin.ui.Form.commit(Form.java:339)
… 43 more
Caused by: com.vaadin.data.Property$ConversionException: java.lang.NoSuchMethodException: java.util.Set.(java.lang.String)
at com.vaadin.data.util.MethodProperty.convertValue(MethodProperty.java:695)
at com.vaadin.data.util.MethodProperty.setValue(MethodProperty.java:664)
at org.vaadin.addon.customfield.CustomField.commit(CustomField.java:180)
… 44 more
Caused by: java.lang.NoSuchMethodException: java.util.Set.(java.lang.String)
at java.lang.Class.getConstructor0(Class.java:2892)
at java.lang.Class.getConstructor(Class.java:1723)
at com.vaadin.data.util.MethodProperty.convertValue(MethodProperty.java:688)
… 46 more