加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice 调用国内航班,天气预报 等外部接口

发布时间:2020-12-16 23:05:25 所属栏目:安全 来源:网络整理
导读:通过前面的记录,我们知道发布一个服务之后,如果别人需要调用,则必须知道我们的wsdl地址,同理,我们要调用天气预报的接口,也必须得到该对应wsdl,下面给出比较齐全的wsdl网址,需要的可以自己去查阅:http://www.webxml.com.cn/zh_cn/web_services.aspx

通过前面的记录,我们知道发布一个服务之后,如果别人需要调用,则必须知道我们的wsdl地址,同理,我们要调用天气预报的接口,也必须得到该对应wsdl,下面给出比较齐全的wsdl网址,需要的可以自己去查阅:http://www.webxml.com.cn/zh_cn/web_services.aspx

wKiom1S_IhvieP_4AADi1iy0uko001.jpg


今天的例子,将讲解如何调用去全国电视tv的接口

通过查阅,可以得到该wsdl地址为:



http://webservice.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl

(一)、wsimport生成代理类

? ?wsimport在 jax-ws使用webservice中已经介绍使用过了,这里直接使用。

? ?创建new web项目,cmd进入项目路径

?准备将所有代理类,生成到com.xj.service 这个package中 ??

D:workspaceHangBansrc>wsimport?-p?com.xj.tv?-keep?http://webservice.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl

?使用jdk6编译报错?


[WARNING] src-resolve.4.2:?Error resolving component 's:schema'. It was detected
?that 's:schema' is in namespace 'http://www.w3.org/2001/XMLSchema',but compone
nts from this namespace are not referenceable from schema document 'file:/E:/wor
kspace/practical/WebServiceWeather/src/com/weather/wsdl.xml#types?schema1'. If t
his is the incorrect namespace,perhaps the prefix of 's:schema' needs to be cha
nged. If this is the correct namespace,then an appropriate 'import' tag should
be added to 'file:/E:/workspace/practical/WebServiceWeather/src/com/weather/wsdl
.xml#types?schema1'.

.............


这应该是个bug

解决方法:将wsdl保存到本地,将所有的

<s:element?ref="s:schema"/> 改成?<s:any minOccurs="2" maxOccurs="2"/> 并且将后面的

<s:any /> 删除。

再次执行wsimport命令,wsdl地址改为本地地址如下

wsimport -p com.xj.service -keep e:/hangban.xml

如果还是报错,就将wsdl文件里面的<wsdl:documentation?节点全部删除。应该就没问题了

生成好java文件之后 。就可以调用了。

wKiom1S_T77wBCnqAAK0hemBV1o789.jpg



可以看到com.xj.tv中都是通过wsimport生成的代理类,可以直接使用

上面有很多类,已经对应的response,我们要找到的是带有soap的类

(二)、客户端直接调用代理类

?ChinaTVprogramWebService?service?=?new?ChinaTVprogramWebService();
		ChinaTVprogramWebServiceSoap?soap?=?service.getChinaTVprogramWebServiceSoap();
		ArrayOfString?arrayOfString?=?soap.getTVchannelString(80);
		List<String>?list?=?arrayOfString.getString();
		for(String?string:list){
			System.out.println(list);
		}

给TVchannel任意一个id,例如80,可以看到输出结果

[411@莆田电视台]


其他调用方式类似了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读