本文简单举例说明如何使用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. 【转载】makefile经典教程

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...

  2. UICollectionView中Cell左对齐 居中 右对齐 等间距------你想要的,这里都有

    支持靠左,居中,靠右,等间距对齐. 靠左等间距.png 居中等间距.png 靠右等间距.png #import <UIKit/UIKit.h> typedef NS_ENUM(NSInte ...

  3. 最近做了一个通达OA的大料:20170905最新版本破解可改单位名称,无限制安装

    最近做了一个通达OA的大料:20170905最新版本破解可改单位名称,无限制安装 用户约七十家,总体不错,修改了两次注册授权文件,完美使用中 可联系麦枫http://www.mfsun.com管理员Q ...

  4. KVM虚拟化主机安装

    KVM虚拟化主机安装 最小化安装CentOS6.X或者CentOS7.X,RHEL6.X以上系列建议建议选择安装最小虚拟化主机 如果要安装桌面可以先选择最小化虚拟主机,再选择Gnome桌面包 安装过程 ...

  5. 201521123082《Java程序设计》第3周学习总结

    201521123082<Java程序设计>第3周学习总结 标签(空格分隔): Java 1.本周学习总结 XMind图: 2.书面作业 Q1.代码阅读 public class Test ...

  6. 团队作业8——Beta项目(冲刺计划)

    Beta阶段冲刺计划 经过几周的努力我们完成了Alpha的开发,进过一段时间的调整与重组我们继续向Beta版进发. 1. 新成员介绍 林乔桦(201421123074):掌握c语言,JavaScrip ...

  7. 【Alpha】——Fourth Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 完善添加功能 测试统计功能 郑靖涛 完善删除功能 着手编写报表设计 杨海亮 完善查找功能 协助编写统计功能 ...

  8. 201521123037 《Java程序设计》第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 查看ArrayLi ...

  9. 201521123037 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结上课内容. 1.识别类.对于一个系统中,对于名词大多为类或属性,对于动词大多为方法. 2.注释.类注释.方法 ...

  10. 201521123085《Java程序设计》第4周学习总结

    1.本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 2.书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) Q2.面向对 ...