最近稍微研究了下XFire的东西,发现Web Service和Web MVC还是比较格格不入的,当然XFire可以集成到SpringWeb MVC就是了.
首先XFire原则上是不需要和Struts整合的,一是XFire是WebService,没有MVC的需求.
二是XFire或者Struts也没有提供相应的接口.
但是XFire是要挂到Spring上的.所以他有一个Spring的接口,org.codehaus.xfire.spring.remoting.XFireExporter,这个东西是SpringMVC的org.springframework.web.servlet.mvc.Controller,所以可以通过SpringMVC的DispatcherServlet来调用的.当然XFire本身也是有Servlet接口,所以可以直接挂在Web Container上的,但这样Spring的强大功能就用不了.
XFire和Spring的配置很简单,基本就是SpringMVC的配置(囧,这个东西本来就是Spring的Controller么).
例子:
applicationContext.xml (Spring的配置)片段
web.xml配置(片段)
ks.service.CitationService
ks.service.CitationServiceImpl
配置完毕发布到tomcat
访问http://localhost/XfireExample/services/citationService?wsdl即可看到wsdl的生成.
这里注意一下,如果你已经在这个web.xml里面配置了struts之类的东东,最好注意一下url patterns,别直接就 /* ,用namespace控制下,放到/web/* 之类的,不然就让struts之类的MVC框架拦截了.
附件有点大,包太多了估计.
首先XFire原则上是不需要和Struts整合的,一是XFire是WebService,没有MVC的需求.
二是XFire或者Struts也没有提供相应的接口.
但是XFire是要挂到Spring上的.所以他有一个Spring的接口,org.codehaus.xfire.spring.remoting.XFireExporter,这个东西是SpringMVC的org.springframework.web.servlet.mvc.Controller,所以可以通过SpringMVC的DispatcherServlet来调用的.当然XFire本身也是有Servlet接口,所以可以直接挂在Web Container上的,但这样Spring的强大功能就用不了.
XFire和Spring的配置很简单,基本就是SpringMVC的配置(囧,这个东西本来就是Spring的Controller么).
例子:
applicationContext.xml (Spring的配置)片段
<!-- import xfire的Spring配置 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
<!-- POJO bean -->
<bean id="citationService" class="ks.service.CitationServiceImpl"></bean>
<!-- Xfire WebService Bean 配置 -->
<bean id="citationService.xfire"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory" ref="xfire.serviceFactory">
</property>
<property name="xfire" ref="xfire"></property>
<property name="serviceBean" ref="citationService"></property>
<property name="serviceClass" value="ks.service.CitationService"></property>
</bean>
<!--Spring MVC 配置-->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/citationService">citationService.xfire</prop>
</props>
</property>
</bean>
web.xml配置(片段)
<servlet>
<servlet-name>citation</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>citation</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
ks.service.CitationService
package ks.service;
public interface CitationService {
int getValue();
}
ks.service.CitationServiceImpl
package ks.service;
public class CitationServiceImpl implements CitationService {
public int getValue() {
return 999;
}
}
配置完毕发布到tomcat
访问http://localhost/XfireExample/services/citationService?wsdl即可看到wsdl的生成.
这里注意一下,如果你已经在这个web.xml里面配置了struts之类的东东,最好注意一下url patterns,别直接就 /* ,用namespace控制下,放到/web/* 之类的,不然就让struts之类的MVC框架拦截了.
附件有点大,包太多了估计.