客户端调用webService

时间:2022-10-09 16:16:35

客户端调用webService

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;

 

/**********************************************************

 *

 * 功能描述: </br></br>

 *

 * 作者:chenab </br></br>

 *

 * 创建时间:2011-7-14 下午05:24:47</br></br>

 *

 * 版本号:V1.0 </br></br>

 **********************************************************/

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;

 

/**********************************************************

 *

 * 功能描述: </br></br>

 *

 * 作者:chenab </br></br>

 *

 * 创建时间:2011-7-16 下午05:14:25</br></br>

 *

 * 版本号:V1.0 </br></br>

 **********************************************************/

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.2.2 第二步:修改Web.xml 配置文件

在web.xml中加入基本Servlet 的AxisServlet, 如下所示:

客户端调用webService

 

 

1.2.3 第三步:加入server-config.wsdd文件并修改

客户端调用webService

客户端调用webService

 

 

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;

 

/**********************************************************

 *

 * 功能描述: </br></br>

 *

 * 作者:chenab </br></br>

 *

 * 创建时间:2011-7-14 下午05:48:31</br></br>

 *

 * 版本号:V1.0 </br></br>

 **********************************************************/

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("远程错误!");

       }

 

    }

 

}