今天参考网上的文档学习了一下使用Xfire构建webservice,相比较 Axis 而言,真有点相见很晚的感觉,使用Xfire的确简单和方便不少,而且还能与spring集成使用,更难能可贵的是,Myeclipse官方网站还有关于使用Xfire的教程,地址如下:
http://www.myeclipseide.com/documentation/quickstarts/webservices/
可见Xfire的易用性是得到了公认的,具体的webservice开发上面的网址已经说的很清楚,这里不累述了,只提一下客户端的开发就行了。
使用XFire开发Web Service客户端主要有两种方式
一、服务提供者告诉你interface
- package test;
- import java.net.MalformedURLException;
- import java.util.ArrayList;
- import java.util.List;
- import org.codehaus.xfire.XFireFactory;
- import org.codehaus.xfire.client.XFireProxyFactory;
- import org.codehaus.xfire.service.Service;
- import org.codehaus.xfire.service.binding.ObjectServiceFactory;
- public class WSClinet {
- public static void main(String[] args) {
- Service srvcModel = new ObjectServiceFactory()
- .create(IHelloService.class);
- XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
- .newInstance().getXFire());
- String helloWorldURL = "http://localhost:8080/wwwroot/services/HelloService";
- try {
- IHelloService srvc = (IHelloService) factory.create(srvcModel,
- helloWorldURL);
- System.out.println(srvc.sayHello("Robin"));
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- }
- }
二、通过WSDL创建一个动态的客户端
- import java.net.MalformedURLException;
- import java.net.URL;
- import org.codehaus.xfire.client.Client;
- public class WSClinet {
- public static void main(String[] args) throws MalformedURLException,
- Exception {
- Client client = new Client(new URL(
- "http://www.webservicex.net/globalweather.asmx?WSDL"));
- Object[] results = client
- .invoke("GetCitiesByCountry", new Object[] { "China" });
- System.out.println(results[0]);
- }
- }
这里需要知道webservice的操作方法以及输入的参数,如GetCitiesByCountry,这个怎么知道呢,打开WSDL文件,只看schema部分的代码就很容易找到服务名及其参数定义了。
这两种方法个人觉得动态的方式要符合实际的应用一些,毕竟很多第三方是不会告诉你接口类的,感觉Myeclipse利用Xfire生成WS客户端的工具也应该用的动态原理,而且还相当的方便,在main方法中就只关注operator name了。