为什么spring注入的类老是抛出null?

wxjyf2007 2008-06-21 11:56:01
1:spring在Struts-config.xml已经声明插件

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>

2:spring在web.xml已经声明监听且读取配置文件

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml;/WEB-INF/classes/dispatcher-servlet.xml;
</param-value>
</context-param>


3:applicationContext.xml中的bean设置:

<bean id="loginservice" class="com.operator.struts.service.LoginService">
<property name="dbdao">
<ref bean="dbdao"/>
</property>
</bean>
<bean id="mainservice" class="com.operator.struts.service.MainService">
<property name="dbdao">
<ref bean="dbdao"/>
</property>
</bean>
<bean id="xmlservice" class="com.operator.struts.service.XmlBakService">
<property name="xmldao">
<ref bean="xmldao"/>
</property>
</bean>

<bean id="jmsservice" class="com.operator.servlet.JmsService">
<property name="mainservice">
<ref bean="mainservice"/>
</property>
</bean>

<bean id="beginclick" class="com.operator.jsonrpc.BeginClick">
<property name="jmsservice">
<ref bean="jmsservice"/>
</property>
</bean>


4:综述:
使用了AJAX框架 jsonrpc
xmlservice 调用正常,loginservice调用正常,但两个调用都是通过jsonrpc提交到struts的action调用。
beginclick是个普通的java类,通过jsonrpc点击事件调用,调用后随即抛错:

java.lang.NullPointerException
10:30:10,890 ERROR [STDERR] at com.operator.jsonrpc.BeginGame.BeginGameStart(BeginGame.java:40)
10:30:10,890 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:30:10,906 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
10:30:10,906 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
10:30:10,906 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
10:30:10,906 ERROR [STDERR] at com.metaparadigm.jsonrpc.JSONRPCBridge.call(JSONRPCBridge.java:1005)
10:30:10,921 ERROR [STDERR] at com.metaparadigm.jsonrpc.JSONRPCServlet.service(JSONRPCServlet.java:161)
10:30:10,921 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
10:30:10,921 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
10:30:10,921 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

是否AJAX框架直接调用普通java类spring会发生无法注入的错误吗?是否是由于调用普通java类无法获取session导致的还是别的原因?
...全文
1158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxjyf2007 2008-06-22
  • 打赏
  • 举报
回复
算了,我在这个类里面重新获取applicationContext文件了。

因为AJAX没有传session进去,只能在类里重新获取applicationCntext上下文。但不知会带来什么后果,哎,揭帖了
whetu 2008-06-21
  • 打赏
  • 举报
回复
能贴出相关代码最好,
估计M_Song说的对,是你在BeginGameStart类中没有注入beginclick。
wxjyf2007 2008-06-21
  • 打赏
  • 举报
回复
40行的时候
msg = jmsservice.getInfoVo();
我要去调用jmsservice的方法,因为jmsservice为空,因此抛出空指针。
但为什么为空不清楚啊。这个类是jsonrpc调用的
牛人救命啊
老紫竹 2008-06-21
  • 打赏
  • 举报
回复
java.lang.NullPointerException 10:30:10,890 ERROR [STDERR] at com.operator.jsonrpc.BeginGame.BeginGameStart(BeginGame.java:40) 看看那个 40行到底干了什么! 呵呵!
M_song 2008-06-21
  • 打赏
  • 举报
回复
2:spring在web.xml已经声明监听且读取配置文件

把这个去掉试试!

另外:最好debug一下,看到底哪个是空指针!
个人认为应该是你的beginclick没有注入!
wxjyf2007 2008-06-21
  • 打赏
  • 举报
回复
自己顶一下,自己顶一下
tubage408 2008-06-21
  • 打赏
  • 举报
回复
JSON-RPC在web.xml中的配置呢,建议lz找找json——rpc和spring结合的实例看看。
Shine_Panda 2008-06-21
  • 打赏
  • 举报
回复
你根本就没有去激活你注入的配置文件啊。
就是你没有通过 begingame 这个id 去实例化一个对象
wxjyf2007 2008-06-21
  • 打赏
  • 举报
回复
自己写了一个xmlhttp,以xmlhttp.open("get",...)的形式提交到spring管理的action,再在action注入begingame,再依次调用抓取数据,现在是可以了。确认问题就是出在AJAX框架直接调用了spring的注入bean,导致注入bean为空。

但是这样的话jsonrpc形同虚设,请问一下jsonrpc和spring该怎么整合在一起?像DWR一样整合么?
wxjyf2007 2008-06-21
  • 打赏
  • 举报
回复
是set注入:
XML:
<bean id="begingame" class="com.operator.jsonrpc.BeginGame">
<property name="jmsservice">
<ref bean="jmsservice"/>
</property>
</bean>

类:
public class BeginGame{
private LoginService loginservice;

public boolean BeginGameStart(String jmsstr){
.......
msg = jmsservice.getInfoVo(); //抛null
.......
}

public JmsService getJmsservice() {
return jmsservice;
}

public void setJmsservice(JmsService jmsservice) {
this.jmsservice = jmsservice;
}
}
kokobox 2008-06-21
  • 打赏
  • 举报
回复
貌似lz忘记把相关类 set 进去了 spring没有注入就调用,然后抛空指针
maxel 2008-06-21
  • 打赏
  • 举报
回复
jmsservice怎么注入的 ?你看下代码,是set注入还是构造,怀疑是你没有写注入方法
wxjyf2007 2008-06-21
  • 打赏
  • 举报
回复
Sorry , 我发帖的时候写错了。

beginclick 应该为 begingame ;
<bean id="beginclick " class="com.operator.jsonrpc.BeginClick ">
应该是
<bean id="begingame" class="com.operator.jsonrpc.BeginGame">

相关调用代码:
1:在js中jsonrpc调用:

v = this.jsonrpc.jsgame.BeginGameStart(tempstr);


在随后的DeBug抛出空指针:

try{
MessageGameInfoVo msg = new MessageGameInfoVo();
msg = jmsservice.getInfoVo();
}catch(Exception es){}


msg = jmsservice.getInfoVo(); 这里调用错误,jmsservice 为null。

大侠们来看看啊,散分了!!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧