网上现在有很多这类文章,我看的是一知半解的。自己写一个自己看懂的作为记录。(所用的编译器是myeclipse 6.5)
做的项目是半路加的webservice,右点击项目->myeclipse->Add Xfire… 直接点击finish。这个时候就生成了WebSevice文件(这个可以不用管,因为我们这是使用spring管理的),看一下web.xml这个文件是不是生成了关于xfire的配置。如下:
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
这里的XFireServlet配置注意了,自动生成的是这样的,它是不在Spring 管理下的,在srping管理下我们要修改成下面这样
<servlet>
<servlet-name>XFireServlet</servlet-name>
<!-- 没有结合spring应用的此类,结合spring 后用的下面的类
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
-->
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
这是一个要注意的地方。
在ApplicationContext.xml的中配置如下
<!-- XFire start -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- Service实现类-->
<bean id="EqServiceImpl"
class="com.jspwill.service.webservice.EqServiceImpl" />
<!--这里的name属性并不是调用时的Service名字;调用时要用类名不知道为什么-->
<bean name="IEqService" class="org.codehaus.xfire.spring.ServiceBean">
<!-- Service实现类-->
<property name="serviceBean" ref="EqServiceImpl" />
<!-- Service接口-->
<property name="serviceClass" value="com.jspwill.service.webservice.IEqService" />
<property name="inHandlers">
<list>
<ref bean="addressingHandler" />
</list>
</property>
</bean>
<bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler" />
<!-- XFire end -->
这样在写接口的时候就可以直接用注解了,因为你的xfire被spring管理了。
还有一个就是在接口请求是参数会变成in0、in1…..
这个解决办法是在webservice接口同文件下创建一个 classname.aegis.xml,classname是你的接口名,我这里的接口名是IEqService,所以是IEqService.aegis.xml(一定要与webservice接口同文件下),在此文件编写如下:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<method name="getEquipmentsForBhf">
<parameter index="0" mappedName="token" />
</method>
<method name="getEquipmentById">
<parameter index="0" mappedName="id" />
<parameter index="1" mappedName="token" />
</method>
</mapping>
</mappings>
<method name="getEquipmentsForBhf"> 这个是接口名
<parameter index="0" mappedName="token" /> 这个就是接口里所需的参数
基本就这些了,中间陪到一个问题:在applicationConentent.xml 配置的 会报找不到该文件的错误,主要是因为我一开始在web.xml没有对XFireServlet配置进行修改,修改过了就好了。