由于之前的示例是在当前项目下发布的server,也是在当前项目下访问的server发布的webservice。但在实际应用中,我们的服务端往往是和客户諯分离的,甚至它们是不同的项目中不同的人写的。而像之前的在当前项目中使用服务端的接口类:IMyService就不太现实了。因为此时你只有服务端的wsdl,怎么可以直接用服务端的接口类接收并测试呢。如何解决这个问题?

JDK的bin目录下自带就有一个工具,wsimport。一个用来导出webservice的东东,服务端可以导其导出后生成jar文件,然后客户端引用不就行了?

好的,我们下面来看下怎么使用它。

它有几个很重要的参数,

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

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

-verbose表示详细信息。

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

  1. wsimport -d d: -keep -verbose http://localhost:7777/tudou?wsdl

我们导出的文件目录是D:\com\whaty\platform\ws\server这个目录大家有没有发现,正好和我们之前的服务器端目录是一样的,但实际上在wsdl中namespace是相反的http://server.ws.platform.whaty.com/。也就是说服务端生成wsdl时反过来生成了namespace,而wsimport根据wsdl生成时又反过来给还原了去。

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

直接运行MyClient测试一下。

  1. package com.whaty.platform.ws.client;
  2. import java.net.MalformedURLException;
  3. import java.net.URL;
  4. import javax.xml.namespace.QName;
  5. import javax.xml.ws.Service;
  6. import com.whaty.platform.ws.server.IMyservice;
  7. /**
  8. * @className:MyClient.java
  9. * @Desc:访问发布的服务
  10. * @author:lizhuang
  11. * @createTime:2012-12-21 上午01:23:57
  12. */
  13. public class MyClient {
  14. public static void main(String[] args) {
  15. try {
  16. //服务WSDL Document的地址
  17. URL url = new URL("http://localhost:7777/tudou?wsdl");
  18. //1.Qnameqname是qualified name 的简写
  19. //2.构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成
  20. //由发布的wsdl可知namespace为http://server.ws.platform.whaty.com/,
  21. QName qname=new QName("http://server.ws.platform.whaty.com/","MyServiceImplService");
  22. Service service=Service.create(url, qname);
  23. IMyservice ms=service.getPort(IMyservice.class);
  24. ms.add(1, 4);
  25. ms.minus(1, 4);
  26. } catch (MalformedURLException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }

控制台打印:

a+b=5
a-b=-3

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

  1. @WebServiceClient(name = "MyServiceImplService", targetNamespace = "http://server.ws.platform.whaty.com/", wsdlLocation = "http://localhost:7777/tudou?wsdl")
  2. public class MyServiceImplService

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

  1. /**
  2. *
  3. * @return
  4. *     returns IMyservice
  5. */
  6. @WebEndpoint(name = "MyServiceImplPort")
  7. public IMyservice getMyServiceImplPort() {
  8. return super.getPort(new QName("http://server.ws.platform.whaty.com/", "MyServiceImplPort"), IMyservice.class);
  9. }

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

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

  1. package com.whaty.platform.ws.client;
  2. import com.whaty.platform.ws.server.IMyservice;
  3. import com.whaty.platform.ws.server.MyServiceImplService;
  4. /**
  5. * @className:MyClient2.java
  6. * @Desc:使用JDK wsimport生成的MyServiceImplService快速访问我们的服务。
  7. * @author:lizhuang
  8. * @createTime:2012-12-22 上午12:24:37
  9. */
  10. public class MyClient2 {
  11. public static void main(String[] args) {
  12. MyServiceImplService myServiceImplService=new MyServiceImplService();
  13. IMyservice msis= myServiceImplService.getMyServiceImplPort();
  14. msis.add(1, 4);
  15. msis.minus(1, 4);
  16. }
  17. }

你会发现结果是一样的。

webservice wsdl 生成服务的更多相关文章

  1. 根据wsdl生成服务端代码

    场景描述 最近在和一家公司做业务接口对接,由他们那边回调我们这边,对方直接扔过来一个webservice的wsdl文件,让我们按照他们的规范来做webservice服务, 大多数的对接应该是我们创建完 ...

  2. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  3. 【转】SoapUI5.0创建WebService接口模拟服务端

    原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...

  4. 根据WSDL生成代理类方式

    方式一: 1.使用VS2010提供的工具wsdl.exe由WSDL文件生成cs文件 使用wsdl.exe的/serverInterface选项(或缩写的 /si)指定输入的wsdl文件(注意,如果要转 ...

  5. 使用GSoap开发WebService客户端与服务端

    Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...

  6. wsdl自动生成Java代码,根据wsdl生成Java代码

    wsdl自动生成Java代码,根据wsdl生成Java代码 >>>>>>>>>>>>>>>>>&g ...

  7. Java WebService接口生成和调用 图文详解>【转】【待调整】

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...

  8. SoapUI5.0创建WebService接口模拟服务端(转)

    转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 Mat ...

  9. WebService技术,服务端and客户端JDK-wsimport工具(一)

    使用webservice服务,需要了解几个名词:soap 简单对象协议.http+xml . WSDL 先看下代码结构: 服务端代码与客户端代码分别处于两不同的包中 一.服务端内容 服务端: @Web ...

随机推荐

  1. Oracle 11g 之自动收集统计信息

    在Oracle的11g版本中提供了统计数据自动收集的功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能). 1.查看自动收集统计信息的任务及状态 ...

  2. AngularJs记录学习03

    AngularJs的路由是一个组件,需要自己额外添加,在目录/src/ngRoute中 三个文件route.js,routeParams.js,ngView.js <html> <h ...

  3. angularjs2 学习笔记(二) 组件

    angular2 组件 首先了解angular2 组件的含义 angular2的应用就是一系列组件的集合 我们需要创建可复用的组件供多个组件重复使用 组件是嵌套的,实际应用中组件是相互嵌套使用的 组件 ...

  4. arcgis中使用excel中x,y坐标创建点问题

    文件——从x,y中添加,可以显示点的位置 右击图层导出数据时,出现无法绘制图形,生成shapefile文件的情况.经过排除数据发现 当x,y坐标值中出现null等异常值时,会出现上述无法导出的情况.

  5. JavaScript高级程序设计之Date类型

    ECMAScript 中的 Date 类型是在早期 Java 的 java.util.Date 类基础上构建的. Date 类型使用自 UTC (国际协调时间)1970年1月1日午夜(零时)开始经过的 ...

  6. iOS学习之界面通信

    一.属性传值 在SecondViewController.h里 #import <UIKit/UIKit.h> @interface SecondViewController : UIVi ...

  7. AngularJS 授权 + Node.js REST api

    作者好屌啊,我不懂的他全都懂. Authentication with AngularJS and a Node.js REST api 几个月前,我开始觉得 AngularJS 好像好牛逼的样子,于 ...

  8. [转]Reed Solomon纠删码

    [转]Reed Solomon纠删码    http://peterylh.blog.163.com/blog/static/12033201371375050233/     纠删码是存储领域常用的 ...

  9. 如何让webapi只返回json格式数据

    最近脑子不好用,总记不住事,以前搞过让webapi只返回json格式的数据,今天有人问我又突然想不起了,后来总结一下,备忘一下,大概有下面几种处理方式 1.在WebApiConfig类的Registe ...

  10. My First Django Project (3) - Apache set up

    Holy moly!!!!因为漏了一下斜杠,害我反复调试了2,3天,无法读取static 文件,一直找不出原因,后来在apache的error.log中发现了原因. 1. 下载了apache 2.4, ...