WebService 常用免费调用接口 与 JWS(Java Web Service) 调用第三方 webService 天气服务
转https://wangmaoxiong.blog.csdn.net/article/details/87370571
wsimport 生成代理类
1、已经知道 Java 开发时,使用自带的 wsimport.exe 工具即可根据服务端提供的 WSDL 文件生成客户端代理类,所以第一步就是根据上面的 WSDL 地址生成客户端使用的代理类。
解析组件 's:schema' 时出错:

、如上所示生成时出错,执行失败,出现的原因是 webService 服务端如果是 .net 写的,则使用 Java wsimport.exe 生成时就会报错。
2、开发中如果没有遇到这个错误,自然是最好,万一遇到,则可以一试,亲测有效。
解决办法
1、针对 .net 开发的 webService 服务端,Java wsimport.exe 生成代理类出错解决办法如下:
|
1)将服务端的 wsdl 文档保存到本地,如 E:\wmx\webservice\weather.wsdl.xml、E:\wmx\webservice\weather.wsdl、E:\wmx\webservice\weather.xml (经实测文件的后缀名其实关系不大,都可以正常生成) 2、修改 wsdl 文档以下内容: |

2、直接在 wsdl 文档页面右键,选择查看源代码,然后将 Ctrl + S 保存即可,然后便可打开文件,替换其中的内容:

3、此时使用 wsimport.exe 再次生成,便可以正确执行:

JWS 客户端调用
1、显然这种别人写的服务端,不用多想,将生成的 .java 文件全部导入即可,然后需要找到里面的服务接口,可以凭直觉,也可以从 wsdl 文档中的 <service> 元素中查找
2、通常情况下,从 wsdl 的 Url 地址中也是可以找到的,如本例的 :http://www.webxml.com.cn/WebServices/Weath
erWebService.asmx?wsdl,就是其中的 "WeatherWebService"

、将生成好的 .java 文件导入到项目中:

特别提醒:
|
1)代理类中有些类相互引用时,使用的是绝对地址,如在 WeatherWebServiceSoap 接口中使用了这样的代码, cn.com.webxml.ArrayOfString 来引用 ArrayOfString ,于是要不就是自己新建和它一样的包,然后放置进去,如上所示,要不就是修改源码中原来的包名和自己包名的保持一致,否则报错。 2)因为 wsimport.exe 是转换的本地的 wsdl 文件,而不是在线的 wsdl 文件,所以代码中关联的也是本地的 wsdl 文件,这个文件必须存在,如果这个文件删除了,则项目运行的时候就会找不到而解析失败。所以如果文件移动了位置,则代码中也要相应的修改。 3)建议将 wsdl 文件放在项目中(资源目录下),这样就可以和项目一起移动,否则如果将来项目移动了,而忘了本地的 wsdl 文件,显然运行就报错了。
、调用测试类代码如下,这是我们自己唯一要写的代码(如果上面没有移动 wsdl文件到项目中内部的话),几行即可搞定:
|
5、运行结果如下:


浙公网安备 33010602011771号