SoapDiscovery.class.php【PHP自動生成WSDL】

来源:http://www.cnblogs.com/zakun/archive/2016/04/13/5387910.html
-Advertisement-
Play Games

SoapDiscovery.class.php 源碼如下: ...


 SoapDiscovery.class.php 源碼如下:

============================================================

  1 <?php
  2   
  3 /**
  4  * Copyright (c) 2005, Braulio Jos?Solano Rojas
  5  * All rights reserved.
  6  * 
  7  * Redistribution and use in source and binary forms, with or without modification, are
  8  * permitted provided that the following conditions are met:
  9  * 
 10  *     Redistributions of source code must retain the above copyright notice, this list of
 11  *     conditions and the following disclaimer. 
 12  *     Redistributions in binary form must reproduce the above copyright notice, this list of
 13  *     conditions and the following disclaimer in the documentation and/or other materials
 14  *     provided with the distribution. 
 15  *     Neither the name of the Solsoft de Costa Rica S.A. nor the names of its contributors may
 16  *     be used to endorse or promote products derived from this software without specific
 17  *     prior written permission.
 18  * 
 19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 20  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 21  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 22  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 23  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 31  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 32  * 
 33  *
 34  * @version $Id$
 35  * @copyright 2005 
 36  */
 37 
 38 /**
 39  * SoapDiscovery Class that provides Web Service Definition Language (WSDL).
 40  * 
 41  * @package SoapDiscovery
 42  * @author Braulio Jos?Solano Rojas
 43  * @copyright Copyright (c) 2005 Braulio Jos?Solano Rojas
 44  * @version $Id$
 45  * @access public
 46  **/
 47 class SoapDiscovery {
 48     private $class_name = '';
 49     private $service_name = '';
 50     
 51     /**
 52      * SoapDiscovery::__construct() SoapDiscovery class Constructor.
 53      * 
 54      * @param string $class_name
 55      * @param string $service_name
 56      **/
 57     public function __construct($class_name = '', $service_name = '') {
 58         $this->class_name = $class_name;
 59         $this->service_name = $service_name;
 60     }
 61     
 62     /**
 63      * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
 64      * 
 65      * @return string
 66      **/
 67     public function getWSDL() {
 68         if (empty($this->service_name)) {
 69             throw new Exception('No service name.');
 70         }
 71         $headerWSDL = "<?xml version=\"1.0\" ?>\n";
 72         $headerWSDL.= "<definitions name=\"$this->service_name\" targetNamespace=\"urn:$this->service_name\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"urn:$this->service_name\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\">\n";
 73         $headerWSDL.= "<types xmlns=\"http://schemas.xmlsoap.org/wsdl/\" />\n";
 74 
 75         if (empty($this->class_name)) {
 76             throw new Exception('No class name.');
 77         }
 78         
 79         $class = new ReflectionClass($this->class_name);
 80         
 81         if (!$class->isInstantiable()) {
 82             throw new Exception('Class is not instantiable.');
 83         }
 84         
 85         $methods = $class->getMethods();
 86         
 87         $portTypeWSDL = '<portType name="'.$this->service_name.'Port">';
 88         $bindingWSDL = '<binding name="'.$this->service_name.'Binding" type="tns:'.$this->service_name."Port\">\n<soap:binding style=\"rpc\" transport=\"http://schemas.xmlsoap.org/soap/http\" />\n";
 89         $serviceWSDL = '<service name="'.$this->service_name."\">\n<documentation />\n<port name=\"".$this->service_name.'Port" binding="tns:'.$this->service_name."Binding\"><soap:address location=\"http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."\" />\n</port>\n</service>\n";
 90         $messageWSDL = '';
 91         foreach ($methods as $method) {
 92             if ($method->isPublic() && !$method->isConstructor()) {
 93                 $portTypeWSDL.= '<operation name="'.$method->getName()."\">\n".'<input message="tns:'.$method->getName()."Request\" />\n<output message=\"tns:".$method->getName()."Response\" />\n</operation>\n";
 94                 $bindingWSDL.= '<operation name="'.$method->getName()."\">\n".'<soap:operation soapAction="urn:'.$this->service_name.'#'.$this->class_name.'#'.$method->getName()."\" />\n<input><soap:body use=\"encoded\" namespace=\"urn:$this->service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</input>\n<output>\n<soap:body use=\"encoded\" namespace=\"urn:$this->service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</output>\n</operation>\n";
 95                 $messageWSDL.= '<message name="'.$method->getName()."Request\">\n";
 96                 $parameters = $method->getParameters();
 97                 foreach ($parameters as $parameter) {
 98                     $messageWSDL.= '<part name="'.$parameter->getName()."\" type=\"xsd:string\" />\n";
 99                 }
100                 $messageWSDL.= "</message>\n";
101                 $messageWSDL.= '<message name="'.$method->getName()."Response\">\n";
102                 $messageWSDL.= '<part name="'.$method->getName()."\" type=\"xsd:string\" />\n";
103                 $messageWSDL.= "</message>\n";
104             }
105         }
106         $portTypeWSDL.= "</portType>\n";
107         $bindingWSDL.= "</binding>\n";
108         //return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
109 
110         $fso = fopen($this->class_name . ".wsdl", "w");
111         fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));
112     }
113     
114     /**
115      * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
116      * 
117      * @return string
118      **/
119     public function getDiscovery() {
120         return "<?xml version=\"1.0\" ?>\n<disco:discovery xmlns:disco=\"http://schemas.xmlsoap.org/disco/\" xmlns:scl=\"http://schemas.xmlsoap.org/disco/scl/\">\n<scl:contractRef ref=\"http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."?wsdl\" />\n</disco:discovery>";
121     }
122 }
123 
124 ?>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載自乎聲 前 一天準備下載VS2015預覽版,到VisualStudio官網一看,發現微軟發佈了VisualStudio2013的插件——Visual Studio Tools for Apache Cordova,實現跨平臺的開發。官網下載地址:http://www.microsoft.com/ ...
  • 朋友們,還記得我們在C#語言開發中用到過索引器嗎? 記得在獲得DataGridView控制項的某列值時:dgvlist.SelectedRows[0].Cells[0].Value; 記得在獲得ListView控制項的某列值時:listView1.SelectedItems[0].SubItems[0] ...
  • 1,工資計算公式 每一個企業都一定會用到工資計算,發工資是一件非常神聖的事情,而計算工資就是一項非常重要的工作。Excel有非常強大的公式功能,幫助了很多財務人員計算工資,但如果企業的人數比較多,而且工資的計算公式比較複雜,那使用Excel的人員必須是一個超高手了,但Excel維護起來也是非常困難的 ...
  • AjaxControlToolkit是一組控制項的集合,可以實現自動補充文本框,點擊文本框彈出日曆,加水印等Ajax效果,包含40多個控制項,具體實現效果如:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Default.aspx ...
  • 通常,我們藉助瀏覽器(通常是IE,FireFox或者Chrome)瀏覽網頁,例如,我們在地址欄中輸入DebugLZQ的博客網址http://www.cnblogs.com/DebugLZQ/,回車之後,就會在瀏覽器的視窗中看到Debug的主頁,如下圖所示: 在這個簡單的操作背後影藏了巨大的複雜性。 ...
  • 3月底,微軟正式宣佈:Xamarin免費了!那麼,你能做什麼? 搶先一步,用Xuni助力你的Xamarin開發! Xamarin是什麼 Xamarin含Xamarin.Andoid,Xamarin.iOS和Xamarin.Mac平臺,可讓你使用C#和Visual Studio或Xamarin IDE ...
  • 我們都知道虛方法實現多態,抽象方法實現多態等,我們今天來看看如何使用介面實現多態 1.首先我們先要來瞭解瞭解什麼是介面,它存在的意識 01.介面就是為了約束方法的格式(參數和返回值類型)而存在的 02.介面可以實現多繼承,彌補單繼承的缺陷。 03.介面可以看成是一個特殊的抽象類,通過反編譯看源碼可知 ...
  • 選取要被抽取成方法的代碼片段,右鍵—>Refactor--->Extract Method 填寫方法名稱 抽取後成了這個樣子: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...