Spring框架使用中注入为空是一个比较头疼的问题,遇到Webservice和Spring框架配合时,这个问题更容易出现并很难发现问题的原因。
在做SSO系统中就遇到这样的问题,在Service的实现类中注入Ibatis数据库操作的Mapper一直为空,最终发现原因是xfire和Spring配合使用时和普通使用xfire的配置方式不同
xfire可以快速发布Webservice,通常情况下,只需要下边几个步骤。
1. 创建Service接口和实现类
例如SSOMethodsServices和SSOMethodsImpl
实现类中包括Spring注解形式的注入
@Autowired
private AccountMapper accountMapper;
2. 在web.xml中加入xfire的配置
<servlet> <servlet-name>XFireServlet</servlet-name> <display-name>XFire Servlet</display-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
3. 在classpath目录下创建目录META-INF>xifre->services.xml
在services.xml文件中配置服务
<?xml version="1.0" encoding="UTF-8"?> <beans> <service xmlns="http://xfire.codehaus.org/config/1.0"> <name>SSOMethodsServices</name> <serviceClass>com.test.sso.SSOMethodsServices</serviceClass> <implementationClass>com.test.sso.impl.SSOMethodsImpl</implementationClass> </service> </beans>
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/
这样,在浏览器输入 ip:port/projectname/services 就可以看到发布的Webservice,点击wsdl可以看到wsdl文件。
但是用soapUI进行测试,发现注入的accountMapper为空。出现问题。
尝试了直接手动注入,加@Component注解并添加包扫描等各种方法都无法注入,后来发现其实在xfire的example目录下有spring的例子,采用了不同的配置方法,这种方式证明是有效的。
主要区别是:
1. servlet class使用org.codehaus.xfire.spring.XFireSpringServlet 而不是org.codehaus.xfire.transport.http.XFireConfigurableServlet。这一点是最关键的。
2. 使用一个xfire-servlet.xml配置文件配置服务而不是services.xml,在web.xml的context-param中添加xfire-servlet.xml。
3. 在applicationContext.xml中加入Webservice实现类的Bean。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索webservice问题
, 问题
, spring
, webservice
, xfire
, 配置
, services
, spring注入
, soapui
, xfire webservices
, xifre
, 自定义对象 xfire
, xfire webservice
配置文件,webservice
xfire发布webservice、spring发布webservice、xfire webservice、xfire调用webservice、webservice xfire实例,以便于您获取更多的相关知识。