WebService学习总结——调用第三方提供的webService服务

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示。

第一步我们需要找到提供第三方服务的Webservice的网络地址。

eg:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx 

第二步借助java开发里面的jdk中的wsimport命令工具自动生成客户端代码。

eg:通过idea、eclipse等开发工具创建一个java项目,通过打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"生成客户端代码。

http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl---注意这个为路径,也可以将下载到本地的.xml改为.wsdl来访问。

第三步查看生成的客户端代码,同时借助生成的代码编写请求代码。

 

注意:通过wsimport命令工具生成客户端代码时,注意出现的错误。

1、”undefined element declaration 's:schema'“报错问题?

运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,问题的解决办法:

a、将对应的wsdl文档保存到本地;

b、修改wsdl文档的部分内容: <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>,再次执行wsimport生成代码,这次使用保存在本地的WeatherWS.wsdl文件来进行生成。

2、 "Rpc/encoded wsdls are not supported in JAXWS 2.0"这个错误,出现在用NB6创建WebService客户端时,该服务WSDL文件有如下语句:

<wsdl:binding name="AgentBankServiceSoapBinding" type="impl:AgentBankService">

      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="refundPayDetailInput">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="refundPayDetailInputRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://pay.foundercy.com" use="encoded"/>

</wsdl:input>

到网上查阅了相关信息,一般说法是JAX-WS 2.0无法直接支持rpc/ecn类型的服务,在一篇为rpc/enc类型的google服务讲解使用JAX-WS2.0变通的方法访问服务时有所提到.而Axis2的 wsdl2java工具对于rpc/enc类型的wsdl文件牏处理时恐怕也有相似的问题.更不幸的是,服务端的WSDL对于客户有开发人员来说几乎是不可能改变的.有如下一些解决方案可能会有用:

a、用回老版本工具,比如Axis1或使用JAX-RPC类型等等.

b、手工做些辅助的工作,如Accessing Google Web Service using JAX-WS 所述的一样.

c、对服务端的WSDL作些相应在改变,比如将encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 句去掉,并将use="encoded"改为use= "literal".

d、在向导中把J2EE改为1.4版本之前.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值