PHP 生成 WSDL 文件工具类 SoapDiscovery.class.php

2023-05-16

<pre name="code" class="php"><?php
  
/**
 * Copyright (c) 2005, Braulio José Solano Rojas
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 * 
 * 	Redistributions of source code must retain the above copyright notice, this list of
 * 	conditions and the following disclaimer. 
 * 	Redistributions in binary form must reproduce the above copyright notice, this list of
 * 	conditions and the following disclaimer in the documentation and/or other materials
 * 	provided with the distribution. 
 * 	Neither the name of the Solsoft de Costa Rica S.A. nor the names of its contributors may
 * 	be used to endorse or promote products derived from this software without specific
 * 	prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 *
 * @version $Id$
 * @copyright 2005 
 */

/**
 * SoapDiscovery Class that provides Web Service Definition Language (WSDL).
 * 
 * @package SoapDiscovery
 * @author Braulio José Solano Rojas
 * @copyright Copyright (c) 2005 Braulio José Solano Rojas
 * @version $Id$
 * @access public
 **/
class SoapDiscovery {
	private $class_name = '';
	private $service_name = '';
	
	/**
	 * SoapDiscovery::__construct() SoapDiscovery class Constructor.
	 * 
	 * @param string $class_name
	 * @param string $service_name
	 **/
	public function __construct($class_name = '', $service_name = '') {
		$this->class_name = $class_name;
		$this->service_name = $service_name;
	}
	
	/**
	 * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
	 * 
	 * @return string
	 **/
	public function getWSDL() {
		if (empty($this->service_name)) {
			throw new Exception('No service name.');
		}
		$headerWSDL = "<?xml version=\"1.0\" ?>\n";
		$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";
		$headerWSDL.= "<types xmlns=\"http://schemas.xmlsoap.org/wsdl/\" />\n";

		if (empty($this->class_name)) {
			throw new Exception('No class name.');
		}
		
		$class = new ReflectionClass($this->class_name);
		
		if (!$class->isInstantiable()) {
			throw new Exception('Class is not instantiable.');
		}
		
		$methods = $class->getMethods();
		
		$portTypeWSDL = '<portType name="'.$this->service_name.'Port">';
		$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";
		$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";
		$messageWSDL = '';
		foreach ($methods as $method) {
			if ($method->isPublic() && !$method->isConstructor()) {
				$portTypeWSDL.= '<operation name="'.$method->getName()."\">\n".'<input message="tns:'.$method->getName()."Request\" />\n<output message=\"tns:".$method->getName()."Response\" />\n</operation>\n";
				$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";
			    $messageWSDL.= '<message name="'.$method->getName()."Request\">\n";
				$parameters = $method->getParameters();
				foreach ($parameters as $parameter) {
					$messageWSDL.= '<part name="'.$parameter->getName()."\" type=\"xsd:string\" />\n";
				}
				$messageWSDL.= "</message>\n";
				$messageWSDL.= '<message name="'.$method->getName()."Response\">\n";
				$messageWSDL.= '<part name="'.$method->getName()."\" type=\"xsd:string\" />\n";
				$messageWSDL.= "</message>\n";
			}
		}
		$portTypeWSDL.= "</portType>\n";
		$bindingWSDL.= "</binding>\n";
		//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
		$fso = fopen($this->class_name . ".wsdl" , "w"); 
		fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>')); 
	}
	
	/**
	 * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
	 * 
	 * @return string
	 **/
	public function getDiscovery() {
		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>";
	}
}

?>

使用方法

  
<pre name="code" class="php"><?php
//Service.php生成服务方法的类
include("Service.php");
include("SoapDiscovery.class.php");

$disc = new SoapDiscovery('Service', 'soap'); //第一个参数是类名(生成的wsdl文件就是以它来命名的,例如:下面的Service.wsdl),即Service类,第二个参数是服务的名字(这个可以随便写)
$disc->getWSDL();
?>

  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 生成 WSDL 文件工具类 SoapDiscovery.class.php 的相关文章

  • 如何检查号码是否是巴基斯坦用户的手机号码而不是固定电话号码

    我所做的是从开头删除 92 或 0092 并使用以下代码检查它是否是巴基斯坦人的有效手机号码 if preg match 3 0 4 0 9 number 1 Pakistani mobile number else not a pakis
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam
  • 从 FilterControllerEvent 监听器重定向到另一个 Symfony 路由

    我正在尝试设置一个 kernel controller 侦听器 以便在函数返回 true 时重定向到另一个路由 我有可用的路线 但无法使用此路线设置控制器 event gt setController 我收到以下错误 FilterContr
  • php表格:每行显示3个单元格[重复]

    这个问题在这里已经有答案了 我看这里 数组放入每行 5 个单元格的表格中 https stackoverflow com questions 9099568 array into a table with 5 cells in each r
  • 为什么AES java解密返回额外的字符?

    请原谅我英语不好 我使用 mcrypt 我从这里得到它用于 php 和 java 的 MCrypt https snipt net raw ee573b6957b7416f28aa560ead71c3a2 nice 在我的android应用
  • 关于加拿大短信网关提供商的建议[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我很好奇 如果我能够接受传入的短信到某个号码 然后将其传递给 PHP 中的服务器端应用程序 会带来多少麻烦 金钱 我最终会通过电子邮件地址发回短信 有
  • cURL 错误 77:设置证书验证位置时出错:CAfile

    我正在使用 Firebase php SDKlink https firebase php readthedocs io en latest index html并在 Windows 10 上的 XAMPP 服务器上使用 laravel 最
  • 覆盖供应商自动加载编辑器

    有没有办法让您创建的自动加载文件在调用供应商自动加载之前运行 我们似乎遇到了 SimpleSAML 的自动加载覆盖我们创建的自动加载文件之一的问题 我是 Composer 的新手 似乎无法在网上找到任何解决方案 我尝试将我们的自动加载文件包
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • Zend IMAP 搜索和过滤器

    我如何使用 Gmail 中的过滤器进行搜索 就像获取带有特定标签的电子邮件列表或来自特定电子邮件地址的邮件列表一样 我无法在文档中找到它 注意 我使用 oAuth 进行身份验证 我希望这与搜索无关 Gmail 上的标签实际上是 从 IMAP
  • Web 服务应该是事务性的吗?

    我正在研究为应用程序编写网络服务 在此应用程序中 我们在事务中执行所有操作 因为 工作单元 通常不是单个实体 而是跨越多个表的多个实体 在某些情况下 我们想要 全有或全无 而交易是非常有意义的 然而 我不太确定如何在网络服务中执行此操作 也
  • R中整数类和数字类有什么区别

    我想先说我是一个绝对的编程初学者 所以请原谅这个问题是多么基本 我试图更好地理解 R 中的 原子 类 也许这适用于一般编程中的类 我理解字符 逻辑和复杂数据类之间的区别 但我正在努力寻找数字类和整数类之间的根本区别 假设我有一个简单的向量x
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床

随机推荐

  • Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析

    csdn越改版 xff0c 越丑 开始我们的主题 xff1a Linux下原子操作 xff08 信号量 自旋锁 xff09 的实现原理和底层代码分析 2017年8月27日12 47 02 1 何为原子操作 xff1f 原子操作是什么 xff
  • Linux下用c语言实现发送http请求

    前言 在linux下 xff0c 使用socket进行编程 xff0c 需要到服务器上进行获取数据 xff0c 服务器使用的php编程 xff0c 需要使用http的方式进行获取数据 代码 span class hljs preproces
  • VSCode 的C++编译

    0 参考文档 0 1 官方参考 由于C 43 43 在不同平台上编译使用的编译器不同 xff0c 所以我们先将官网针对不同平台的编译文档摘录出来 xff0c 以便大家参考 xff1a 0 0 1 Linux平台使用GCC 参考 xff1a
  • STM32在子函数中的局部变量数组利用DMA发送无法正确发送数据的问题

    现象 xff1a 在子函数中 xff0c 定义了一个局部变量sendbuf 8 61 1 2 3 4 5 6 7 8 xff0c 然后分别利用普通串口发送函数发送可以正常发送和利用DMA发送 xff0c 并利用串口调试助手查看 xff0c
  • 如何使用Qt插件在Qt中进行ROS开发

    一 前言 本文介绍一种Qt下进行ROS开发的完美方案 xff0c 使用的是ros industrial的Levi Armstrong在2015年12月开发的一个Qt插件ros qtc plugin xff0c 这个插件使得Qt 新建项目 和
  • MN316_OPEN(NBIOT)物联网模块环境搭建

    因为项目的需要 这里要使用NBIOT 踩了一些坑 这里总结一下 编译 官方给的SDK如下 按照说明 在该目录下直接运行如下指令 34 build bat dlvs h0 demo 34 即可成功编译 但是我编译的时候不成功 报错如下 最后发
  • 《学习STL》-1.STL简介

    引言 当你C 43 43 入门后 xff0c 学了些C 43 43 编程规则 xff0c 正如 C 43 43 Primer 里的内容 xff0c 你知道C 43 43 里面的基本数据类型 循环 判断 函数 类 模板等 这阶段你的确会编写一
  • linux查看大小端命令

    Byte Order Litter Endian 小端模式 xff0c 绝大部分机器都是小端模式
  • 星网宇达利用NTRIPClient连接千寻服务器获取差分定位数据

    硬件设备 xff1a 星网宇达XW GI5610 软件设备 xff1a QXNTRIPClient 连接方式 xff1a 星网宇达RTK RS232连接电脑串口 打开QXNTRIPClient xff0c 连接千寻服务器 接收下发RTK数据
  • Ubuntu20.04 安装 mNetAssist

    安装环境 xff1a Ubuntu20 04安装包 xff1a mNetAssist release amd64 deb 安装与运行 span class token function sudo span span class token
  • 使用 include-what-you-use 检测冗余头文件

    include what you use 可以很方便的检测未使用的头文件 xff0c 使用的时候绕了点路 xff0c google后解决 xff0c 记录一下 1 安装clang ubuntu下直接apt get 安装就行了 需要注意的是
  • C语言结构体对齐详解

    文章目录 一 C语言结构体对齐大小快速判断二 反汇编角度看结构体三 总结 一 C语言结构体对齐大小快速判断 在C语言中定义一个结构体 xff0c 里面具体占用多少个字节呢 xff0c 先举一个例子 xff0c 如下 xff1a span c
  • 飞控各传感器相关作用

    飞控主要包括主控处理器MCU xff08 main control unit 和惯性导航模块IMU xff08 Inertial Measurement Unit xff09 四轴则必须配备3轴陀螺仪 xff0c 是四轴飞行器的机械结构 动
  • C++ : C++基础 :从内存的角度看 char[]和char*

    char 和char 区别 1 xff1a 数据在内存中的存储2 xff1a char 和 char 分析3 xff1a char p2 和 char p1 3 1 修改指针所指向的地址 4 string转char 5 char 转stri
  • 基于 nonce 的用户身份验证协议

    一 xff1a 什么是nonce 维基百科 xff1a 安全工程中 xff0c Nonce 是一个在加密通信只能使用一次的数字 在认证协议中 xff0c 它往往是一个 随机或 伪随机数 xff0c 以避免 重放攻击 二 xff1a 举例说明
  • php从数据库读取菜单数据并树状显示

    数据库表结构 mcp node表 字段 node code node name node pcode node code为区域编码 node name为区域名称 node pcode为父区域编码 祖先父区域编码为0 预期效果 代码实现部分
  • 蓝牙BLE之CC2541 OAD升级[带看门狗OAD]

    说明和代码设置 本文有两篇文章参考 其中博主 34 甜甜的大香瓜 34 的文章是原始文章 详细介绍了ImageA的hexh和B的bin以及A的bin是怎么生成的和具体的操作方法 https blog csdn net feilusia ar
  • php 从数据库读取数据并生成树型可折叠菜单

    数据存储形式 折叠菜单显示 直接调用 php页面即可输出树状可折叠菜单 所用到的js 区域折叠函数 function ShowMenu MenuID if MenuID style display 61 61 34 none 34 Menu
  • 提权apache 为root权限

    include lt stdio h gt include lt stdlib h gt include lt string h gt include lt sys types h gt include lt unistd h gt int
  • PHP 生成 WSDL 文件工具类 SoapDiscovery.class.php

    lt pre name 61 34 code 34 class 61 34 php 34 gt lt php Copyright c 2005 Braulio Jos Solano Rojas All rights reserved Red