我正在尝试将DAO注入CXF服务.为此我使用xml配置.
在我的app-servlet.xml中,我添加了以下条目:
<bean id="blogService" class="blog.BlogEntriesImpl">
<property name="blogDao" ref="blogDao" />
</bean>
blogDao bean也在这个文件中定义.
该服务在另一个xml文件中配置:
<import resource="classpath:META-INF/cxf/cxf.xml" />
<jaxws:endpoint id="blogService" implementor="blog.BlogEntriesImpl"
address="/Blog1" />
BlogEntriesImpl实现服务接口.它有一个dao属性和一个setter方法.
我调试了应用程序并发现,BlogEntriesImpl的一个实例在开始时是实例化的,它具有dao属性.我想说它是由app-servlet.xml中的bean配置完成的.
但是,当我调用该服务时,会抛出NullPointerException.这是使用的BlogEntriesImpl的另一个实例.
为了解决这个问题,我将服务实现类(BlogEntriesImpl)中的dao属性声明为static.该变量在应用程序的开头设置.但我不喜欢这个解决方案.
有没有更好的方法将dao注入CXF服务?
先感谢您!
解决方法:
你说得对,实际上有两个BlogEntriesImpl类实例,一个是Spring创建的,另一个是Apache CXF创建的.您必须明确要求Apache CXF使用Spring bean而不是提供类.查看Writing a service with Spring,看起来你必须更换:
<jaxws:endpoint id="blogService" implementor="blog.BlogEntriesImpl" address="/Blog1" />
有:
<jaxws:endpoint id="blogService" implementor="#blogService" address="/Blog1" />
如果Apache CXF找不到名为blogService的bean,请考虑将其从Spring MVC上下文(app-servlet.xml)移至主上下文.