2013-08-31 69 views
1

我正在開發一個使用zend_soap_server的肥皂webservice。 我使用Zend_Soap_AutoDiscover來自動生成我的web服務的wsdl。zend_soap_server UTF-8編碼不起作用

下面是代碼

public function indexAction() { // my websrvice method 

     $server = new Zend_Soap_Server("admin/webservice/wsdl"); 

     $server->setEncoding('UTF-8'); 

     $server->setClass('Webservice'); 

     $server->handle(); 
} 

public function wsdlAction() { // my wsdl method 

     $wsdl = new Zend_Soap_AutoDiscover(); 

     $wsdl->setClass('Webservice'); 

     $wsdl->setUri("/admin/webservice"); 

     $wsdl->handle(); 
} 

我的問題是,當我觀看產生的WSDL的源極的第一行是:

<?xml version="1.0"?> 

但我想的編碼在xml標籤:

<?xml version="1.0" encoding="UTF-8"?> 

我該怎麼做才能得到這個?

Thx提前。

+0

您使用的是PHP和Zend Framework的哪個版本?我問的原因是因爲我在沒有調用'setMethod()'的情況下嘗試了一個簡單的測試,並且默認情況下我獲得了編碼屬性。我運行PHP 5.3.8和ZF 1.12。 PHP版本可能很重要的原因是因爲'Zend_Soap'和它的兄弟姐妹基本上只是PHP本地SOAP類的包裝。 – JamesG

+0

我使用PHP 5.4.13和ZF 1.12 –

+0

哦,我剛剛意識到我沒有看WSDL輸出,我正在查看請求和響應XML,它們都包含編碼。我有一個新的想法,我將爲您的問題添加一個潛在的答案。 – JamesG

回答

2

我檢查Zend框架代碼和它會出現在WSDL中的第一行是硬編碼:

$wsdl = "<?xml version='1.0' ?> 
      <definitions name='$name' targetNamespace='$uri' 
       xmlns='http://schemas.xmlsoap.org/wsdl/' 
       xmlns:tns='$uri' 
       xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' 
       xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
       xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/' 
       xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'></definitions>"; 

上面的代碼段是從Zend/Soap/Wsdl.php 91線。所以,簡單的解決你的問題是修改上面的代碼的第一行包含編碼:

$wsdl = "<?xml version='1.0' encoding='UTF-8' ?> 

我只是跑這個代碼,並取得了理想的結果。而且我不會因爲修改框架代碼而過於臃腫。自從1.7版本以來,我已經在ZF1的頂部運行了一套標準補丁,以修復一些我不同意的奇怪點。這就是開源的美妙之處 - 您無需向公司支付數千美元即可完成單行更改!只要確保你記得重新運行你的補丁,如果你升級到ZF1的下一個維護版本(假設有一個出現)。