Java调用WebService的方法总结

1、使用命令wsimport自动生成java代码

wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.

    wsimport.exe位于JAVA_HOME\bin目录下。

   常用参数为:

    •-d<目录>  - 将生成.class文件。默认参数。

    •-s<目录> - 将生成.java文件。

    •-p<生成的新包名> -将生成的类,放于指定的包下。

    •(wsdlurl) - http://server:port/service?wsdl,必须的参数。

   示例:

      wsimport –s . http://192.168.0.100/one?wsdl

  注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。

  如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。

  .class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行。

项目示例

使用这种方法需要稍微能看懂WSDL,代码和WDSL的对应关系如上图所示。中间部分为自己要写的代码,左上角为源文件,除了Main.java其他的都市自动生成的。

2、使用AXIS调用WebService

     需要用到的jar包:   

  • axis-1_2/lib/axis.jar
  • axis-1_2/lib/jaxrpc.jar
  • axis-1_2/lib/saaj.jar
  • axis-1_2/lib/commons-logging.jar
  • axis-1_2/lib/commons-discovery.jar
  • axis-1_2/lib/wsdl4j.jar

示例代码:

  个人理解:Axis根据WSDL获取WebService的基本信息,然后程序员设置xml代码和java代码的对应关系,Axis自动发送请求和解析响应;

        因为在WebService中java类时经过序列化的,所以传递参数不是基本数据类型时,要指定序列化对应关系,就是代码25、26行,这时候反序列化器可以为空;

        当然当返回消息为java对象时(java对象我一般用wsimport方法自动生成),要指定将XML反序列化成java对象的对应关系,就是代码72、73行,这时序列化器可以为空;

  1 /**
  2      * 第二种方法:Axis方法调用
  3      */
  4     public static void axis_01() {
  5         try {
  6             String endpoint = "http://127.0.0.1:8089/BaoIntlWebService/ws/binding";
  7
  8             /*
  9              * Create new Service and Call objects. These are the standard
 10              * JAX-RPC objects that are used to store metadata about the service
 11              * to invoke.
 12              */
 13             Service service = new Service();
 14             Call call = (Call) service.createCall();
 15
 16             // Set up endpoint URL - this is the destination for our SOAP
 17             // message.
 18             call.setTargetEndpointAddress(new java.net.URL(endpoint));
 19
 20             // 设置调用WS的方法
 21             call.setOperationName(new QName("http://webservice.baointl.com/", "mapTest"));
 22
 23             // 注册序列化/反序列化器
 24             QName qn_request = new QName("http://webservice.baointl.com/", "requestTest");
 25             call.registerTypeMapping(RequestTest.class, qn_request, new BeanSerializerFactory(
 26                     RequestTest.class, qn_request), new BeanDeserializerFactory(RequestTest.class,
 27                     qn_request));
 28
 29             // 设置参数名
 30             call.addParameter("request", qn_request, RequestTest.class, ParameterMode.IN);
 31
 32             // 设置返回类型
 33             call.setReturnType(org.apache.axis.Constants.XSD_STRING);
 34
 35             RequestTest request = new RequestTest();
 36             request.setName("LEO");
 37             request.setAge(28);
 38
 39             Object ret = call.invoke(new Object[] { request });
 40
 41             System.out.println("got ‘" + ret + "‘");
 42         } catch (RemoteException e) {
 43             e.printStackTrace();
 44         } catch (ServiceException e) {
 45             e.printStackTrace();
 46         } catch (MalformedURLException e) {
 47             e.printStackTrace();
 48         }
 49     }
 50
 51     public static void axis_02() {
 52         try {
 53             String endpoint = "http://127.0.0.1:8089/BaoIntlWebService/ws/binding";
 54
 55             /*
 56              * Create new Service and Call objects. These are the standard
 57              * JAX-RPC objects that are used to store metadata about the service
 58              * to invoke.
 59              */
 60             Service service = new Service();
 61             Call call = (Call) service.createCall();
 62
 63             // Set up endpoint URL - this is the destination for our SOAP
 64             // message.
 65             call.setTargetEndpointAddress(new java.net.URL(endpoint));
 66
 67             // 设置调用WS的方法
 68             call.setOperationName(new QName("http://webservice.baointl.com/", "push"));
 69
 70             // 注册序列化/反序列化器
 71             QName qn = new QName("http://webservice.baointl.com/", "pushRespMsg");
 72             call.registerTypeMapping(PushRespMsg.class, qn, null, new BeanDeserializerFactory(
 73                     PushRespMsg.class, qn));
 74
 75             // 设置参数名:
 76             call.addParameter("username", // 参数名
 77                     org.apache.axis.Constants.XSD_STRING,// 参数类型:String
 78                     ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘
 79             call.addParameter("segno", // 参数名
 80                     org.apache.axis.Constants.XSD_STRING,// 参数类型:String
 81                     ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘
 82             call.addParameter("first", // 参数名
 83                     org.apache.axis.Constants.XSD_STRING,// 参数类型:String
 84                     ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘
 85             call.addParameter("keyword1", // 参数名
 86                     org.apache.axis.Constants.XSD_STRING,// 参数类型:String
 87                     ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘
 88             call.addParameter("keyword2", // 参数名
 89                     org.apache.axis.Constants.XSD_STRING,// 参数类型:String
 90                     ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘
 91             call.addParameter("remark", // 参数名
 92                     org.apache.axis.Constants.XSD_STRING,// 参数类型:String
 93                     ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘
 94             // 设置返回值类型
 95             call.setReturnClass(PushRespMsg.class);
 96
 97             Object[] object = new Object[6];
 98             object[3] = "11111";
 99             object[4] = "22222";
100             object[5] = "mark";
101             PushRespMsg result = (PushRespMsg) call.invoke(object);
102             System.out.println(result.getStatus());
103             System.out.println(result.getMessage());
104             System.out.println(result.getSuccessNum());
105             System.out.println(result.getFialedNum());
106         } catch (RemoteException e) {
107             e.printStackTrace();
108         } catch (ServiceException e) {
109             e.printStackTrace();
110         } catch (MalformedURLException e) {
111             e.printStackTrace();
112         }
113     }
时间: 2024-08-02 04:13:01

Java调用WebService的方法总结的相关文章

java调用webservice接口方法

webservice的 发布一般都是运用WSDL(web service descriptive language)文件的款式来发布的,在WSDL文件里边,包含这个webservice暴露在外面可供运用的接口.今日查找到了非常好的 webservice provider列表 http://www.webservicex.net/WCF/default.aspx 这上面列出了70多个包含许多方面的free webservice provider,utilities->global weather就

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com

Java调用WebService

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用.理论上是一样的,只不过用Eclipse自动生成代码省事些. 1.编写代码方式: package com.yudun.test; import java.rmi.RemoteException;import org.apache.axis.client.Call;import org.apache.axis

C# 调用WebService的方法

原文:C# 调用WebService的方法 很少用C#动态的去调用Web Service,一般都是通过添加引用的方式,这样的话是自动成了代理,那么动态代理调用就是我们通过代码去调用这个WSDL,然后自己去生成客户端代理.更多的内容可以看下面的两个地址:http://blog.csdn.net/limlimlim/article/details/8651043 http://www.cnblogs.com/VisualStudio/archive/2008/10/29/1322228.html 1

Flex调用WebService的方法

flex是不能直接访问数据库的,所以可以采用服务的形式进行调用数据,HTTPService.WebServices是比较常用的两种方法,因为接触WebService比较多所以给出其调用方法. import mx.controls.Alert; import mx.events.FlexEvent; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.rpc.soap.LoadEvent; imp

Java调用JavaFX的方法

Java调用JavaFX的方法.这三种方法分别为: 1. 用ScriptEngineManager类.这是基于JSR-223规范的java脚本API( scripting API).可以在java程序中运行一些脚本,如 JavaFX script, javascript等.2. 通过JavaFX reflection API.这是JavaFX提供的反射API,几乎可以调用所有的JavaFX类.3. 先用JavaFX类实现一个Java的interface,然后Java程序可以通过这个interfa

动态调用webservice的方法

动态WebService方法 调用Webservice的方法一般是通过右击项目-->添加服务引用-->输入Webservice地址-->前往-->确定,这样可以顺利调用服,但是需要注意的一点是:如果上面的方法是在非启动项项目(比如某个类库)中添加的,在该项目下会自动生成一个app.config文件,而在主配置文件web.config中并没有自动添加上该webservice的标记,这样运行会出现错误,说找不到配置信息等等……所有还需要把app.config中的<system.s

(转)java 调用webservice的各种方法总结

原文地址:http://www.blogjava.net/zjhiphop/archive/2009/04/29/webservice.html 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!!    由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用方法.    一.利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务     1.首先建立一个Web serv

java 调用webservice的各种方法总结

一.利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务 1.首先建立一个Web services EndPoint: Java代码 package Hello; import javax.jws.WebService; import javax.jws.WebMethod; import javax.xml.ws.Endpoint; @WebService public class Hello { @WebMethod public String hell