昨天,当我试图把unavailabeCIs这部分功能加入到Michael的ReportDataService project时,遇到一个问题:在Jersey和Spring一起使用的时候,Jersey class中原本应该由Spring注入的beans都没有正常注入,运行时会发生NullPointException。但是当application server启动时,从系统日志可以看出,Spring明明是正常地初始化了那些beans的,百思不得其解。
今天继续探究问题,找到了两个错误的原因:
- 在Jersey中集成Spring,主要是依靠在web.xml中配置这样一个servlet:
1 | <servlet> |
注意"<param-value>"标签中的参数"com.sun.itsp.report.resources;com.sun.itsp.report.unavailablecis.rest",这个参数的意思是:告知该servlet当前系统中所有声明为RESTful classes所在的包位置。这样,Spring就知道该到哪里去注入beans(我猜)。问题在于:我和Michael的代码各有一个包,这里需要配置两个包位置。昨天我想当然地用","分隔,今天查了资料(javadoc of "com.sun.jersey.spi.container.servlet.ServletContainer" class),发现应该使用";"来分隔。
- 在原来的web.xml中除了上面的servlet之外,还有一个servlet:
1 | <servlet> |
这个servlet应该是当Michael在Netbeans中创建一个RESTful web service时,由Netbeans自动创建的。该servlet的功能是把所有的RESTful请求集中由该servlet来处理。
问题就处在这里:昨天我测试的时候,都是使用“/resources/xxx”的URL来请求。今天我改为直接使用"/xxx"来请求,问题就解决了!
问题的关键在于:只有当配置了使用SpringServlet来处理REST请求时,Spring才会正常的工作,如果使用ServletAdaptor来处理REST请求,那么Spring就没有被引入,当然相应的Spring beans也没有被正常的注入了。
最后删除ServletAdaptor servlet,因为它已经没有用了。
Add Spring test jar file
Add you JUNit test cases code;
Add the cobertura jars;
Add ant task which will run the cobertura coverage test;
Cofigure the Hudson to add the “test” target, which will invoke the cobertura coverage test.