WebService 入门知识

之前写了一篇博客,是使用cxf搭建webservice的客户端和服务端(暂时还没写完),突然意识到如果自己上手就学框架,似乎是一个不明智地做法,于是打算从头开始,先把框架放一边,学着用一些基础地知识完成webservice的操作,因为我一开始学webservice的目的,是想通过官方给的wsdl,查到自己城市公交车的实时位置,所以本文是以如何搭建客户端为主写的,至于服务端的搭建,暂时还不是我所面临的主要矛盾,所以先搁置在一边。正文开始......

webservice 服务端的搭建

步骤概要

0、 生成客户端代码wsimport
1、 查看服务说明书wsdl
2、 按照服务说明书进行编程,找关键节点

关键节点

wsdl内容 作用
<service name="{service_name}"> 创建{service_name}对象
<portType name="{portType_name}"> 实现类的名称
<portType>标签下面的<operation name="{operation_name}"> 这里的operation_name就是方法

具体步骤

零、生成客户端程序

生成客户端程序需要使用命令wsimport -s . {url}
注意此命令需要在需要创建客户端的文件内打开,如在eclipse中的src目录下,进入cmd或者Powershell,才能使用该命令在正确的地方创建好客户端代码
url中的内容为wsdl文件的绝对路径,包括来自于互联网的位置或者是本地绝对地址

举例说明:

0、先在eclipse中新建项目

1、在本地打开src文件夹

注意点击此按钮之后,需要双击src文件夹,才能进入src文件夹

2、按住shift加鼠标右键,打开Powershell

3、输入wsimport命令,此处采用一个网站提供的wsdl为例,此service的作用是查询手机号归属地,地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL

此地址来自于webxml官网,官网链接:http://www.webxml.com.cn/zh_cn/index.aspx
解析成功

Warning可以忽略

4、观察src文件夹下,出现了相关目录,在eclipse中观察需要刷新

5、新建一个package,此处采用的是在原包后加“.client”构建新的包,并新建Client.class文件,此处命名可以随意

一、查看wsdl服务说明书

观察wsdl文件,发现其本质上是一个xml文件,找到它们的关键标签,注意wsdl文件推荐从下往上
1、找<service name="{service_name}">

2、找<portType name="{portType_name}">,此处找使用soap协议的portType

3、找<portType>标签下面的<operation name="{operation_name}">

二、进行编程

此处代码非常简单,一般而言有两种方式,这里仅仅记录推荐的一种方式

package cn.com.webxml.client;

import cn.com.webxml.MobileCodeWS;
import cn.com.webxml.MobileCodeWSSoap;

public class Client {
	
	public static void main(String[] args) {
		// 1、创建服务视图
		MobileCodeWS service = new MobileCodeWS();
		
		// 2、根据服务视图创建实现类对象
		MobileCodeWSSoap port = service.getPort(MobileCodeWSSoap.class);
		
		// 3、调用方法, 这里可以传递参数
		String mobileCodeInfo = port.getMobileCodeInfo("13333333333", null);
		System.out.println(mobileCodeInfo);
		
		
	}
}

具体传何参数,由官网的说明书给出

地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo

最后测试


说明:有时会遇到使用wsimport生成客户端出错的现象,这主要是由于wsdl中的某几行不符合自动生成的规范,需要我们将整个wsdl文件复制到本地,保存为wsdl格式文件,将其中的<s:any/> </s:sequence>改成<s:any minOccurs="2" maxOccurs="2"></s:any>如图:

改成

再将来自网络的url改成本地的绝对路径,就可以使用wsimport生成客户端代码了

posted @ 2020-07-01 22:15  zhiless  阅读(245)  评论(0编辑  收藏  举报