首頁 >php教程 >php手册 >php中nusoap调用java axis2发布的webservice

php中nusoap调用java axis2发布的webservice

WBOY
WBOY原創
2016-05-25 16:40:331131瀏覽

调用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) { 
    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    =    &#39;UTF-8&#39;;    
//$client->decode_utf8    =    false; 
// 设置参数(注意:PHP只能以&#39;数组集&#39;方式传递参数) 
$param = array( &#39;user&#39; => &#39;国假不旅游 &#39;, 
&#39;info&#39; => &#39; Welcome to my home!&#39;); 
// 调用远程方法 &#39;sayHello&#39;为服务中的方法名 
//&#39;http://Hi&#39;为wsdl文件中targetNamespace的值 
$result = $client->call(&#39;sayHello&#39;, $param,&#39;http://Hi&#39;); 
// 显示执行结果 
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,因此,我们需要设置.


本文链接:

收藏随意^^请保留教程地址.

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn