java - Getting NPE with a Spring REST Service -
i'm building rest service toggle switch between true , false. works singleton i'm trying convert spring application. appreciated. did clean, -u, deleted whole mvn repository , still npe when accessing flag.
when - don't response or npe if try accessing when post -i'm getting sent still not sure if it's updating.
i have 2 classes:
switchflag.java
import org.springframework.stereotype.service; @service public class switchflag { private boolean flag; public boolean getflag() { return flag; } public void setflag(boolean flag) { this.flag = flag; } @override public string tostring() { return "{\"flag\":" + flag +"}"; } } switchflagservice.java
import javax.ws.rs.consumes; import javax.ws.rs.get; import javax.ws.rs.post; import javax.ws.rs.path; import javax.ws.rs.produces; import javax.ws.rs.core.mediatype; import javax.ws.rs.core.response; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; @path("/flag") public class switchflagservice { @autowired switchflag switchflag; @get @path("/get") @produces(mediatype.application_json) public switchflag getflag() { return switchflag; } @post @path("/post") @consumes(mediatype.application_json) public response setflag(switchflag flag) { return response.status(201).entity(flag).build(); } } my web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app id="switchflag" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>flag control</display-name> <context-param> <param-name>resteasy.resources</param-name> <param-value>switchflagservice</param-value> </context-param> <listener> <listener-class> org.jboss.resteasy.plugins.server.servlet.resteasybootstrap</listener-class> </listener> <servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.httpservletdispatcher</servlet-class> </servlet> <servlet-mapping> <servlet-name>resteasy-servlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> and finally, snippet of pom.xml - removed dependencies don't need shown such httpcomponents , json
<dependencies> <dependency> <groupid>org.jboss.resteasy</groupid> <artifactid>resteasy-jaxrs</artifactid> <version>3.0.19.final</version> </dependency> <dependency> <groupid>org.jboss.resteasy</groupid> <artifactid>resteasy-jackson-provider</artifactid> <version>3.0.19.final</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>4.3.3.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>4.3.3.release</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactid>maven-compiler-plugin</artifactid> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> much appreciated
and stack trace :)
2016-11-10 17:02:17.808:warn:oejs.servlethandler:qtp953305190-13: /logflag/flag/get org.jboss.resteasy.spi.unhandledexception: java.lang.nullpointerexception @ org.jboss.resteasy.core.exceptionhandler.handleapplicationexception(exceptionhandler.java:77) @ org.jboss.resteasy.core.exceptionhandler.handleexception(exceptionhandler.java:220) @ org.jboss.resteasy.core.synchronousdispatcher.writeexception(synchronousdispatcher.java:175) @ org.jboss.resteasy.core.synchronousdispatcher.invoke(synchronousdispatcher.java:418) @ org.jboss.resteasy.core.synchronousdispatcher.invoke(synchronousdispatcher.java:209) @ org.jboss.resteasy.plugins.server.servlet.servletcontainerdispatcher.service(servletcontainerdispatcher.java:221) @ org.jboss.resteasy.plugins.server.servlet.httpservletdispatcher.service(httpservletdispatcher.java:56) @ org.jboss.resteasy.plugins.server.servlet.httpservletdispatcher.service(httpservletdispatcher.java:51) @ javax.servlet.http.httpservlet.service(httpservlet.java:790) @ org.eclipse.jetty.servlet.servletholder.handle(servletholder.java:808) @ org.eclipse.jetty.servlet.servlethandler.dohandle(servlethandler.java:587) @ org.eclipse.jetty.server.handler.scopedhandler.handle(scopedhandler.java:143) @ org.eclipse.jetty.security.securityhandler.handle(securityhandler.java:577) @ org.eclipse.jetty.server.session.sessionhandler.dohandle(sessionhandler.java:223) @ org.eclipse.jetty.server.handler.contexthandler.dohandle(contexthandler.java:1127) @ org.eclipse.jetty.servlet.servlethandler.doscope(servlethandler.java:515) @ org.eclipse.jetty.server.session.sessionhandler.doscope(sessionhandler.java:185) @ org.eclipse.jetty.server.handler.contexthandler.doscope(contexthandler.java:1061) @ org.eclipse.jetty.server.handler.scopedhandler.handle(scopedhandler.java:141) @ org.eclipse.jetty.server.handler.handlerlist.handle(handlerlist.java:52) @ org.eclipse.jetty.server.handler.handlerwrapper.handle(handlerwrapper.java:97) @ org.eclipse.jetty.server.server.handle(server.java:499) @ org.eclipse.jetty.server.httpchannel.handle(httpchannel.java:310) @ org.eclipse.jetty.server.httpconnection.onfillable(httpconnection.java:257) @ org.eclipse.jetty.io.abstractconnection$2.run(abstractconnection.java:540) @ org.eclipse.jetty.util.thread.queuedthreadpool.runjob(queuedthreadpool.java:635) @ org.eclipse.jetty.util.thread.queuedthreadpool$3.run(queuedthreadpool.java:555) @ java.lang.thread.run(thread.java:745) caused by: java.lang.nullpointerexception @ com.bcn.rest.switchflagservice.getflag(switchflagservice.java:25) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ org.jboss.resteasy.core.methodinjectorimpl.invoke(methodinjectorimpl.java:139) @ org.jboss.resteasy.core.resourcemethodinvoker.invokeontarget(resourcemethodinvoker.java:295) @ org.jboss.resteasy.core.resourcemethodinvoker.invoke(resourcemethodinvoker.java:249) @ org.jboss.resteasy.core.resourcemethodinvoker.invoke(resourcemethodinvoker.java:236) @ org.jboss.resteasy.core.synchronousdispatcher.invoke(synchronousdispatcher.java:402) @ org.jboss.resteasy.core.synchronousdispatcher.invoke(synchronousdispatcher.java:209) @ org.jboss.resteasy.plugins.server.servlet.servletcontainerdispatcher.service(servletcontainerdispatcher.java:221) @ org.jboss.resteasy.plugins.server.servlet.httpservletdispatcher.service(httpservletdispatcher.java:56) @ org.jboss.resteasy.plugins.server.servlet.httpservletdispatcher.service(httpservletdispatcher.java:51) @ javax.servlet.http.httpservlet.service(httpservlet.java:790) @ org.eclipse.jetty.servlet.servletholder.handle(servletholder.java:808) @ org.eclipse.jetty.servlet.servlethandler.dohandle(servlethandler.java:587) @ org.eclipse.jetty.server.handler.scopedhandler.handle(scopedhandler.java:143) @ org.eclipse.jetty.security.securityhandler.handle(securityhandler.java:577) @ org.eclipse.jetty.server.session.sessionhandler.dohandle(sessionhandler.java:223) @ org.eclipse.jetty.server.handler.contexthandler.dohandle(contexthandler.java:1127) @ org.eclipse.jetty.servlet.servlethandler.doscope(servlethandler.java:515) @ org.eclipse.jetty.server.session.sessionhandler.doscope(sessionhandler.java:185) @ org.eclipse.jetty.server.handler.contexthandler.doscope(contexthandler.java:1061) @ org.eclipse.jetty.server.handler.scopedhandler.handle(scopedhandler.java:141) @ org.eclipse.jetty.server.handler.handlerlist.handle(handlerlist.java:52) @ org.eclipse.jetty.server.handler.handlerwrapper.handle(handlerwrapper.java:97) @ org.eclipse.jetty.server.server.handle(server.java:499) @ org.eclipse.jetty.server.httpchannel.handle(httpchannel.java:310) @ org.eclipse.jetty.server.httpconnection.onfillable(httpconnection.java:257) @ org.eclipse.jetty.io.abstractconnection$2.run(abstractconnection.java:540) @ org.eclipse.jetty.util.thread.queuedthreadpool.runjob(queuedthreadpool.java:635) @ org.eclipse.jetty.util.thread.queuedthreadpool$3.run(queuedthreadpool.java:555) @ java.lang.thread.run(thread.java:745)
spring container can not inject beans switchflagservice because annotated @path i.e., spring container scans stereotypes @controller, @component, @service, etc. inject beans.
you need change switchflagservice shown below:
@restcontroller public class switchflagservice { @autowired switchflag switchflag; @requestmapping(value="/get", method=requestmethod.get) public switchflag getflag() { return switchflag; } @requestmapping(value="/post", method=requestmethod.post) public responseentity<switchflag> setflag(switchflag flag) { return new responseentity<switchflag>(flag, httpstatus.created); } }
Comments
Post a Comment