From f7ca8c7ac8718899c1ab36513aaf3853a4514816 Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 12 Jan 2007 05:53:43 +0000 Subject: Fixed a number of SOAP bugs. --- framework/3rdParty/WsdlGen/Wsdl.php | 17 +++++++++-------- framework/3rdParty/WsdlGen/WsdlMessage.php | 4 ++-- framework/3rdParty/WsdlGen/WsdlOperation.php | 14 +++++++------- framework/Web/Services/TSoapService.php | 13 +++++++++++-- 4 files changed, 29 insertions(+), 19 deletions(-) (limited to 'framework') diff --git a/framework/3rdParty/WsdlGen/Wsdl.php b/framework/3rdParty/WsdlGen/Wsdl.php index 4b94fbb4..1c754200 100644 --- a/framework/3rdParty/WsdlGen/Wsdl.php +++ b/framework/3rdParty/WsdlGen/Wsdl.php @@ -105,6 +105,7 @@ class Wsdl xmlns:tns="'.$this->targetNamespace.'" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/">'; $dom = new DOMDocument(); @@ -128,7 +129,7 @@ class Wsdl public function addTypes(DomDocument $dom) { if (!count($this->types)) return; - $types = $dom->createElement('types'); + $types = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:types'); $schema = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xsd:schema'); $schema->setAttribute('targetNamespace', $this->targetNamespace); foreach($this->types as $type => $elements) @@ -139,10 +140,10 @@ class Wsdl { $complexContent = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xsd:complexContent'); $restriction = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xsd:restriction'); - $restriction->setAttribute('base', 'SOAP-ENC:Array'); + $restriction->setAttribute('base', 'soap-enc:Array'); $attribute = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xsd:attribute'); - $attribute->setAttribute('ref', "SOAP-ENC:arrayType"); - $attribute->setAttribute('arrayType', 'tns:' . substr($type, 0, strlen($type) - 5) . '[]'); + $attribute->setAttribute('ref', "soap-enc:arrayType"); + $attribute->setAttribute('wsdl:arrayType', 'tns:' . substr($type, 0, strlen($type) - 5) . '[]'); $restriction->appendChild($attribute); $complexContent->appendChild($restriction); $complexType->appendChild($complexContent); @@ -183,7 +184,7 @@ class Wsdl */ protected function addPortTypes(DOMDocument $dom) { - $portType = $dom->createElement('portType'); + $portType = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:portType'); $portType->setAttribute('name', $this->serviceName.'PortType'); $this->definitions->appendChild($portType); @@ -199,7 +200,7 @@ class Wsdl */ protected function addBindings(DOMDocument $dom) { - $binding = $dom->createElement('binding'); + $binding = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:binding'); $binding->setAttribute('name', $this->serviceName.'Binding'); $binding->setAttribute('type', 'tns:'.$this->serviceName.'PortType'); @@ -222,10 +223,10 @@ class Wsdl */ protected function addService(DomDocument $dom) { - $service = $dom->createElement('service'); + $service = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:service'); $service->setAttribute('name', $this->serviceName.'Service'); - $port = $dom->createElement('port'); + $port = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:port'); $port->setAttribute('name', $this->serviceName.'Port'); $port->setAttribute('binding', 'tns:'.$this->serviceName.'Binding'); diff --git a/framework/3rdParty/WsdlGen/WsdlMessage.php b/framework/3rdParty/WsdlGen/WsdlMessage.php index 74165dae..4d044dd0 100644 --- a/framework/3rdParty/WsdlGen/WsdlMessage.php +++ b/framework/3rdParty/WsdlGen/WsdlMessage.php @@ -62,12 +62,12 @@ class WsdlMessage */ public function getMessageElement(DOMDocument $dom) { - $message = $dom->createElement('message'); + $message = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:message'); $message->setAttribute('name', $this->name); foreach ($this->parts as $part) { if (isset($part['name'])) { - $partElement = $dom->createElement('part'); + $partElement = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:part'); $partElement->setAttribute('name', $part['name']); $partElement->setAttribute('type', $part['type']); $message->appendChild($partElement); diff --git a/framework/3rdParty/WsdlGen/WsdlOperation.php b/framework/3rdParty/WsdlGen/WsdlOperation.php index ae561a16..20a10db8 100644 --- a/framework/3rdParty/WsdlGen/WsdlOperation.php +++ b/framework/3rdParty/WsdlGen/WsdlOperation.php @@ -81,13 +81,13 @@ class WsdlOperation */ public function getPortOperation(DomDocument $dom) { - $operation = $dom->createElement('operation'); + $operation = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:operation'); $operation->setAttribute('name', $this->operationName); - $documentation = $dom->createElement('documentation', htmlentities($this->documentation)); - $input = $dom->createElement('input'); + $documentation = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:documentation', htmlentities($this->documentation)); + $input = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:input'); $input->setAttribute('message', 'tns:'.$this->inputMessage->getName()); - $output = $dom->createElement('output'); + $output = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:output'); $output->setAttribute('message', 'tns:'.$this->outputMessage->getName()); $operation->appendChild($documentation); @@ -107,7 +107,7 @@ class WsdlOperation */ public function getBindingOperation(DomDocument $dom, $namespace, $style='rpc') { - $operation = $dom->createElement('operation'); + $operation = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:operation'); $operation->setAttribute('name', $this->operationName); $soapOperation = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/soap/', 'soap:operation'); @@ -115,8 +115,8 @@ class WsdlOperation $soapOperation->setAttribute('soapAction', $namespace.'#'.$method); $soapOperation->setAttribute('style', $style); - $input = $dom->createElement('input'); - $output = $dom->createElement('output'); + $input = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:input'); + $output = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/', 'wsdl:output'); $soapBody = $dom->createElementNS('http://schemas.xmlsoap.org/wsdl/soap/', 'soap:body'); $soapBody->setAttribute('use', 'encoded'); diff --git a/framework/Web/Services/TSoapService.php b/framework/Web/Services/TSoapService.php index 05e62171..2d161f15 100644 --- a/framework/Web/Services/TSoapService.php +++ b/framework/Web/Services/TSoapService.php @@ -294,7 +294,7 @@ class TSoapServer extends TApplicationComponent */ public function __construct() { - $this->_classMap=new TAttributeCollection; + $this->_classMap=new TMap;//TAttributeCollection; } /** @@ -332,7 +332,14 @@ class TSoapServer extends TApplicationComponent } else $server=$this->createServer(); - $server->handle(); + try + { + $server->handle(); + } + catch (Exception $e) + { + $server->fault("SERVER", $e->getMessage(),"", $e->__toString(), ''); + } } /** @@ -340,6 +347,8 @@ class TSoapServer extends TApplicationComponent */ protected function createServer() { + if($this->getApplication()->getMode()===TApplicationMode::Debug) + ini_set("soap.wsdl_cache_enabled",0); return new SoapServer($this->getWsdlUri(),$this->getOptions()); } -- cgit v1.2.3