java ee - @Stateless not injected via @Inject in a JSF @ManagedBean -
i trying read horoscope json url , save database , using jsf 2.2.
i getting null pointer exception:
java.lang.nullpointerexception @ com.horoskop.android.controlor.horoscopebean.savetodayhoroscope(horoscopebean.java:40) @ 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) @ javax.el.elutil.invokemethod(elutil.java:332) @ javax.el.beanelresolver.invoke(beanelresolver.java:537) @ javax.el.compositeelresolver.invoke(compositeelresolver.java:256) @ com.sun.el.parser.astvalue.getvalue(astvalue.java:136) @ com.sun.el.parser.astvalue.getvalue(astvalue.java:204) @ com.sun.el.valueexpressionimpl.getvalue(valueexpressionimpl.java:226)
this managedbean code:
@managedbean @applicationscoped public class horoscopebean { horoscopeparser horoscopeparser; @inject horoscopeejb horoscopeejb; public void savetodayhoroscope() throws exception{ horoscopefeed horoscope = gettodayhoroscope(); for(int i=0;i<horoscope.gethoroscope().size();i++){ day d = new day(); d.settext(horoscope.gethoroscope().get(i).gettxthrs()); horoscopeejb.addtodayhoroscope(d); } } public void savelovehoroscope() throws exception{ horoscopefeed horoscope = getlovehoroscope(); for(int i=0;i<horoscope.gethoroscope().size();i++){ love l = new love(); l.settext(horoscope.gethoroscope().get(i).gettxthrs()); horoscopeejb.addlovehoroscope(l); } } public void saveweekhoroscope() throws exception{ horoscopefeed horoscope = getweekhoroscope(); for(int i=0;i<horoscope.gethoroscope().size();i++){ week w = new week(); w.settext(horoscope.gethoroscope().get(i).gettxthrs()); horoscopeejb.addweekhoroscope(w); } } public void savemonthhoroscope() throws exception{ horoscopefeed horoscope = getmonthhoroscope(); for(int i=0;i<horoscope.gethoroscope().size();i++){ month m = new month(); m.settext(horoscope.gethoroscope().get(i).gettxthrs()); horoscopeejb.addmonthhoroscope(m); } } public horoscopefeed gettodayhoroscope() throws exception{ horoscopeparser = new horoscopeparser(); return horoscopeparser.gettodayhoroscope(url); } public horoscopefeed getweekhoroscope() throws exception{ horoscopeparser = new horoscopeparser(); return horoscopeparser.gettodayhoroscope(url); } public horoscopefeed getlovehoroscope() throws exception{ horoscopeparser = new horoscopeparser(); return horoscopeparser.gettodayhoroscope(url); } public horoscopefeed getmonthhoroscope() throws exception{ horoscopeparser = new horoscopeparser(); return horoscopeparser.gettodayhoroscope(url); }
ejb code:
@stateless @localbean public class horoscopeejb { @persistencecontext entitymanager em; public void addtodayhoroscope(day day){ boolean ifexist = checkdaily(day.gettext()); if(!ifexist){ em.merge(day); } } public void addlovehoroscope(love love){ boolean ifexist = checklove(love.gettext()); if(!ifexist){ em.merge(love); } } public void addweekhoroscope(week week){ boolean ifexist = checkweek(week.gettext()); if(!ifexist){ em.merge(week); } } public void addmonthhoroscope(month month){ boolean ifexist = checkmonth(month.gettext()); if(!ifexist){ em.merge(month); } } private boolean checkdaily(string text){ list<day> results = em.createquery("select d da d d.text = :text") .setparameter("text", text).getresultlist(); if(results.size() > 0){ return true; } else{ return false; } } private boolean checklove(string text){ list<love> results = em.createquery("select k love l l.text = :text") .setparameter("text", text).getresultlist(); if(results.size() > 0){ return true; } else{ return false; } } private boolean checkweek(string text){ list<week> results = em.createquery("select w week d w.text = :text") .setparameter("text", text).getresultlist(); if(results.size() > 0){ return true; } else{ return false; } } private boolean checkmonth(string text){ list<month> results = em.createquery("select m month m m.text = :text") .setparameter("text", text).getresultlist(); if(results.size() > 0){ return true; } else{ return false; } }
}
this horoscope parser code, connect url , read json, , parse it.
public class horoscopeparser { public horoscopefeed gettodayhoroscope(string url) throws exception{ string content = readurl(url); gson gson = new gson(); return gson.fromjson(content, horoscopefeed.class); } public horoscopefeed getlovehoroscope(string url) throws exception{ string content = readurl(url); gson gson = new gson(); return gson.fromjson(content, horoscopefeed.class); } public horoscopefeed getweekhoroscope(string url) throws exception{ string content = readurl(url); gson gson = new gson(); return gson.fromjson(content, horoscopefeed.class); } public horoscopefeed getmonthhoroscope(string url) throws exception{ string content = readurl(url); gson gson = new gson(); return gson.fromjson(content, horoscopefeed.class); } private static string readurl(string urlstring) throws exception { bufferedreader reader = null; try { url url = new url(urlstring); reader = new bufferedreader(new inputstreamreader(url.openstream())); stringbuffer buffer = new stringbuffer(); int read; char[] chars = new char[1024]; while ((read = reader.read(chars)) != -1) buffer.append(chars, 0, read); return buffer.tostring(); } { if (reader != null) reader.close(); }
}
}
update:
if change @ejb instead of @inject error:
javax.ejb.ejbexception @ com.sun.ejb.containers.ejbcontainertransactionmanager.processsystemexception(ejbcontainertransactionmanager.java:748) @ com.sun.ejb.containers.ejbcontainertransactionmanager.completenewtx(ejbcontainertransactionmanager.java:698) @ com.sun.ejb.containers.ejbcontainertransactionmanager.postinvoketx(ejbcontainertransactionmanager.java:503) @ com.sun.ejb.containers.basecontainer.postinvoketx(basecontainer.java:4566) @ com.sun.ejb.containers.basecontainer.postinvoke(basecontainer.java:2074) @ com.sun.ejb.containers.basecontainer.postinvoke(basecontainer.java:2044) @ com.sun.ejb.containers.ejblocalobjectinvocationhandler.invoke(ejblocalobjectinvocationhandler.java:220) @ com.sun.ejb.containers.ejblocalobjectinvocationhandlerdelegate.invoke(ejblocalobjectinvocationhandlerdelegate.java:88) @ com.sun.proxy.$proxy233.addtodayhoroscope(unknown source) @ com.horoskop.android.controlor.__ejb31_generated__horoscopeejb__intf____bean__.addtodayhoroscope(unknown source) @ com.horoskop.android.controlor.horoscopebean.savetodayhoroscope(horoscopebean.java:44) @ 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) @ javax.el.elutil.invokemethod(elutil.java:332) @ javax.el.beanelresolver.invoke(beanelresolver.java:537) @ javax.el.compositeelresolver.invoke(compositeelresolver.java:256) @ com.sun.el.parser.astvalue.getvalue(astvalue.java:136) @ com.sun.el.parser.astvalue.getvalue(astvalue.java:204) @ com.sun.el.valueexpressionimpl.getvalue(valueexpressionimpl.java:226) @ org.jboss.weld.el.weldvalueexpression.getvalue(weldvalueexpression.java:50) @ com.sun.faces.facelets.el.eltext$eltextvariable.writetext(eltext.java:238)
web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <context-param> <param-name>javax.faces.project_stage</param-name> <param-value>development</param-value> </context-param> <servlet> <servlet-name>faces servlet</servlet-name> <servlet-class>javax.faces.webapp.facesservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>faces servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list>
okey, found problem.
it syntax typo error in sql query today horoscope.
i wrote this:
"select d da d d.text = :text"
and should this:
"select d day d d.text = :text"
Comments
Post a Comment