I didn't get a response in my email to nusoap-general@lists.sourceforge.net so i am posting here as well:
I would like to report one bug and make a small feature request.
feature request:
It would be of great help if there was a way (ie a variable in nusoap.php) for the administrator to set the character encoding of the generated WSDL (The <?xml version="1.0" encoding="ISO-8859-1"?> part). In my case i had the web service functions documentation written in greek and i had to change the encoding to ISO-8859-7 by hand for the auto-generated WSDL.
bug:
The register() function prototype is the following:
* @param string $name the name of the PHP function, class.method or class..method
* @param array $in assoc array of input values: key = param name, value = param type
* @param array $out assoc array of output values: key = param name, value = param type
* @param mixed $namespace the element namespace for the method or false
with: function register($name,$in=array(),$out=array(),$namespace=false
(i am ommiting the parts that are not necessary for the discussion).
If i provide a namespace argument for a function i get the following fault on the client (while parsing the WSDL):
[WARNING] R2716 WSI-BasicProfile ver. 1.0, namespace attribute not allowed in doc/lit for soapbind:body: "SearchUser"
line 370 of file:/C:/temp/NetBeansProjects/testWSDL3/xml-resources/web-service-references/reader/wsdl/<hostname>/ws/reader.php.wsdl
According to the error, the <binding/> part of the wsdl should not include a namespace attribute:
If i try to set the $namespace parameter to false i get an *empty* namespace attribute instead of the namespace attribute being ommited (and thus still hit the same error in wsdl parsing):
I have to save and manually edit the WSDL file (to remove the namespace="" parts) in order for it to be parsed correctly. I think that it would be best not to include the namespace attribute if it is passed as a false (null) value in the register() function.
Thank you all for your time.
--
Kostas Kalevras - Network Operations Center
National Technical University of Athens http://kkalev.wordpress.com
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I didn't get a response in my email to nusoap-general@lists.sourceforge.net so i am posting here as well:
I would like to report one bug and make a small feature request.
feature request:
It would be of great help if there was a way (ie a variable in nusoap.php) for the administrator to set the character encoding of the generated WSDL (The <?xml version="1.0" encoding="ISO-8859-1"?> part). In my case i had the web service functions documentation written in greek and i had to change the encoding to ISO-8859-7 by hand for the auto-generated WSDL.
bug:
The register() function prototype is the following:
* @param string $name the name of the PHP function, class.method or class..method
* @param array $in assoc array of input values: key = param name, value = param type
* @param array $out assoc array of output values: key = param name, value = param type
* @param mixed $namespace the element namespace for the method or false
with: function register($name,$in=array(),$out=array(),$namespace=false
(i am ommiting the parts that are not necessary for the discussion).
If i provide a namespace argument for a function i get the following fault on the client (while parsing the WSDL):
[WARNING] R2716 WSI-BasicProfile ver. 1.0, namespace attribute not allowed in doc/lit for soapbind:body: "SearchUser"
line 370 of file:/C:/temp/NetBeansProjects/testWSDL3/xml-resources/web-service-references/reader/wsdl/<hostname>/ws/reader.php.wsdl
According to the error, the <binding/> part of the wsdl should not include a namespace attribute:
<binding name="ReaderInterfaceBinding" type="tns:ReaderInterfacePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
−
<operation name="SearchUser">
<soap:operation soapAction="http://<hostname>/ws/reader.php#SearchUser" style="document"/>
−
<input>
<soap:body use="literal" namespace="http://<hostname>/ws/reader.php"/>
</input>
−
<output>
<soap:body use="literal" namespace="http://<hostname>/ws/reader.php"/>
</output>
</operation>
If i try to set the $namespace parameter to false i get an *empty* namespace attribute instead of the namespace attribute being ommited (and thus still hit the same error in wsdl parsing):
<operation name="SearchUser">
<soap:operation soapAction="http://<hostname>/ws/reader.php#SearchUser" style="document"/>
−
<input>
<soap:body use="literal" namespace=""/>
</input>
−
<output>
<soap:body use="literal" namespace=""/>
</output>
</operation>
I have to save and manually edit the WSDL file (to remove the namespace="" parts) in order for it to be parsed correctly. I think that it would be best not to include the namespace attribute if it is passed as a false (null) value in the register() function.
Thank you all for your time.
--
Kostas Kalevras - Network Operations Center
National Technical University of Athens
http://kkalev.wordpress.com
anyone?
Since i didn't get any responses here's the patch for the namespace bug. Hope it makes it in a newer version:
--- nusoap.php 2007-11-06 18:00:36.000000000 +0200
+++ /var/www/html/ws/lib/nusoap.php 2009-08-28 12:56:26.000000000 +0300
@@ -5443,13 +5443,19 @@
} else {
$enc_style = '';
}
- $binding_xml .= "\n" . ' <input><soap:body use="' . $opParts['input']['use'] . '" namespace="' . $opParts['input']['namespace'] . '"' . $enc_style . '/></input>';
+ $binding_xml .= "\n" . ' <input><soap:body use="' . $opParts['input']['use'];
+ if ($opParts['input']['namespace'] != '')
+ $binding_xml .= '" namespace="' . $opParts['input']['namespace'];
+ $binding_xml .= '"' . $enc_style . '/></input>';
if (isset($opParts['output']['encodingStyle']) && $opParts['output']['encodingStyle'] != '') {
$enc_style = ' encodingStyle="' . $opParts['output']['encodingStyle'] . '"';
} else {
$enc_style = '';
}
- $binding_xml .= "\n" . ' <output><soap:body use="' . $opParts['output']['use'] . '" namespace="' . $opParts['output']['namespace'] . '"' . $enc_style . '/></output>';
+ $binding_xml .= "\n" . ' <output><soap:body use="' . $opParts['output']['use'];
+ if ($opParts['output']['namespace'] != '')
+ $binding_xml .= '" namespace="' . $opParts['output']['namespace'];
+ $binding_xml .= '"' . $enc_style . '/></output>';
$binding_xml .= "\n" . ' </operation>';
$portType_xml .= "\n" . ' <operation name="' . $opParts['name'] . '"';
if (isset($opParts['parameterOrder'])) {