java - Getting null pointer when using autowire for EventBus.UIEvent in vaadin application using springboot -
i using vaadin springboot , getting null pointer when using autowire eventbus.uieventbus.
i have vaadinsessionscope bean in application of springboot. , able create eventbus.uieventbus eventbus in main ui class.
what trying in below code pass event loginview main vaadin ui class. , null pointer eventbus.uieventbus eventbus auto wired.
any input appreciated . thank you.
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>org.pk.connect2x</groupid> <artifactid>connect2x</artifactid> <version>0.0.1-snapshot</version> <packaging>war</packaging> <name>connect2x</name> <description>get data source destination.</description> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.2.5.release</version> <relativepath/> <!-- lookup parent repository --> </parent> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <dependency> <groupid>com.vaadin</groupid> <artifactid>vaadin-spring-boot-starter</artifactid> <version>1.0.0.beta3</version> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-tomcat</artifactid> <version>1.2.4.release</version> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>org.vaadin.spring</groupid> <artifactid>spring-vaadin-eventbus</artifactid> <version>0.0.5.release</version> </dependency> <dependency> <groupid>org.atmosphere</groupid> <artifactid>atmosphere-runtime</artifactid> <version>2.4.0-rc1</version> </dependency> </dependencies> <dependencymanagement> <dependencies> <dependency> <groupid>com.vaadin</groupid> <artifactid>vaadin-bom</artifactid> <version>7.4.5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project> below springboot application class
package connect2x; import com.vaadin.spring.internal.vaadinsessionscope; import org.atmosphere.cpr.sessionsupport; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.context.embedded.embeddedservletcontainerfactory; import org.springframework.boot.context.embedded.tomcat.tomcatembeddedservletcontainerfactory; import org.springframework.context.annotation.bean; import org.vaadin.spring.events.eventbus; import org.vaadin.spring.events.annotation.enablevaadineventbus; import org.vaadin.spring.events.support.applicationcontexteventbroker; @springbootapplication @enablevaadineventbus public class connect2xapplication { @autowired eventbus.applicationeventbus applicationeventbus; @bean applicationcontexteventbroker applicationcontexteventbroker() { return new applicationcontexteventbroker(applicationeventbus); } @bean public sessionsupport atmospheresessionsupport() { return new sessionsupport(); } @bean static vaadinsessionscope vaadinsessionscope() { return new vaadinsessionscope(); } @bean public embeddedservletcontainerfactory servletcontainer() { tomcatembeddedservletcontainerfactory factory = new tomcatembeddedservletcontainerfactory(); return factory; } public static void main(string[] args) { springapplication.run(connect2xapplication.class, args); } } below main ui class, there no null pointer eventbus
package connect2x; import com.vaadin.annotations.theme; import com.vaadin.server.responsive; import com.vaadin.server.vaadinrequest; import com.vaadin.spring.annotation.springui; import com.vaadin.ui.ui; import com.vaadin.ui.themes.valotheme; import connect2x.com.pk.connect2x.view.login; import connect2x.com.pk.connect2x.view.mainview; import org.springframework.beans.factory.annotation.autowired; import org.vaadin.spring.events.eventbus; import org.vaadin.spring.events.eventbuslistener; import java.util.locale; /** * created karthikmarupeddi on 7/18/15. */ @springui @theme("valo") public class connect2xui extends ui implements eventbuslistener<object> { @autowired eventbus.uieventbus eventbus; @autowired login login; @override protected void init(vaadinrequest vaadinrequest) { setlocale(locale.us); responsive.makeresponsive(this); addstylename(valotheme.ui_with_menu); updatecontent(); } /** * updates correct content ui based on current user status. * if user logged in appropriate privileges, main view shown. * otherwise login view shown. */ private void updatecontent() { // user user = (user) vaadinsession.getcurrent().getattribute( // user.class.getname()); // if (user != null && "admin".equals(user.getrole())) { // // authenticated user // setcontent(new mainview()); // removestylename("loginview"); // getnavigator().navigateto(getnavigator().getstate()); // } else { // //setcontent(loginview); // setcontent(new mainview()); // addstylename("loginview"); // } setcontent(login); addstylename("loginview"); } /** * called when event has been received. * * @param event event, never {@code null}. */ @override public void onevent(org.vaadin.spring.events.event<object> event) { system.out.println("****************printing data***************" ); setcontent(new mainview()); removestylename("loginview"); getnavigator().navigateto(getnavigator().getstate()); } } login java class getting null pointer eventbus
package connect2x.com.pk.connect2x.view; import com.vaadin.event.shortcutaction; import com.vaadin.server.fontawesome; import com.vaadin.server.responsive; import com.vaadin.spring.annotation.springcomponent; import com.vaadin.spring.annotation.uiscope; import com.vaadin.ui.*; import com.vaadin.ui.themes.valotheme; import org.springframework.beans.factory.annotation.autowired; import org.vaadin.spring.events.eventbus; import org.vaadin.spring.events.eventbuslistener; /** * created karthikmarupeddi on 7/18/15. */ @uiscope @springcomponent public class login extends verticallayout implements eventbuslistener<object> { @autowired eventbus.uieventbus eventbus; public login() { eventbus.subscribe(this); setsizefull(); component loginform = buildloginform(); addcomponent(loginform); setcomponentalignment(loginform, alignment.middle_center); } private component buildloginform() { final verticallayout loginpanel = new verticallayout(); loginpanel.setsizeundefined(); loginpanel.setspacing(true); responsive.makeresponsive(loginpanel); loginpanel.addstylename("login-panel"); loginpanel.addcomponent(buildlabels()); loginpanel.addcomponent(buildfields()); loginpanel.addcomponent(new checkbox("remember me", true)); return loginpanel; } private component buildlabels() { csslayout labels = new csslayout(); labels.addstylename("labels"); label welcome = new label("welcome"); welcome.setsizeundefined(); welcome.addstylename(valotheme.label_h4); welcome.addstylename(valotheme.label_colored); labels.addcomponent(welcome); label title = new label("connect2x"); title.setsizeundefined(); title.addstylename(valotheme.label_h3); title.addstylename(valotheme.label_light); labels.addcomponent(title); return labels; } private component buildfields() { horizontallayout fields = new horizontallayout(); fields.setspacing(true); fields.addstylename("fields"); final textfield username = new textfield("username"); username.seticon(fontawesome.user); username.addstylename(valotheme.textfield_inline_icon); final passwordfield password = new passwordfield("password"); password.seticon(fontawesome.lock); password.addstylename(valotheme.textfield_inline_icon); final button signin = new button("sign in"); signin.addstylename(valotheme.button_primary); signin.setclickshortcut(shortcutaction.keycode.enter); signin.focus(); fields.addcomponents(username, password, signin); fields.setcomponentalignment(signin, alignment.bottom_left); signin.addclicklistener(new button.clicklistener() { @override public void buttonclick(final button.clickevent event) { system.out.println("*************click listener **************"); eventbus.publish(login.this, "hello world ui"); removestylename("loginview"); } }); return fields; } /** * called when event has been received. * * @param event event, never {@code null}. */ @override public void onevent(org.vaadin.spring.events.event<object> event) { system.out.println("*************click listener **************"); } }
i think should implementing initializingbean interface , override afterpropertiesset method subscribe eventbus.
@override public void afterpropertiesset() throws exception { this.eventbus.subscribe(this); } please check out code too: https://github.com/joshlong/vaadin-and-spring-talk/
Comments
Post a Comment