調用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;
- publicclass sayHi {
- public String sayHello(String user,String info) {
- return"Hello, My Friend "+ user + info;
- }
- }
二、編寫php客戶端,調用axis2發布的webservice
2.1 下載nusoap.rar,將解壓出來的lib文件夾添加到工程
2.2 編寫客戶端php,內容如下,代碼如下:
- <?php
- require_once ("./lib/nusoap.php");
- // 要訪問的webservice路徑
- $NusoapWSDL="http://localhost:8080/axis2/services/sayHi?wsdl";
- // 生成客戶端對象
- $client = new nusoap_client($NusoapWSDL);
- //$client->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()){
- //開源代碼Vevb.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,因此,我們需要設置.
新聞熱點
疑難解答