在做项目的过程中,需要做一个中间服务,中间服务为单独一个java工程,对外提供webservice服务。 java工程采用的是Spring3.1和axis2相结合。
工程完成后,Spring注解没有问题,web服务也正常, web服务直接调用service层, 其中service层,用到的dao,来查询数据库。 代码如下:
web服务配置:
<service name="Ws_co" provider="java:RPC"> <parameter name="allowedMethods" value="*"/> <parameter name="className" value="com.lc.tobacco.order.service.impl.CgtOrderServiceImpl"/> </service>
service服务:
public class CgtOrderServiceImpl implements ICgtOrderService { private static final Logger logger = LoggerFactory.getLogger(CgtOrderServiceImpl.class); @Resource private ICgtOrderDao cgtOrderDao; }
但是调用调用dao层时,出现cgtOrderDao=null错误。
String code="000"; String msg="获取数据成功!"; BigDecimal qtyLimit = zero; try{ Map custRsnQty = cgtOrderDao.getCustRsnQty(comId,custId); }catch(Exception e ){ code="104"; msg="获取数据失败!e=="+e.toString(); logger.debug("获取数据失败!e=="+e.toString()); }
如果按正常流程 controller --> service --> dao
,cgtOrderDao不为null,程序正常。
郁闷好久没有解决,只临时找到一个方案:
xml中增加:
<bean id="cgtOrderDao"
class="com.lc.tobacco.order.dao.impl.CgtOrderDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
@Service("cgtOrderService") public class CgtOrderServiceImpl implements ICgtOrderService { private static final Logger logger = LoggerFactory.getLogger(CgtOrderServiceImpl.class); @Resource private ICgtOrderDao cgtOrderDao; public ICgtOrderDao getCgtOrderDao() { return cgtOrderDao; }
public void setCgtOrderDao() {
WebApplicationContext context=ContextLoader.getCurrentWebApplicationContext();
cgtOrderDao = (ICgtOrderDao)context.getBean("cgtOrderDao");
}
public String execute(String xmlStr) throws Exception {
if(null == cgtOrderDao){
setCgtOrderDao();
}
至此,工程调试,通过。