diff options
-rw-r--r-- | demos/quickstart/protected/pages/Services/SoapService.page | 28 | ||||
-rw-r--r-- | framework/Web/Services/TSoapService.php | 25 |
2 files changed, 39 insertions, 14 deletions
diff --git a/demos/quickstart/protected/pages/Services/SoapService.page b/demos/quickstart/protected/pages/Services/SoapService.page index 04dea07a..4a83c8ed 100644 --- a/demos/quickstart/protected/pages/Services/SoapService.page +++ b/demos/quickstart/protected/pages/Services/SoapService.page @@ -129,7 +129,33 @@ The tool requires a MS .NET runtime to be installed. </div>
<p>
-<tt>TSoapService</tt> may be configured and customized in several ways. In the example above, the <soap> element actually specifies a SOAP service using the default <tt>TSoapServer</tt> implementation. Attributes in <soap> are passed to <tt>TSoapServer</tt> as its initial property values. For example, the <tt>provider</tt> attribute initializes the <tt>Provider</tt> property of <tt>TSoapServer</tt>. By setting <tt>SessionPersistent</tt> to be true in <soap> element, the provider instance will persist within the user session. You may develop your own SOAP server class and use it by specifying the <tt>class</tt> attribute of <soap>.
+<tt>TSoapService</tt> may be configured and customized in several ways. In the example above, the <tt><soap></tt> element actually specifies a SOAP service using the default <tt>TSoapServer</tt> implementation. Attributes in <tt><soap></tt> are passed to <tt>TSoapServer</tt> as its initial property values. For example, the <tt>provider</tt> attribute initializes the <tt>Provider</tt> property of <tt>TSoapServer</tt>. By setting <tt>SessionPersistent</tt> to be true in <tt><soap></tt> element, the provider instance will persist within the user session. You may develop your own SOAP server class and use it by specifying the <tt>class</tt> attribute of <tt><soap></tt>.
+</p>
+
+<p>By default, PHP's soap server will create objects of the type <tt>StdClass</tt>
+when objects are received from the client. The soap server can be configured to
+automatically create objects of certain type objects are received as method
+parameters. For example, if we have a Soap method that accepts
+a <tt>Contact</tt> object as parameter.
+<com:TTextHighlighter Language="php" CssClass="source">
+/**
+ * @param Contact $contact
+ * @return boolean true if saved, false otherwise
+ * @soapmethod
+ */
+ function save(Contact $contact)
+ {
+ return true
+ }
+</com:TTextHighlighter>
+The do this, we need to set the <tt>ClassMaps</tt> property of
+the <tt>TSoapServer</tt> in the <tt><soap></tt> tags as
+a comma separated string of class names that we wish to be automatically
+converted.
+<com:TTextHighlighter Language="xml" CssClass="source">
+<soap id="contact-manager" provider="path.to.ContactManager"
+ ClassMaps="Contact, Address"/>
+</com:TTextHighlighter>
</p>
</com:TContent>
\ No newline at end of file diff --git a/framework/Web/Services/TSoapService.php b/framework/Web/Services/TSoapService.php index 69f133fe..1472ffc4 100644 --- a/framework/Web/Services/TSoapService.php +++ b/framework/Web/Services/TSoapService.php @@ -289,15 +289,6 @@ class TSoapServer extends TApplicationComponent private $_wsdlUri=''; /** - * Constructor. - * It creates the classmap object. - */ - public function __construct() - { - $this->_classMap=new TAttributeCollection; - } - - /** * @return string the ID of the SOAP server */ public function getID() @@ -368,9 +359,9 @@ class TSoapServer extends TApplicationComponent $options['encoding']=$this->_encoding; if(!empty($this->_uri)) $options['uri']=$this->_uri; - if($this->_classMap->getCount()>0) + if(is_string($this->_classMap)) { - foreach($this->_classMap as $className) + foreach(preg_split('/\s?,\s?/', $this->_classMap) as $className) $options['classmap'][$className]=$className; //complex type uses the class name in the wsdl } return $options; @@ -533,12 +524,20 @@ class TSoapServer extends TApplicationComponent } /** - * @return TAttributeCollection the class map for the SOAP service + * @return string comma delimit list of complex type classes. */ - public function getClassMap() + public function getClassMaps() { return $this->_classMap; } + + /** + * @return string comma delimit list of class names + */ + public function setClassMaps($classes) + { + $this->_classMap = $classes; + } } ?>
\ No newline at end of file |