上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式:

1.导出WebService服务端服务接口到jar包,客户端引入jar包即可,Client开发步骤详见上一篇博客。

2.通过wsimport工具导出webservice服务,同时简化Client开发。

本文主要介绍通过wsimport导出webservice:

wsimport有几个很重要的参数,

-d 表示输出的目录,目录必须事先存在,否则导出失败。

-keep表示导出webservice的class文件时是否也导出源代码java文件。

-verbose表示详细信息。

看我们的导出命令。我们直接导在d盘中。

我们直接把生成的目录放在第2个建好的项目中去。这样我们客户端的项目就可以直接使用服务端的接口IMyservice了。顺便我们把前一章的client访问类也拷过来测试一下。目录结构如下【注意这是一个新的项目】:

直接运行MyClient测试一下。

 package org.WebService.ws.annotation;

 import java.net.MalformedURLException;
import java.net.URL; import javax.xml.namespace.QName;
import javax.xml.ws.Service; public class Client { public static void main(String[] args) throws MalformedURLException {
// TODO Auto-generated method stub
URL url=new URL("http://localhost:9998/hw?wsdl");
QName qname = new QName("http://annotation.ws.WebService.org/", "CalculatorImplService");
Service service = Service.create(url, qname);
ICalculator cal = service.getPort(ICalculator.class);
cal.add(1, 2);
cal.minus(2, 1); } }

和之前我们在服务端测试的效果是一样的,不同的是文件不一样。wsimport生成的文件将服务端的webservice折成若干文件了。每一个方法和请求分别对应2个文件。你会发现其中有个类CalculatorImpl:

@WebServiceClient(name="CalculatorImplService", targetNamespace="http://annotation.ws.WebService.org/", wsdlLocation="http://localhost:9998/hw?wsdl")
public class CalculatorImplService extends Service
{

这个类是注解好的客户端程序,它里面有个方法:

@WebEndpoint(name="CalculatorImplPort")
public ICalculator getCalculatorImplPort()
{
return ((ICalculator)super.getPort(new QName("http://annotation.ws.WebService.org/", "CalculatorImplPort"), ICalculator.class));
}

直接帮我们生成了一个qname访问程序。既然如何,我们就不用自己写qname了,直接拿来用测试岂不更好?

简化后的客户端测试方法如下

  1. public class MyClient2 {
  2. public static void main(String[] args) {
  3. CalculatorImplService myServiceImplService=new CalculatorImplService();
  4. ICalculator msis= myServiceImplService.getCalculatorImplPort();
  5. msis.add(1, 4);
  6. msis.minus(1, 4);
  7. }
  8. }

结果是一样的。

webservice快速入门-使用wsimport生成ws服务端(二)的更多相关文章

  1. webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)

    1.定义接口 package org.WebService.ws.annotation; import javax.jws.WebService; @WebService public interfa ...

  2. axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项

    在用axis2生成服务端文件和客户端文件,当客户端文件调用服务端文件时,都是通过wsdl文件生成的 配置文件进行相互的调用. 在一开始做开发测试的时候,通过soapUI进行调用接口的时候,可以调用成功 ...

  3. HangFire快速入门 分布式后端作业调度框架服务

    安装 NuGet 上有几个可用的Hangfire 的软件包.如果在ASP.NET应用程序中安装HangFire,并使用Sql Server作为存储器,那么请在Package Manager Conso ...

  4. SignalR入门之多平台SignalR服务端

    之前创建SignalR服务端是基于Web应用程序而言的.那么能不能把SignalR服务端做成控制台应用程序.Winform或windows服务呢? 答案是肯定的. 之前尽管看起来好像是IIS和ASP. ...

  5. socket 通信 入门3 android 客户端 C# 服务端

    这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的... 当然这里是未完成的  只是简单展示一下大致思路 首先连接建立起来后  服务端给客户端一条信息  告诉 ...

  6. [Python 网络编程] TCP编程/群聊服务端 (二)

    群聊服务端 需求分析: 1. 群聊服务端需支持启动和停止(清理资源); 2. 可以接收客户端的连接; 接收客户端发来的数据 3. 可以将每条信息分发到所有客户端 1) 先搭架子: #TCP Serve ...

  7. 网络编程、三要素、Socket通信、UDP传输、TCP协议、服务端(二十五)

    1.网络编程概述 * A:计算机网络 * 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传 ...

  8. Google Protocol Buffers 快速入门(带生成C#源码的方法)

    Google Protocol Buffers是google出品的一个协议生成工具,特点就是跨平台,效率高,速度快,对我们自己的程序定义和使用私有协议很有帮助. Protocol Buffers入门: ...

  9. Ant快速入门(三)-----定义生成文件

    适应Ant的关键就是编写生成文件,生成文件定义了该项目的各个生成任务(以target来表示,每个target表示一个生成任务),并定义生成任务之间的依赖关系. Ant生成文件的默认名为build.xm ...

随机推荐

  1. C#类似版本号有多个分割符可以产生的排列组合,类似版本号比较

    我采用asp.net进行演示 送给有缘人吧,可以获得类似版本号的功能,也可以对比两个版本号,我这里是其他需要用逗号分割的 using System; public partial class _Def ...

  2. Office PPT中如何插入flash

    1 在"视图"选项中找到工具栏,控件工具箱,最后一个其他工具中的shockwave flash object 2 当鼠标变成十字架之后随便画一个矩形,然后会出现一个白色的矩形中间十 ...

  3. centos下两种方法安装git

    来自:http://blog.slogra.com/post-176.html 今天下个包需要使用git,网上找了下看到大多数只有编译安装,并且编译安装还有错,不知道他们也没有实验过,这里我来给大家介 ...

  4. Linux Bash 脚本:自己定义延迟代码块(裸数据保存方案)

    结合 alias 和 read 使用方法.能够保存一些将要延迟执行的脚本,或者裸数据(字符串不被扩展)到一个变量中.以备后用. $ alias BEGIN='read -d "" ...

  5. 算法笔记_193:历届试题 连号区间数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R ...

  6. 新安装的MySQL的简单配置

    修改配置文件 bind-address = 10.6.20.1 port = 3306 character_set_server = utf8 max_connect_errors = 1000000 ...

  7. vue 渲染流程

    1.DOM 节点树 高效的更新所有这些节点会是比较困难的,因为原生的DOM节点属性很多,渲染性能差. 2.虚拟 DOM “虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼. ...

  8. Openerp 7.0 附件存储位置

    我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...

  9. exception PLS-00215: String length constraints must be in range (1 .. 32767)

      exception PLS-00215: String length constraints must be in range (1 .. 32767) CreationTime--2018年8月 ...

  10. plsql 快捷键配置

      plsql 快捷键配置 CreateTime--2018年4月23日17:41:45 Author:Marydon 功能快捷键 预设条目 中文解释 快捷键配置Edit/Undo 撤销 ctrl+z ...