spring中集成xfire开发webservice
1. lib中加入xfire需要的jar包
2. spring中的配置
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<property name="serviceFactory" ref="xfire.serviceFactory"/>
<property name="xfire" ref="xfire"/>
</bean>
<bean id="helloBean" class="test.webservice.HelloServiceImpl"/>
<bean id="helloWebService" parent="baseWebService"> <!--继承webservice基类-->
<property name="serviceBean" ref="helloBean"/>
<property name="serviceClass" value="test.webservice.IHelloService"/>
</bean>
3. web.xml中的配置
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
访问链接http://localhost:prot/xxxx/service 查看发布是否成功
4. 获取webservice实例的类
public class XfireClientFactory
{
private static final Logger log = Logger.getLogger(XfireClientFactory.class.getName());
/**
* 单例xfire代理工厂
*/
private static XFireProxyFactory proxyFactory = getInstance();
/**
* 生成相应服务的客户端
*
* @param <T>
* @param serviceURL
* @param serviceClass
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T getClient(String serviceURL, Class<T> serviceClass)
{
Service serviceModel = new ObjectServiceFactory().create(serviceClass);
try
{
return (T) proxyFactory.create(serviceModel, serviceURL);
}
catch (MalformedURLException e)
{
log.error(e.getMessage(), e);
return null;
}
}
/**
* 获取xfire代理工厂实例
*
* @return
*/
public static XFireProxyFactory getInstance()
{
XFire xfire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xfire);
return factory;
}
}
5. 测试
public class HelloDemo
{
public static void main(String args[])
{
String url = "http://localhost:8080/xxxxx/service/IHelloService";
String result = "";
IHelloService service = XfireClientFactory.getClient(url, IHelloService.class);
result = service.hello();
System.out.println(result);
}
}
6.对于传对象
如在接口中添加方法 public List<Student> getStudent();
只需在Student这个POJO中作简单的webservice 说明
(1)类头加上命名空间
@XmlType(namespace="http://webservice.test")
public class Student
{
.....
}
(2) 成员变量的get/set方法前加说明
如:
@XmlElement(name="age",namespace="http://webservice.test")
public Integer getAge()
{
return age;
}
public void setAge(Integer age)
{
this.age = age;
}