DragAndDropWrapper not working in COMPONENT_OTHER mode

Hi all,

When I use DragAndDropWrapper with DragStartMode.COMPONENT_OTHER always this exception is thrown (it works with other modes):

java.lang.RuntimeException: [b]
Component must be attached to a session when getConnectorId() is called for the first time
[/b]
    at com.vaadin.server.AbstractClientConnector.getConnectorId(AbstractClientConnector.java:432)
    at com.vaadin.ui.DragAndDropWrapper.paintContent(DragAndDropWrapper.java:241)
    at com.vaadin.server.LegacyPaint.paint(LegacyPaint.java:65)
    at com.vaadin.server.communication.LegacyUidlWriter.write(LegacyUidlWriter.java:82)
    at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:139)
    at com.vaadin.server.communication.UIInitHandler.getInitialUidl(UIInitHandler.java:285)
    at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:80)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:122)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:170)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Source code:

@Override
    protected void init(VaadinRequest request) {
        DragAndDropWrapper w = new DragAndDropWrapper(new Label("TEST"));
        w.setSizeFull();
        w.setDragStartMode(DragStartMode.COMPONENT);
        w.setDragImageComponent(new Label("Drag Image Test!"));
        
        setContent(w);
        setSizeFull();
    }

What am I doing wrong?

Hi, the setDragImageComponent is a rather interesting feature. You actually cannot use just any component as the drag image; it must be a reference to some component that already exists in the component hierarchy. Typically some descendant of the DragAndDropWrapper in question itself so, for instance, if the wrapper contains a layout, you can set one of the layout’s children as the drag image.