客户端与服务端模式,非web端发布

1.1      【Jax-ws第一个例子】

1.1.1     第一步:服务端开发

  1. 编写SEI(Service Endpoint Interface),SEI在webservice中称为portType,在java中称为接口。

代码如下:

/**

* 天气查询服务接口

* @version V1.0

*/

public interface WeatherInterface {

//天气查询

public String queryWeather(String cityName);

}

  1. 编写SEI实现类,此类作为webservice提供服务类

代码如下:

@WebService

public class WeatherInterfaceImpl implements WeatherInterface {

@Override

public String queryWeather(String cityName) {

System.out.println("from client.."+cityName);

String result = "晴朗";

System.out.println("to client..."+result);

return result;

}

public static void main(String[] args) {

//发送webservice服务

Endpoint.publish("http://192.168.1.100:1234/weather", new WeatherInterfaceImpl());

}

}

注意:

SEI实现类中至少要有一个非静态的公开方法需要作为webservice服务方法。

public class 上边要加上@WebService

  1. endpoint发布服务

//发送webservice服务

Endpoint.publish("http://192.168.1.100:1234/weather", new WeatherInterfaceImpl());

1.1.2     第二步:查看wsdl

Webservice发布成功,通过wsdl查看webservice发布的正确性

  1. 在地址栏输入(注意后面的参数?wsdl)

http://192.168.1.100:1234/weather?wsdl

  1. Wsdl不是webService,只是获取一个用于描述WebService的说明文件
  2. wsdl- WebServiceDescriptionLanguage,是以XML文件形式来描述WebService的”说明书”,有了说明书,我们才可以知道如何使用或是调用这个服务.

1.1.3     第三步:Wsimport生成客户端调用类

1.1.3.1              Wsimport介绍

wsimport是jdk自带的webservice客户端工具,可以根据wsdl文档生成客户端调用代码(java代码).当然,无论服务器端的WebService是用什么语言写的,都可以生成调用webservice的客户端代码,服务端通过客户端代码调用webservice。

wsimport.exe位于JAVA_HOME\bin目录下.

常用参数为:

-d<目录>  - 将生成.class文件。默认参数。

-s<目录> - 将生成.java文件。

-p<生成的新包名> -将生成的类,放于指定的包下。

(wsdlurl) - http://server:port/service?wsdl,必须的参数。

示例:

C:/> wsimport –s . http://127.0.0.1:1234/weather?wsdl

注意:-s不能分开,-s后面有个小点

1.1.3.2              客户端生成注意事项:

  1. 可以通过java –version检查你当前的版本号保存是jdk1.6以上。Jdk1.6.0_13以后的版本支持jaxws2.1。
  1. 在Eclipse中创建一个空的java工程为wsimport,此工程作为存放客户端代码。
  2. cmd命令行进入此wsimport 工程的src目录,

输入以下命令:

参数说明:-s是指编译出源代码文件,后面的.(点)指將代码放到当前目录下.

最后面的http….是指获取wsdl说明书的地址.

  1. 生成完成,刷新Eclipse中wsimport工程,将src下生成.java文件代码Copy到webservice客户端工程(见下)中。

1.1.4     第四步:客户端编写

代码如下:

/**

* 天气查询客户端

* @version V1.0

*/

public class WeatherClient {

public static void main(String[] args) {

//创建服务视图

WeatherInterfaceImplService weatherInterfaceImplService =new WeatherInterfaceImplService();

//通过服务视图得到服务端点

WeatherInterfaceImpl weatherInterfaceImpl= weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);

//调用webservice服务方法

String result = weatherInterfaceImpl.queryWeather("郑州");

System.out.println(result);

}

}

1.1.5     webservice优点

1、采用xml支持跨平台远程调用。

2、基于http的soap协议,可跨越防火墙。

3、支持面向对象开发。

4、有利于软件和数据重用,实现松耦合。

1.1.6     webservice缺点

由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap协议进行数据传输的效率不高。

如果要使用SOAP1.2版本也可,但是测试必须借助第三方,因为jdk不支持根据wsdl(SOAP1.2版本的)生成客户端类,可以使用CXF生成并测试

webservice初识,SOAP1.1版本的更多相关文章

  1. WebService初识

    Web service 是一种跨编程语言和跨操作系统平台的远程调用技术,即跨平台远程调用技术.也就是说,不管是J2EE架构,还是.net架构 只要按照规范就可以进行通信,实现数据交互等. 这里说的&q ...

  2. WebService学习-第一弹

    一:WebService简介(1)简介----百度百科(注意标识的重点) Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言 ...

  3. webservice的Axis2入门教程java版

    本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...

  4. WebService之CXF框架

    本文主要包括以下内容 ant工具的使用 利用cxf实现webservice cxf与spring整合 ajax访问webservice ant 工具 1.为什么要用到ant这个工具呢? Ant做为一种 ...

  5. axis2之webservice

    Axis2之webservice超详细教程 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的 ...

  6. webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】

    自定义webservice服务 我们在上一章节中已经使用wsimport生成本地代理来调用webservice的服务了,其实我们自己写的web应用程序也是可以发布webservice的 我们发布了we ...

  7. 调用webService的几种方式

    转自:http://blog.csdn.net/u011165335/article/details/51345224 一.概览 方式1: HttpClient:可以用来调用webservie服务,也 ...

  8. WebService就是这么简单

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧.... 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么 ...

  9. WebService之soap类型的服务和rest类型的服务

    1.引言 WebService顾名思义就是web服务,web服务主要有两种,一种是基于soap类型的服务,一种是基于rest类型的服务,其中soap类型的服务有两种版本,一种是soap1.1版本,一种 ...

随机推荐

  1. java代码Math.sqrt

    总结:这个判断小数的题目,当时全只2有一个人想出了结果.老师很开心.我很桑心~~~~ 我没想到要取膜,我只想到了除以等于0就够了.至于中间的“取膜”,我没凑齐来,还是不够灵活 package com. ...

  2. EPEL for CentOS or Redhat

    注:地址可能会变 RHEL/CentOS 7 64 Bit # wget http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release ...

  3. Java基础——java中String、StringBuffer、StringBuilder的区别

    (转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...

  4. 解决因为终端打印造成的java程序假死

    问题状态: java 程序 日志采用 log4j 运行时由另一个管理进程拉起,程序在后台运行. 现象: 程序后台运行时,运行一段时间后假死 分析原因: 尝试打印输出,定位假死的具体位置,发现出现假死的 ...

  5. hdu1069

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; c ...

  6. 【Sping管理bean的原理】

    spring容器默认情况下,当服务启动时,解析配置文件,实例化文件中的所有类. 我们直接使用spring时,获取spring注入的bean是这样的, ApplicationContext ctx =  ...

  7. docker17.09.1-ce 执行systemctl resart docker重启失败的问题

    记录在实际操作中碰到的docker问题 环境信息: 安装完kolla ocata版本,并且编译成功各openstack 组件的容器镜像 [root@localhost ~]# docker --ver ...

  8. 使用Realsense D400 camera系列跑rgbdslamv2

    Ubuntu16.04,kinetic 在之前写的博文<如何使用ROS查找rgbdslam代码包框架的输入>中提到,一开始不知道整体框架,只用感性认识去跑rgbdslamv2的包,是一个天 ...

  9. luogup3834(主席树模板)

    luogup3834(主席树模板) 给定由N个正整数构成的序列,将对于指定的闭区间查询m次其区间内第k小值.1≤N,M≤2e5. 有一个做法,是对于每个序列的前缀建一颗权值线段树,然后通过权值线段树相 ...

  10. Unity---DOTween插件学习(2)---设置参数、Ease曲线、回调函数、动画控制函数

    目录 6.Set设置参数 7.Ease曲线 8.回调函数 9.动画控制函数 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注Andy老师 6.Set设置参数 在Unity中添加一个Cub ...