1.  使用代理模式调用,需要将服务端的接口类拷贝到客户端中。(不常用,因为不大可能拿到服务端的接口类。) 
  2. 通过客户端桩的方式。

  3.  发送原始的soap消息。

一、使用代理模式

  1. package test;
  2.  
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5.  
  6. import javax.xml.namespace.QName;
  7. import javax.xml.ws.Service;
  8.  
  9. import service.WebService_1;
  10.  
  11. /**
  12. * 使用代理模式 1.需要将服务端的接口类拷贝到客户端中。
  13. *
  14. * @author Administrator
  15. *
  16. */
  17. public class Test {
  18. public static void main(String[] args) {
  19.  
  20. try {
  21. // wsdlDocumentLocation是所调用服务的wsdl地址
  22. URL wsdlDocumentLocation = new URL("http://localhost:3031/first?wsdl");
  23. // QName构造函数的第一个参数是所调用服务的wsdl的命名空间。第二个参数是所调用的服务名
  24. QName serviceName = new QName("http://service/", "WebService_1_implService");
  25.  
  26. Service service = Service.create(wsdlDocumentLocation, serviceName);
  27.  
  28. //通过getport获取到的是一个代理对象,而不是接口对象
  29. WebService_1 webService_1 = service.getPort(WebService_1.class);
  30. int result = webService_1.add(25, 10);
  31. System.out.println("result===" + result);
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35.  
  36. }
  37. }

结果:

二、客户端桩

  • 通过wsdl地址或者wsdl文档,生成客户端的调用类,被称为客户端桩的方式。

  • 步骤:
    1.  使用eclipse/myeclipse工具来生成客户端(内部调用jdk命令)(本例中使用)。
    2. 使用jdk命令来生成客户端。
    3. 该图为jdk命令,其中 -d表示存放客户端代码的目录,http://localhost:4040/first?wsdl为要生成客户端的wsdl文档地址。

      该命令生效后,会生成目录:

  其中,客户端代码就在这个目录下。

  1.  生成客户端。

  1. package test;
  2.  
  3. import java.rmi.RemoteException;
  4.  
  5. import service.WebService_1;
  6. import service.WebService_1Proxy;
  7.  
  8. public class Test {
  9. public static void main(String[] args) throws RemoteException {
  10. WebService_1 weService_1 = new WebService_1Proxy().getWebService_1();
  11. int res = weService_1.add(20, 50);
  12. System.out.println("res=" + res);
  13. }
  14. }

结果:

三、发送原始的soap消息

  • 本例中使用soapUI软件来测试。

  • 如上图,使用最原始的soap协议发送消息这是最底层的做法。客户端通过封装数据到发送soap消息至服务端,然后服务端返回soap消息至客户端,客户端再对soap消息进行解析获取返回数据。
  • 这种方式与第二种客户端桩的方式在于客户端桩方式已经将返回来的soap消息解析为数据并封装到对象里,我们只需要操作对象即可。

(三)调用web服务的更多相关文章

  1. Java进阶(三十一) Web服务调用

    Java进阶(三十一) Web服务调用 前言 有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下: https://www.evernote.com/shard/s744/sh/c37cd5 ...

  2. Android调用Web服务

    现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了.本文总结如何在android中调用Web服务,通过传递基 ...

  3. 常见的三种Web服务架构

    常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...

  4. 动态调用web服务

    通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...

  5. 使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法

    技能点:通过编写WebService,在页面js中调用WebService来进行数据查询. 网站开发,有些时候需要使用js在页面动态生成一些内容,但还有些数据要通过查询数据库才能获取的. 但由于诸如主 ...

  6. 在 SQL Server 的存储过程中调用 Web 服务

    介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. ...

  7. mvc路由引起异步调用web服务的问题

    从一篇blog得知使用脚本可以异步调用Web服务,觉得很新鲜,因为自己很少用到Web服务,所以决定写一写看看什么效果. 首先在UI项目(我使用的是MVC4.0)里创建一个Web服务. 添加Web服务后 ...

  8. 动态调用web服务 --WSHelper.cs

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;us ...

  9. 25.C# 异步调用Web服务

    1.创建Web服务 1.1VS新建ASP.Net空Web应用程序 1.2添加Web服务新建项 1.3添加GetWeather方法和相关类 using System; using System.Coll ...

随机推荐

  1. 如何获取UA?

    代码: function whatBrowser() { document.Browser.Name.value = navigator.appName; document.Browser.Versi ...

  2. IO流概述

    作用: 处理设备之间的数据传输的 I: Input(输入) , O: Output(输出) 什么是输入和输出? 我们说输入和输出问题是站在内存的角度而言 , 如果我们程序读取硬盘上的数据那么就是输入 ...

  3. 优雅编写Python3 的62个小贴士

    iterable技巧 ▍1.创建一个数字序列(从0到10,间隔为2)   >>> range(0,10,2)[0, 2, 4, 6, 8] ▍2.对一串数字求和(从0到10,间隔为2 ...

  4. Gitlab分支保护

    问题:使用Git时,会碰到需要对某个分支进行保护,避免其他人随意push. 这里以gitlab为例,具体操作如下: 1.进入项目 2.点击左侧列表中的Settings 3.点击Protected Br ...

  5. Qt编写自定义控件55-手机通讯录

    一.前言 前面几篇文章中的控件基本上难度系数接近0,甚至有凑控件数量的嫌疑,这次必须来一个强悍的控件,本控件难度系数在所有控件中排前五,代码量也不少,头文件都550行,实现文件1600行,为什么这么多 ...

  6. 使用 Sublime + PlantUML 高效地画图

    转自 http://www.jianshu.com/p/e92a52770832

  7. html页面js响应回车

    代码示例: document.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.a ...

  8. 在Eclipse Android中设置模拟器屏幕大小

    在Eclipse Android中设置模拟器屏幕大小是本文要介绍的内容,主要是来了解并学习Eclipse Android中模拟器的设置,具体关于Eclipse Android内容的详解来看本文. 方法 ...

  9. 最新javascript自动按比例显示图片,按比例压缩图片显示

    最新javascript自动按比例显示图片,按比例压缩图片显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  10. C# checked和unchecked 关键字详解

    checked 和 unchecked关键字用来限定检查或者不检查数学运算溢出的:如果使用了checked发生数学运算溢出时会抛出OverflowException:如果使用了unchecked则不会 ...