由于xfire的支持库中是以spring1.2.6.jar 作为spring 的支持库所以这种方式不能正常的集成.
所以:
1: 删除xfire下的spring1.2.6. jar再加入spring2的支持库。
2:在web.xml中编写如下代码
<!-- 配置文件路径 开始-->
|
classpath:org/codehaus/xfire/spring/xfire.xml是一定要加入到context-param中的.
3: 编写服务的接口和具体的实现类.举例如下:
package com.wujianjun.xfire.spring;
import java.util.List;
import com.wujianjun.xfire.domain.Person;
public interface IPersonService {
Person getMyInfo(String name);
String sayHello(String name);
List<Person> getPersons(String name);
}
package com.wujianjun.xfire.spring;
import java.util.ArrayList;
import java.util.List;
import com.wujianjun.xfire.domain.Person;
public class PersonServiceImpl implements IPersonService {
private String job;
public void setJob(String job) {
this.job = job;
}
@Override
public Person getMyInfo(String name) {
Person res = new Person();
res.setJob(job);
res.setName(name);
return res;
}
@Override
public String sayHello(String name) {
return "你好: "+name+",job="+job;
}
@Override
public List<Person> getPersons(String name) {
List<Person> res = new ArrayList<Person>();
Person p = new Person();
p.setJob("卖饼的");
p.setName("大郎");
res.add(p);
p = new Person();
p.setJob("卖水的");
p.setName(name);
res.add(p);
return res;
}
}
4: 编写applicationContext.xml文件在里面进行配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" > <beans> <bean id="personService" class="com.wujianjun.xfire.spring.PersonServiceImpl"> <property name="job" value="JAVA" /> </bean> <bean name="PersonService" class="org.codehaus.xfire.spring.ServiceBean" > <property name="serviceBean" ref="personService" /> <property name="serviceClass" value="com.wujianjun.xfire.spring.IPersonService" /> </bean> </beans> |
5:发布程序,启动服务器访问http://localhost:8080/xfire/services/则可以看到我们发布的服务。如果我们做了配置而没有显示服务,我们要看一下我们applicationContext.xml里面的bean 是否有lazy-init="false"的。如果有,则我们要把以上的服务配置改成
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" > <beans> <bean id="personService" class="com.wujianjun.xfire.spring.PersonServiceImpl" lazy-init="false"> <property name="job" value="JAVA" /> </bean> <bean name="PersonService" class="org.codehaus.xfire.spring.ServiceBean" lazy-init="false"> <property name="serviceBean" ref="personService" /> <property name="serviceClass" value="com.wujianjun.xfire.spring.IPersonService" /> </bean> </beans> |
点击旁边的wsdl则可以访问到对应的wsdl文件了。
再通过我们前面的调用就可以了。
如果有复杂类型的返回值,则要在对应接口的同一个包下建立一个InterfaceName.aegis.xml文件其对应的写法如下:
*.aegis.xml文件的方法映射编写
1、void setList(int id ,java.util.List,boolean persist);
<method name="setList" >
<parameter index="1" componentType="java.lang.String" />
<parameter index="2" class="boolean" />
</method>
2、Collection getCollection();
<method name= "getCollection" >
<return-type componentType="java.lang.Double" />
</method>
3、Map getGiftList() ;
<method name= "getGiftList" >
<return-type keyType= "org.codehaus.xfire.NiceChild" componentType= "org.codehaus.xfire.Present" >
</method>
4、 public List getListOfListOfDoubles {
List l = new ArrayList();
List doubles = new ArrayList();
doubles.add(new Double (1.0));
l.add(doubles);
return l;
}
<mapping>
<method name= "getListofListofDoubles" >
<return-type componentType="#someDoubles" />
</method>
<component name="someDoubles" class="java.util.List" componentType="java.lang.Double" />
</mapping>