PHP調用webservice(JAVA版本) 參數沒法傳遞解決方法

工做中須要用php調用web service接口,php4裏用nusoap這個模塊調用的方法,其實php5裏已經包含了處理soap的模塊,下面用一個例子用說明:php

        extension=php_openssl.dllhtml

        extension=php_soap.dlljava

        php.ini 這2項要開通web

 web service服務是一個用java寫的簡單服務,環境爲Tomcat6.0 + Axis2,暴露的方法爲  String sayHello(String name)數組

傳遞一個String參數name,而後返回給客戶端。編碼

使用php5開發客戶端:
<?php
    header("content-type:text/html;charset=utf-8");
try {
    //$client = new SoapClient("HelloService.wsdl",array('encoding'=>'UTF-8'));
     $client = new SoapClient("http://localhost:8080/axis2/services/HelloService?wsdl",array('encoding'=>'UTF-8'));
     var_dump($client->__getFunctions());//打印暴露的方法
     print("<br/>");
     var_dump($client->__getTypes());//打印對應方法的參數和參數類型
     print("<br/>");
     

     $parm = "hello my name is liguoxiang";
     $param = array('agr0' => $parm);
     $arr = $client->sayHello($param);
     print_r($arr); 
    } catch (SOAPFault $e) {
      print $e;
  }
?>

 代碼確實很簡單吧,建立SoapClient對象時,能夠使用保存在本地WSDL文件,也能夠使用遠程的地址,後面的array數組裏能夠帶上不少的參數,具體參數能夠查php的SoapClient幫助,這裏帶的是字符集編碼,若是調用方法的參數裏有中文,必定要指定字符集編碼,不然會出錯。spa

調用web service前能夠先調用SoapClient的__geunctions()和__getTypes()方法看一下你要調用的web service暴露的方法,參數和數據類型,須要注意的是傳入的參數名必定要和soapclient裏面定義的一致,不然參數是傳不過去的.   (本例子中__geunctions()和__getTypes()方法打印的結果以下圖)code

從上圖能夠看出,雖然在java中sayHello(String name)中參數名爲name,可是這裏打印出來顯示參數名稱爲「agr0".因此,在上面代碼中使用$param = array('agr0' => $parm);arg0來做爲鍵。orm

運行結果以下:xml

不知道WSDL的狀況也能夠調用WS,須要使用SoapClient的__soapCall()或__call()方法,具體使用方法能夠查php的幫助文檔。

另外發現個問題,若是web service方法返回的是xml格式的字符串,php接收到之後會本身把數據內容解析出來,而不是xml字符串.

相關文章
相關標籤/搜索