1. 客户端编写

客户端有XFire、axis两种方式来访问Web Service 提供的服务。
前提条件:服务启动,且服务能运行(生成WSDL)。
注意:为了测试方便,现将测试类放入到同一个工程中,当然下面两种方式都可将部署到另一个新建工程中。
 
1.1 第一种:Xfire实现调用
1.1.1 方式一:代理工厂

package com.smt.service.test;
 
import java.net.MalformedURLException;
 
import org.codehaus.xfire.XFire;
import org.codehaus.xfire.XFireFactory;
 
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
 
import com.smt.service.IBankingService;
 
/**********************************************************
 *
 * 功能描述: 

 *
 * 作者: chenab

 *
 * 创建时间: 2011-7-14 下午05:24:47

 *
 * 版本号:V1.0 

 **********************************************************/
public class clientXFire {
    private static final String urls="http://192.168.7.177:8088/testXFire/services/BankingService";
    private void testService(){
       try {
       Service serviceModel = new ObjectServiceFactory().create(IBankingService. class);
       serviceModel = new ObjectServiceFactory().create(IBankingService. class);
       XFire xFire = XFireFactory.newInstance().getXFire();
       XFireProxyFactory factory = new XFireProxyFactory(xFire);
       IBankingService service = (IBankingService)factory.create(serviceModel, urls);
       service.transferFunds("你好");
       } catch (MalformedURLException e) {
           System. out.println("错误!");
           e.printStackTrace();
       }
 
    }
 
    public static void main(String[] args) throws MalformedURLException {
       clientXFire c = new clientXFire();
       c.testService();
    }
}

1.1.2 方式二:代理工厂

package com.smt;
 
import java.net.MalformedURLException;
import java.net.URL;
 
import org.codehaus.xfire.client.Client;
import org.w3c.dom.Document;
 
/**********************************************************
 *
 * 功能描述: 

 *
 * 作者: chenab

 *
 * 创建时间: 2011-7-16 下午05:14:25

 *
 * 版本号:V1.0 

 **********************************************************/
public class XFireClient {
    private static final String urls=" http://192.168.0.3:3001/smart_webservice/services/SmtDocService?wsdl ";
 
    public static void main(String[] args) throws MalformedURLException, Exception {
       Client client = new Client( new URL( urls));
       Object[] xml = client.invoke("findSrcDoc",new Object[]{1L});
       Document doc = (Document)xml[0];
       System. out.println(doc.getDocumentElement().getTextContent());
    }
}

 
1.2 第二种:axis实现调用
由于服务端是用Xfire写的,现用axis调用,要在服务端做一些些修改。
1.2.1 第一步:加入axis所需包文件
加入Axis所需要的包文件,加入后的整个目录结构如下图所示:
 

客户端调用webService_第1张图片

 

1.2.2 第二步:修改 Web.xml 配置文件
在web.xml中加入基本Servlet 的 AxisServlet, 如下所示:
  客户端调用webService_第2张图片
客户端调用webService_第3张图片
 
1.2.3 第三步:加入server-config.wsdd文件并修改

 
客户端调用webService_第4张图片
客户端调用webService_第5张图片
 
1.2.4 第四步:编写客户端测试代码

package com.smt.service.test;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
 
import javax.xml.rpc.ServiceException;
 
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
 
/**********************************************************
 *
 * 功能描述: 

 *
 * 作者: chenab

 *
 * 创建时间: 2011-7-14 下午05:48:31

 *
 * 版本号:V1.0 

 **********************************************************/
public class clientAxis {
    private static final String urls="http://192.168.7.177:8088/testXFire/services/BankingService";
    public static void main(String[] args) {
       try {
           /*
            * Banking是webservice在services.xml注册的名字
            */
           Service service = new Service();
           Call call = (Call) service.createCall();
           call.setTargetEndpointAddress( new java.net.URL( urls));
 
           // 由于需要认证,故需要设置调用的用户名和密码。
           // call.getMessageContext().setUsername("sophia");
           // call.getMessageContext().setPassword("sophia");
 
           /*
            * 调用service的方法名
            */
           call.setOperationName("transferFunds");
           /*
            * invoke方法的参数是Object数组,该数组元素个数与方法参数一致
            */
           String translateText = (String) call.invoke( new Object[] { "hello" });
           System. out.println(translateText);
       } catch (ServiceException e) {
           e.printStackTrace();
           System. out.println("Service 获取 Call对象失败!");
       } catch (MalformedURLException e) {
           e.printStackTrace();
           System. out.println("new java.net.URL(url)错误!");
       } catch (RemoteException e) {
           e.printStackTrace();
           System. out.println("远程错误!");
       }
 
    }
 
}