调用webservice:开发环境是:eclipse3.6 (java ide)+ jdk 1.6 + tomcat 7.0 + axis2 1.6 + php 5.2.14 (ide为eclipse-php-helios-sr1-win32.zip)+ apache2.2.15,这些软件随时都在更新,请读者谷歌百度一下到官网下载。
一、在java端编写服务,并利用axis2发布成服务,本文的服务名为sayhi,里面有一个函数sayhello(),代码如下:
package hi; public class sayhi { public string sayhello(string user,string info) { returnhello, my friend + user + info; } }
二、编写php客户端,调用axis2发布的webservice
2.1 下载nusoap.rar,将解压出来的lib文件夹添加到工程
2.2 编写客户端php,内容如下,代码如下:
soap_defencoding = 'utf-8'; //$client->decode_utf8 = false; // 设置参数(注意:php只能以'数组集'方式传递参数) $param = array( 'user' => '国假不旅游 ', 'info' => ' welcome to my home!'); // 调用远程方法 'sayhello'为服务中的方法名 //'http://hi'为wsdl文件中targetnamespace的值 $result = $client->call('sayhello', $param,'http://hi'); // 显示执行结果 if (!$err=$client->geterror()){ //开源代码phprm.com echo $result; }else{ echo $err; } ?>
三、执行结果为:
hello,my friend 国假不旅游 welcome to my home!
webservice乱码问题:
许多使用nusoap 调用.net webservice或j2ee webservice的朋友可能都遇到过中文乱码问题(我用的是php调用nusoap),下面介绍这一问题的出现的原因和相应的解决方法。
nusoap调用webservice出现乱码的原因:
通常我们进行webservice开发时都是用的utf-8编码,这时我们需要设置:
$client->soap_defencoding = utf-8;
同时,需要让xml以同样的编码方式传递:$client->xml_encoding = utf-8;
至此应该是一切正常了才对,但是我们在输出结果的时候,却发现返回的是乱码.
nusoap调用webservice出现乱码的解决方法:
实际上,开启了调试功能的朋友,相信会发现$client->response返回的是正确的结果,为什么$result = $client->call($action, array(parameters => $param)); 却是乱码呢?
研究过nusoap代码后我们会发现,当xml_encoding设置为utf-8时,nusoap会检测decode_utf8的设置,如果为true,会执行 php 里面的utf8_decode函数,而nusoap默认为true,因此,我们需要设置.
本文链接:
收藏随意^^请保留教程地址.