本文简单举例说明如何使用wsimport工具和JAX-WS API调用Web Service接口。
此方法的优点:使用JDK自带的工具和API接口,无需依赖第三方库。

JDK版本:1.8.0_141
开发工具:Eclipse

服务端源代码:下载
客户端源代码:下载

1. 使用JDK自带的wsimport工具根据WSDL生成web service client stub
1.1. 确保已安装JDK1.6版本或更高版本
1.2. 确保WebService服务已经启动
1.3. 在命令行运行如下命令:


参数说明:
-d  指定生成输出文件的保存路径(.class文件,根据需要决定是否生成class文件)
-s  指定生成的java源文件的保存路径(.java文件,根据需要决定是否生成java源文件)
-p  指定生成的java类的包(package)名称
http://localhost:8888/HelloService表示WebService URL地址,URL地址后面必须添加“?WSDL”参数。WSDL参数也可以是小写(wsdl)。
要查看服务具体提供了哪些操作,请在URL后面添加“?Tester”参数。(有时候传递Tester并不一定能返回结果。这和服务的发布方式有关)
1.4. 查看生成的文件
如图所示,输出的文件保存在按指定的包名称构成的路径中(jaxws\client\stub)。
 
2. 把生成的client stub类导入到eclipse工程中。
 

3. 编写客户端代码
创建jaxws.client. HelloAppClient类。
客户端代码入下所示:

package jaxws.client;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL; import javax.xml.namespace.QName;
import javax.xml.ws.Service; import jaxws.client.stub.HelloService; public class HelloAppClient {
public static void main(String[] args) {
sayHello();
} public static void sayHello() {
URL url = null;
try {
url = new URL("http://localhost:8888/HelloService");
} catch (MalformedURLException e) {
e.printStackTrace();
}
Service s = Service.create(url, new QName("http://service.jaxws/", "HelloServiceService"));
HelloService hs = s.getPort(new QName("http://service.jaxws/", "HelloServicePort"), HelloService.class);
String helloMessage = hs.sayHello("Tom");
System.out.println(helloMessage); try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}

注意:WebService中所说的Port和网络端口(port)不是一个概念。
以下WSDL文档中的一些简单的概念解释(如果想深入了解请查看WSDL标准):

A WSDL document defines services as collections of network endpoints, or ports. In WSDL, the abstract definition of endpoints and messages is separated from their concrete network deployment or data format bindings. This allows the reuse of abstract definitions: messages, which are abstract descriptions of the data being exchanged, and port types which are abstract collections of operations. The concrete protocol and data format specifications for a particular port type constitutes a reusable binding. A port is defined by associating a network address with a reusable binding, and a collection of ports define a service. Hence, a WSDL document uses the following elements in the definition of network services:

  • Types– a container for data type definitions using some type system (such as XSD).
  • Message– an abstract, typed definition of the data being communicated.
  • Operation– an abstract description of an action supported by the service.
  • Port Type–an abstract set of operations supported by one or more endpoints.
  • Binding– a concrete protocol and data format specification for a particular port type.
  • Port– a single endpoint defined as a combination of a binding and a network address.
  • Service– a collection of related endpoints.

代码说明:
(1)url表示WebService服务地址。此地址后面可以添加也可以不添加“?WSDL”参数。
(2)Service提供WebService服务的客户端视图(client view)。它作为endpoint的客户端代理,用于分发(dispatch)对远程Service操作(Operation)的调用(通俗的说就是把某个Service上的方法调用发送给远程服务器上提供服务的那个Service)。
(3)HelloService表示WebService服务client stub(类似于WebService服务在客户端的一个镜像,供客户端代码调用其接口)。
(4)通过hs.sayHello方法调用服务接口。

使用wsimport和JAX-WS调用Web Service接口的更多相关文章

  1. ASP.NET不通过添加web引用的方式调用web service接口

    尊重原著作:本文转载自http://bbs.csdn.net/topics/360223969 创建方法 //动态调用web服务 public static object InvokeWebSer(s ...

  2. php调用web service接口(.net开发的接口)

    实例代码1: try { $this->soapClientObj = new SoapClient(self::URL . '?wsdl', array('connection_timeout ...

  3. PHP 调用web service接口(.net开发的接口)

    实例代码1: try { $this->soapClientObj = new SoapClient(self::URL . '?wsdl', array('connection_timeout ...

  4. php5调用web service

    工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经 ...

  5. php5调用web service (笔者测试成功)

    转自:http://www.cnblogs.com/smallmuda/archive/2010/10/12/1848700.html 感谢作者分享 工作中需要用php调用web service接口, ...

  6. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  7. delphi调用web service出现 Unable to retrieve the URL endpoint for Service/Port .....

    delphi调用web service出现 Unable to retrieve the URL endpoint  for Service/Port, 错误截图如下 查了很长时间, 发现在DataM ...

  8. C#使用SOAP调用Web Service

    程序代码 using System;using System.IO;using System.Net;using System.Text; namespace ConsoleApplication1{ ...

  9. [Teamcenter 2007 开发实战] 调用web service

    前言 在TC的服务端开发中, 能够使用gsoap 来调用web service. 怎样使用 gsoap  , 參考 gsoap 实现 C/C++ 调用web service 接下来介绍怎样在TC中进行 ...

随机推荐

  1. 工具类:将其他编码类型转换成UTF-8或者其他类型的工具类

    将其他编码类型转换成UTF-8或者其他类型的工具类 public static String changeUTF(String str) { String newStr = null; try { n ...

  2. 转载 java基础题(面试必知)

    1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包 ...

  3. bootstrap 基础(一)

    1 bootstrap简介 bootstrap是Twitter公司的两名前端设计师设计的. bootstrap是一款基于HTML.CSS和JavaScript的一个前端框架. bootstrap的特点 ...

  4. 区块链下的io域名到底有多神秘?

    不知大家发现没有 一些科技创业公司首选域名后缀 是.IO WHY? 因为给人一种很酷的感觉啊~ 譬如,极客届享誉盛名的盘古越狱团队官网:http://pangu.io 国内优质社区,简书--创作你的创 ...

  5. 联合线程(案例顾客买蛋糕 :使用join()方法)

    运行效果图:

  6. 团队作业8----第二次项目冲刺(beta阶段)5.22

    Day4-05.22 1.每日会议 会议内容: 1.帮助新成员进一步了解项目. 2.陈鑫龙说明昨日任务的完成情况. 3.组长林乔桦安排今日的任务. 讨论照片: 2.任务分配情况: 每个人的工作分配表: ...

  7. mysql外键设置选项

    . cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式 在父表上update/delete记录时,将子表上匹配记录的 ...

  8. 201521123093 java 第一周总结

    201521123093 <Java程序设计> 第一周学习总结 1.本周学习总结 (1)第一次开始接触java语言,java的用法和C不太一样.在编程序时语句比以前的长. (2)学会了使用 ...

  9. Rabbitmq集群安装配置

    Rabbitmq集群安装与配置 一.rabbitmq安装环境准备 1.安装环境准备 这里,我们以两个节点为例进行安装,一个节点为内存节点,另一个节点为硬盘节点,具体可根据自己需要分配节点. 安装系统 ...

  10. MySQL的数据备份以及pymysql的使用

    一.MySQL的数据备份 语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql #示例: #单库备份 mysqldump -uroot -p123 ...