why is autowired null? use spring jersey integration -



why is autowired null? use spring jersey integration -

i have application controller method getapplication(). method returns applicationjson objekt client. in method phone call on application builder.

the application builder mill , generate special application builder object. in special application builders used mapper , services, services used daos.

all services , daos sind beans , confirgure in applicationcontext.xml , servicebeans.xml.

when calling method getapplication() exception in eclipse java console.

the problem occurs in class mobileapplicationbuilder , method buildpagenavidata()

class applicationcontroller:

package core.application.controller; import javax.ws.rs.get; import javax.ws.rs.path; import javax.ws.rs.produces; import javax.ws.rs.core.mediatype; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.qualifier; import org.springframework.context.annotation.scope; import org.springframework.stereotype.component; import core.application.builder.applicationbuilder; import core.application.builder.mobileapplicationbuilder; import core.application.factories.applicationcontrollerprocesshelperfactory; import core.application.mapper.json.applicationjson; import core.application.process.helper.mobileapplicationbuildhelper; import core.base.abstracts.controllerabstract; import core.security.model.interfaces.systemsettingsmodelinterface; import core.security.service.interfaces.systemlanguagesserviceinterface; import core.security.service.interfaces.systemsettingsserviceinterface; import core.security.service.interfaces.systemuserserviceinterface; /** * * class: {@link applicationcontroller} * * Über diesen controller wird die anwendung zusammengebaut und als großes json objekt den client geschickt. * */ @path("/app") @component @scope("session") public class applicationcontroller extends controllerabstract { private static final string json_path = system.getproperty("wtp.deploy") + "/decon_fm_version5/web-inf/classes/json/"; @autowired private applicationbuilder applicationbuilder; @autowired @qualifier("systemuserservice") private systemuserserviceinterface systemuserservice; @autowired @qualifier("systemlanguagesservice") private systemlanguagesserviceinterface languagesservice; @autowired @qualifier("systemsettingsservice") private systemsettingsserviceinterface systemsettings; private applicationjson applicationjson = null; private string test; public string gettest() { homecoming test; } public void settest(string test) { this.test = test; } /** * process für den build der gesamten applikation. * es wird ein gemapptes json objekt zurück gegeben welches dann auf dem client verarbeitet werden kann. * größere build logiken werden in eine helper klasse ausgelagert, welche über eine entsprechende mill geladen wird. * @return */ @get @path("/build") @produces(mediatype.application_json + ";charset=utf-8") public applicationjson getapplication() { // auslesen und zuwiesung der user settings systemsettingsmodelinterface settingsmodel = systemsettings.getsettingsbyuser(long.parselong(session.getattribute("iduser").tostring())); systemuserservice.model().setsettings(settingsmodel); applicationbuilder.setclientapp(settingsmodel.getclientview()) .setsession(session) .setusermodel(this.deconsecurity.getuser()); applicationjson = applicationbuilder.build(); homecoming applicationjson; } }

class applicationbuilder:

package core.application.builder; import javax.servlet.http.httpsession; import org.apache.commons.lang.wordutils; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.qualifier; import core.application.mapper.json.applicationjson; import core.security.model.interfaces.systemusermodelinterface; import core.security.service.interfaces.systemlanguagesserviceinterface; public class applicationbuilder { /** * klassennamen suffix für jeden builder */ private static final string class_suffix = "applicationbuilder"; /** * http session objekt aus dem controller */ private httpsession session; /** * client application die vom nutzer eingestellt wurde */ private string clientapp; private systemusermodelinterface usermodel; @autowired @qualifier("systemlanguagesservice") private systemlanguagesserviceinterface languageservice; /** * auszuführender builder gegen interface sicherung */ private applicationbuilderinterface builder; public applicationjson build() { applicationjson application = null; seek { builder = (applicationbuilderinterface) class.forname("core.application.builder." + wordutils.capitalize(clientapp) + class_suffix).newinstance(); builder.setsession(session); builder.setusermodel(usermodel); builder.setlanguages(languageservice.getlanguages()); builder.setfavorite(usermodel.getsettings().getfavorite()); application = builder.build(); } grab (instantiationexception e) { e.printstacktrace(); } grab (illegalaccessexception e) { e.printstacktrace(); } grab (classnotfoundexception e) { e.printstacktrace(); } homecoming application; } public applicationbuilder setclientapp(string clientapp) { this.clientapp = clientapp; homecoming this; } public applicationbuilder setsession(httpsession session) { this.session = session; homecoming this; } public applicationbuilder setusermodel(systemusermodelinterface usermodel) { this.usermodel = usermodel; homecoming this; } }

class mobileapplicationbuilder:

package core.application.builder; import java.io.file; import java.io.ioexception; import java.nio.file.files; import java.nio.file.paths; import java.util.hashmap; import java.util.list; import org.codehaus.jackson.jsonparseexception; import org.codehaus.jackson.map.jsonmappingexception; import org.springframework.context.annotation.scope; import org.springframework.stereotype.component; import core.application.mapper.json.applicationanimatedatajson; import core.application.mapper.json.applicationiconbarjson; import core.application.mapper.json.applicationjson; import core.application.mapper.json.applicationpagenavijson; import core.application.mapper.json.formular; import core.application.mapper.json.mobileapplicationjson; import core.cache.model.interfaces.applicationcachemodelinterface; import core.cache.service.applicationcacheservice; @component @scope("session") public class mobileapplicationbuilder extends applicationbuilderabstract implements applicationbuilderinterface { private static final string json_path = system.getproperty("wtp.deploy") + "/decon_fm_version5/web-inf/classes/json/"; private mobileapplicationjson mapper = new mobileapplicationjson(); @autowired @qualifier("applicationcacheservice") private applicationcacheservice applicationcacheservice; public applicationjson build() { mapper.setstartpage(getfavorite()) .setsystemlangguages(getlanguages()) .setsystemuser(getusermodel()); buildiconbar(); buildanimatedata(); buildpagenavidata(); homecoming mapper; } /** * zusammenbau sämtlicher iconbars im scheme */ protected void buildiconbar() { applicationiconbarjson iconbarmapper = new applicationiconbarjson(); file directory = new file(json_path + "/iconbars/"); file[] files = directory.listfiles(); formular formsmapper = new formular(); (int = 0; < files.length; i++) { seek { byte[] iconbar = files.readallbytes(paths.get(files[i].getabsolutepath())); iconbarmapper = getobjectmapper().readvalue(iconbar, applicationiconbarjson.class); mapper.seticonbars(iconbarmapper.getname().tostring(), iconbarmapper); } grab (ioexception e) { e.printstacktrace(); } } } /** * zusammenbau der animate pages für die application */ protected void buildanimatedata() { applicationanimatedatajson aadnmapper = new applicationanimatedatajson(); seek { byte[] animatedata = files.readallbytes(paths.get(json_path + "anmiate_data.json")); aadnmapper = getobjectmapper().readvalue(animatedata, applicationanimatedatajson.class); mapper.setanimatedata(aadnmapper); } grab (ioexception e) { e.printstacktrace(); } } /** * zusammenbau des objektes für daten der module welche in der applikation verfügbar sein sollen */ protected void buildpagenavidata() { string component = "pagenavidata"; // applicationcacheserviceinterface cacheservice = new applicationcacheservice(); // here arises problem applicationcachemodelinterface cache = applicationcacheservice.getcacheresource( long.parselong(session.getattribute("iduser").tostring()), component, deconsecurity().getuser().getsettings().getclientview()); if (cache == null) { list<applicationpagenavijson> list = null; file directory = new file(json_path + "/pagesnavi/"); file[] files = directory.listfiles(); (int = 0; < files.length; i++) { seek { string key = files[i].getname().substring(0, files[i].getname().indexof(".")); byte[] navi = files.readallbytes(paths.get(files[i].getabsolutepath())); list = getobjectmapper().readvalue(navi, getobjectmapper().gettypefactory().constructcollectiontype( list.class, applicationpagenavijson.class)); mapper.setpagenavidata(key, list); } grab (ioexception e) { e.printstacktrace(); } } // cache module event um die daten für die pagenavi nach rechten zu kontrollieren und entsprechend in den cache zu speichern eventdispatcher().dispatch("cleanandcachepagenavidata", this); } else { seek { hashmap<string, list<applicationpagenavijson>> map = getobjectmapper().readvalue( cache.getjsonobject(), hashmap.class); mapper.setpagenavidata(map); } grab (jsonparseexception e) { e.printstacktrace(); } grab (jsonmappingexception e) { e.printstacktrace(); } grab (ioexception e) { e.printstacktrace(); } } } }

class applicationcacheservice:

package core.cache.service; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.qualifier; import org.springframework.stereotype.service; import core.cache.dao.interfaces.applicationcachedaointerface; import core.cache.model.interfaces.applicationcachemodelinterface; import core.cache.service.interfaces.applicationcacheserviceinterface; /** * class: applicationcacheservice * * service klasse für das verwalten einer application cache speicherung * */ @service public class applicationcacheservice implements applicationcacheserviceinterface { @autowired @qualifier("applicationcachedao") private applicationcachedaointerface cachedao; public void savecacheobject(object obj) { cachedao.savecacheobject(obj); } public boolean iscacheupdated(long id, string applicationcomponent) { homecoming cachedao.iscacheupdated(id, applicationcomponent); } public applicationcachemodelinterface getcacheresource(long iduser, string applicationcomponent, string applicationtype) { homecoming cachedao.getcacheresource(iduser, applicationcomponent, applicationtype); } }

class applicationcachedao:

package core.cache.dao; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.qualifier; import org.springframework.stereotype.repository; import org.springframework.transaction.annotation.transactional; import core.base.abstracts.decondaoabstract; import core.cache.dao.interfaces.applicationcachedaointerface; import core.cache.model.applicationcachemodel; import core.cache.model.interfaces.applicationcachemodelinterface; /** * class: applicationcachedao * * dao klasse für das speichern, auslesen und verwalten der applicationcache tabelle * */ @repository @transactional public class applicationcachedao extends decondaoabstract implements applicationcachedaointerface { public void savecacheobject(object obj) { seek { super.getsession().save(obj); } grab (exception e) { e.printstacktrace(); } } public boolean iscacheupdated(long id, string applicationcomponent) { boolean isupdated = false; string hql = "from applicationcachemodel iduser = " + id + " , applicationcomponent = '" + applicationcomponent + "'"; list<applicationcachemodel> list = super.getsession().createquery(hql).list(); if (list.size() == 0) { isupdated = true; } else { applicationcachemodel obj = list.get(0); if (obj.isupdate() != false) { isupdated = true; } } homecoming isupdated; } public applicationcachemodelinterface getcacheresource(long iduser, string applicationcomponent, string applicationtype) { string hql = "from applicationcachemodel iduser = " + iduser + " , applicationcomponent = '" + applicationcomponent + "' , applicationtype = '" + applicationtype +"'"; list<applicationcachemodel> list = super.getsession().createquery(hql).list(); homecoming (list.size() > 0) ? list.get(0) : null; } }

servicebeans.xml

<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:oxm="http://www.springframework.org/schema/oxm" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd"> <!-- user service --> <bean id="systemuserservice" class="core.security.service.systemuserservice"></bean> <bean id="systemusermodel" class="core.security.model.systemusermodel" /> <bean id="systemuserdao" class="core.security.dao.systemuserdao" /> <!-- systemrolesservice --> <bean id="systemroleservice" class="core.security.service.systemroleservice"></bean> <bean id="systemrolemodel" class="core.security.model.systemrolemodel"></bean> <bean id="systemroledao" class="core.security.dao.systemroledao"></bean> <!-- systemgroupservice --> <bean id="systemgroupservice" class="core.security.service.systemgroupservice"></bean> <bean id="systemgroupmodel" class="core.security.model.systemgroupmodel"></bean> <bean id="systemgroupdao" class="core.security.dao.systemgroupdao"></bean> <!-- systemlanguagesservice --> <bean id="systemlanguagesservice" class="core.security.service.systemlanguagesservice"></bean> <bean id="systemlanguagesmodel" class="core.security.model.systemlanguagesmodel"></bean> <bean id="systemlanguagesdao" class="core.security.dao.systemlanguagesdao"></bean> <!-- scheme setting service --> <bean id="systemsettingsservice" class="core.security.service.systemsettingsservice"></bean> <bean id="systemsettingsmodel" class="core.security.model.systemsettingsmodel"></bean> <bean id="systemsettingsdao" class="core.security.dao.systemsettingsdao"></bean> <!-- applicationcacheservice --> <bean id="applicationcachemodel" class="core.cache.model.applicationcachemodel"></bean> <bean id="applicationcachedao" class="core.cache.dao.applicationcachedao"></bean> <bean id="applicationcacheservice" class="core.cache.service.applicationcacheservice"></bean> </beans>

applicationcontext.xml

<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:oxm="http://www.springframework.org/schema/oxm" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd"> <context:annotation-config /> <context:component-scan base-package="core.application.controller" /> <context:component-scan base-package="core.security.controller" /> <context:component-scan base-package="core.cache.controller" /> <import resource="database/hibernate.cfg.xml"/> <import resource="servicebeans.xml"/> <bean id="objectmapper" class="org.codehaus.jackson.map.objectmapper"></bean> <bean id="jsonfactory" class="org.codehaus.jackson.jsonfactory"></bean> <bean id="mobilejsonmapper" class="core.application.mapper.json.mobileapplicationjson"></bean> <bean id="desktopjsonmapper" class="core.application.mapper.json.desktopapplicationjson"></bean> <bean id="mobileapplicationbuilder" class="core.application.builder.mobileapplicationbuilder"> </bean> <bean id="desktopapplicationbuilder" class="core.application.builder.desktopapplicationbuilder"></bean> <bean id="applicationbuilder" class="core.application.builder.applicationbuilder"></bean> <bean id="deconmoduleconfigparser" class="core.base.beans.deconmoduleconfigparser"></bean> <bean id="deconsessionmanager" class="core.base.beans.deconsessionmanager" scope="session"></bean> <bean id="eventconfigloader" class="core.event.dispatcher.eventconfigloader"> <constructor-arg ref="deconmoduleconfigparser" /> </bean> <bean id="eventfactory" class="core.event.dispatcher.eventfactory"></bean> <bean id="eventdispatcher" class="core.event.dispatcher.eventdispatcher"> <constructor-arg ref="eventfactory" /> <constructor-arg ref="eventconfigloader" /> </bean> <bean id="deconsecurity" class="core.base.beans.deconsecurity"></bean> <!-- <bean id="sce" class="javax.servlet.servletcontextevent"></bean> --> <!-- <import resource="jsonmapperbeans.xml"/> --> </beans>

web.xml

<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>decon fm version 5</display-name> <context-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:meta-inf/spring/applicationcontext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.request.requestcontextlistener</listener-class> </listener> <listener> <listener-class>core.base.listeners.deconsession</listener-class> </listener> <servlet> <servlet-name>rest service</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.springservlet</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value> core.application.controller; core.security.controller; core.cache.controller; org.codehaus.jackson.jaxrs </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>rest service</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>

the exception message:

severe: runtimeexception not mapped response, re-throwing http container java.lang.nullpointerexception @ core.application.builder.mobileapplicationbuilder.buildpagenavidata(mobileapplicationbuilder.java:94) @ core.application.builder.mobileapplicationbuilder.build(mobileapplicationbuilder.java:47) @ core.application.builder.applicationbuilder.build(applicationbuilder.java:49) @ core.application.controller.applicationcontroller.getapplication(applicationcontroller.java:81) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source) @ java.lang.reflect.method.invoke(unknown source) @ com.sun.jersey.spi.container.javamethodinvokerfactory$1.invoke(javamethodinvokerfactory.java:60) @ com.sun.jersey.server.impl.model.method.dispatch.abstractresourcemethoddispatchprovider$typeoutinvoker._dispatch(abstractresourcemethoddispatchprovider.java:185) @ com.sun.jersey.server.impl.model.method.dispatch.resourcejavamethoddispatcher.dispatch(resourcejavamethoddispatcher.java:75) @ com.sun.jersey.server.impl.uri.rules.httpmethodrule.accept(httpmethodrule.java:302) @ com.sun.jersey.server.impl.uri.rules.righthandpathrule.accept(righthandpathrule.java:147) @ com.sun.jersey.server.impl.uri.rules.resourceclassrule.accept(resourceclassrule.java:108) @ com.sun.jersey.server.impl.uri.rules.righthandpathrule.accept(righthandpathrule.java:147) @ com.sun.jersey.server.impl.uri.rules.rootresourceclassesrule.accept(rootresourceclassesrule.java:84) @ com.sun.jersey.server.impl.application.webapplicationimpl._handlerequest(webapplicationimpl.java:1480) @ com.sun.jersey.server.impl.application.webapplicationimpl._handlerequest(webapplicationimpl.java:1411) @ com.sun.jersey.server.impl.application.webapplicationimpl.handlerequest(webapplicationimpl.java:1360) @ com.sun.jersey.server.impl.application.webapplicationimpl.handlerequest(webapplicationimpl.java:1350) @ com.sun.jersey.spi.container.servlet.webcomponent.service(webcomponent.java:416) @ com.sun.jersey.spi.container.servlet.servletcontainer.service(servletcontainer.java:538) @ com.sun.jersey.spi.container.servlet.servletcontainer.service(servletcontainer.java:716) @ javax.servlet.http.httpservlet.service(httpservlet.java:728) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:305) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:222) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:123) @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:502) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:171) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99) @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:953) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:408) @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1023) @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:589) @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:312) @ java.util.concurrent.threadpoolexecutor.runworker(unknown source) @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source) @ java.lang.thread.run(unknown source)

thanks help.

i had overview of code, figured issue. allow me explain why null pointer first. in code there 2 containers created; spring , jersey. when bailiwick of jersey executed trying fetch bean spring container, not possible , need super container (application context) retrieve bean in spring container.

the solution simple in spring. solution : instead of autowired dependency injection utilize webapplicationcontextutils.getrequiredwebapplicationcontext.getbean(“beanname”);

this 1 way, there many other ways dependency injection through application context. seek understand problem help core of spring bean creation. rest solution should work. cheers

spring jersey webservice-client autowired

Comments

Popular posts from this blog

php - Edges appear in image after resizing -

ios8 - iOS custom keyboard - preserve state between appearances -

Delphi change the assembly code of a running process -