In a previous entry I wrote about passing and returning structured data using NuSOAP. While that approach worked when using a client written in the same version of NuSOAP, it didn’t work for more stringest clients which need well formed WSDL to create proxies for methods and structures.
After some more digging I discovered a couple of things:
So, make sure you use the latest version of NuSOAP from SourceForge in your application.
Note: The example this document links to has been updated 10/30/2003 to correct problems on PHP installation that emit warnings about unquoted string constants.
Due to PHP’s loose typing, you have to epxlictly specify which types are being used by your functions. I believe you can do this with an external WSDL file. I describe the functional approach for registering the types. The following begins the WSDL configuration for a NuSOAP server object:
require_once('nusoap.php'); $NAMESPACE = 'http://books.org/Books'; $server = new soap_server; $server->configureWSDL('Books', $NAMESPACE); $server->wsdl->schemaTargetNamespace = $NAMESPACE;
You use the addComplexType() method to register structures and arrays. The following code registers a structure Chapter which contains two members (a string title and an int page), an array of Chapter structures and a structure Book which has several members, including a chapter array.
$server->wsdl->addComplexType( 'Chapter', 'complexType', 'struct', 'all', '', array( 'title' => array('name'=>'title','type'=>'xsd:string'), 'page' => array('name'=>'page','type'=>'xsd:int') ) ); $server->wsdl->addComplexType( 'ChapterArray', 'complexType', 'array', '', 'SOAP-ENC:Array', array(), array( array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Chapter[]') ), 'tns:Chapter' ); $server->wsdl->addComplexType( 'Book', 'complexType', 'struct', 'all', '', array( 'author' => array('name'=>'author','type'=>'xsd:string'), 'title' => array('name'=>'title','type'=>'xsd:string'), 'numpages' => array('name'=>'numpages','type'=>'xsd:int'), 'toc' => array('name'=>'toc','type'=>'tns:ChapterArray') ) );
When you register functions with the NuSOAP server, you need to specify the incoming parameters/types and the return type. The following registers a function getBook that takes a string parameter title and returns a Book structure.
$server->register( 'getBook', array('title'=>'xsd:string'), array('return'=>'tns:Book'), $NAMESPACE);
Once your WSDL specification is complete, you can examine it by passing the wsdl parameter to your PHP script. The script will return the generated WSDL which you can use in your tool to generate proxy classes, etc. Here is the WSDL for this example: http://www.nonplus.net/geek/samples/books.php?wsdl.
Using the WSDL specification, you can return SOAP structures as regular PHP associative arrays. When the server handles a SOAP request, it serializes and unserializes the PHP arrays using the WSDL description. The following function returns a book with two chapters (note that it’s blissfully unaware of SOAP):
function getBook($title) { // Create TOC $toc = array(); $toc[] = array('title' => 'Chapter One', 'page' => 1); $toc[] = array('title' => 'Chapter Two', 'page' => 30); // Create book $book = array( 'author' => "Jack London", 'title' => $title, 'numpages' => 42, 'toc' => $toc); return $book; }
The example books.php implements a SOAP server using the structures described above. It registers two methods getBook(title) and getBooks(author), the latter returns an array of Books. Make sure that you have a current version of NuSOAP installed when using the sample script.
And does it works with MS SOAP?
Posted by: igo on October 5, 2003 11:22 AMYes, I’ve tested this with MS Studio.NET. When you register a web service in Studio.NET, point it to the WSDL URL of your NuSOAP web service, i.e. http://www.nonplus.net/geek/samples/books.php?wsdl.
Posted by: stepan on October 5, 2003 10:51 PMI’ve been testing out your example using Flash MX 2004 as a SOAP client, but I’m running into a problem.
If I use http://www.nonplus.net/geek/samples/books.php?wsdl on your server, things work as expected.
Connecting to the same books.php file on my server however generates this error when Flash interacts with it:
WebServiceFault
VersionMismatch
Request implements version: http://schemas.xmlsoap.org/soap/envelope/ Response implements version
Any idea what might be wrong?
Posted by: dave on October 29, 2003 2:08 PMThanks so much for this wonderful article.
Really helped to get the best out of my
lame isp.
I need a guide of how consume the nusoap in VB .NET, if somene could help!!
You consume NuSOAP web services in VB.NET just like you would any other web service. For this example do the following:
Dim info As String Dim WS As New WS.Books Dim b As WS.Book ' Retrieve book from web service b = WS.getBook("Les Miserables") ' Create a multi-line string with title, author, num pages ' and first chapter info = b.title + vbCrLf info += b.author + vbCrLf info += CStr(b.numpages) + vbCrLf info += CStr(b.toc(0).page) + ": " + b.toc(0).title + vbCrLf
I’m getting a parsing error on this script from my IIS server.
Any help would be appreciated.
Could someone tell me how to consume this web service in Visual C#? When I add it as a web refrence I get a .map file and a .wsdl file, but no proxy class file. Am I missing a step somewhere?
Posted by: Shaun on November 25, 2003 6:06 AMI consume this in C# without any problems. It is done exactly the same as in VB.NET (see comment 6). Except, of course, the syntax differs a little.
Posted by: stepan on November 25, 2003 7:36 AMI’ve found out that if I use the command line “wsdl” command, it makes me a .cs file which I can use successfully. However, if I right click the project and use the “Add Web Refrence…” dialog in C#, I get a .map and .wsdl but no .cs file. I guess I will just continue using the command line rather than adding web refrences.
Posted by: Shaun on November 25, 2003 9:59 PMIs there an exemple for using this web service in php ?
Posted by: ben on November 27, 2003 9:07 AMi wantto make a wsdl like this (part):
targetNamespace=”http://www.msn.com/webservices/Messenger/Client” xmlns=”http://schemas.xmlsoap.org/wsdl/”>
-
-
-
-
-
-
-
-
-
-
how can i do?
send the code , try argin:
[code]
targetNamespace=”http://www.msn.com/webservices/Messenger/Client” xmlns=”http://schemas.xmlsoap.org/wsdl/”>
-
-
-
-
-
-
-
-
-
-
[/code]
Hi, I am getting the same problem as noted by dave on October 29. Has anyone found the reason for this?
WebServiceFault
VersionMismatch
Request implements version: http://schemas.xmlsoap.org/soap/envelope/ Response implements version
Any response would be appreciated.
Posted by: chris on December 17, 2003 2:58 AMFirst:
Thanks for this great article. i wonder how you guys get so easily(?) into new shit ;-)
Second:
I had no problems when using Flash MX 2004 (pro).
When calling
http://myserver/nusoap/wsdl_books.php?wsdl
in a browser (wsdl_books.php is the books.php you can download above, just renamed), i receive the XML. So everything is up and running.
You can also check this by adding the URL to the ‘Web Services’ Panel in Flash which shows you all available methods, too.
After adding the ‘WebServiceClasses’ to my Library (from Windows > Other Panels > Common Libraries > Classes) (Flash Professional only) add the following code into the first frame of the empty movie:
// use WebServices import mx.services.*;// Variables
wsdlURL = “http://myserver/nusoap/wsdl_books.php?wsdl”;
query = “temp”;
// Log Object
LO = new Log(“DEBUG”, Log.LO);
LO.onLog = function (txt) {
trace (txt);
}
// WebService Object (using Log Object)
WSO = new WebService (wsdlURL, LO);
WSO.onLoad = function () {
trace (“loading…”);
}
WSO.onFault = function (error) {
trace (“WSO error :”);
trace (error.faultcode + ” , ” + error.faultstring);
}
// PendingCall Object
PCO = WSO.getBook (query);
PCO.onResult = function (result) {
trace (“AUTHOR: ” + result.author);
trace (“TITLE : ” + result.title);
trace (“PAGES : ” + result.numpages);
}
PCO.onFault = function (error) {
trace (“PCO error :”);
trace (error.faultcode + ” , ” + error.faultstring);
}
I turned on full debugging mode in the Log Object to help finding errors.
That’s it.
:::m.
note to my comment above:
if you copy and paste the code into flash, it’ll probably not detect the correct quotation marks (they are kinda italic).
all you have to do is, use the search and replace function within the actionscript editor and replace all 22 quotation marks with normal ones.
thanks a lot!!! if been already looking for 2 days to get .NET connected with nusoap
this is the first nusoap-WSDL i found which supports ARRAYS with .NET
Posted by: jesus on February 2, 2004 6:48 PMThanks for this great article. Got me a woopin’ step further! keep up the good work!
Posted by: Christian Wolf on February 27, 2004 6:53 AMThis article was great. You rock!!!!
Posted by: lastKnight on March 4, 2004 12:46 PMHello,
When connecting to nusoap using .NET 1.1 and Visual Studio I get the following error:
Possible SOAP version mismatch: Envelope namespace http://schemas.xmlsoap.org/wsdl/ was unexpected. Expecting http://schemas.xmlsoap.org/soap/envelope/
Any ideas?
Thank you
Pablo Godel
Awesome article! I had a C# client hooked up to a NuSOAP web service within a couple of hours.
Posted by: Catatonic on March 10, 2004 10:18 PMI wonder if you’ve been able to accept an associative array as input to your getBook() function.
I tried and even if I pass a complex structure to the function all I get as a parameter is a single string (the first element of the associative array). Any ideas?
I haven’t tried using associative arrays as parameters, and I’m not sure whether they are supported in SOAP (or what the WSDL configuration would look like). But you should be able to pass an array of {key, value} pairs and convert it to an associative array in your function.
If you want to do that for the getBook() function, you’d have to create the appropriate complex types (i.e. a {key, value} structure and an array of these structures) and then modify the “getBook” registeration to use this array as its input.
Posted by: stepan on March 11, 2004 10:02 AMI’m trying to consume .net services with
nuSoap and I’m getting result errors since
my client is only sending the first character
of a string. It only happens with .net services.
For example if I’m trying to consume a ip address finder it only sends the first number and consecuently I get a wrong result.
Any ideas on how to overcome this problem?
Passing associative arrays works :)
I have finished my first real web service and it works fine with associative arrays passed to functions. I love nusoap ;)
I am new to web servie and takes me so much time figure out the nusoap client.
By the way, I am still think a way on how to call it from Excel (VBA) and retrieve the array.
Seems the .net sample wasn’t work.
// include the SOAP classes
require_once(‘nusoap.php’);
// define parameter array (ISBN number)
$param = array (”);
// define path to server application
$serverpath =’http://www.nonplus.net/geek/samples/books.php?wsdl.’;
//define method namespace
$namespace=”urn:xmethods-BNPriceCheck”;
// create client object
$client = new soapclient($serverpath, true);
// make the call
$price = $client->call(‘getBooks’,$param,$namespace);
// Display the result
print_r($result);
// Display the request and response
echo ‘Request’;
echo ” . htmlspecialchars($client->request, ENT_QUOTES) . ”;
echo ‘Response’;
echo ” . htmlspecialchars($client->response, ENT_QUOTES) . ”;
// if a fault occurred, output error info
if (isset($fault))
{
print “Error: “. $fault;
}
else if ($result == -1)
{
print “The book is not in the database.”;
}
else
{
var_dump ($result);
}
Need help in VBA.
I got the folloing result when calling nusoap server by nusoap client. Which works perfectly fine.
array(2) {
[0]=>
array(2) {
[“bookname”]=>
string(19) “This is a good book”
[“price”]=>
int(22)
}
[1]=>
array(2) {
[“bookname”]=>
string(12) “not bad book”
[“price”]=>
int(33)
}
}
but how can I retriece the result by using VBA code?
I have read the above code and try
Cells(5, 1) = fResult(1).bookname
and
Cells(5, 1) = fResult.bookname
but seems doesnt work.
However, i can retrieve and view the value in VBA local window. Any help will be greatly appreciate. I will post the full verion of code once complete. thanks in advance.
Posted by: Mug Mug on May 20, 2004 11:45 PMwe try to generate java code from nusoap wsdl using axis. this will work fine with complex types but will fail with an array of a complex type. axis try to extend the java.lang.Object[] but this fail.
has anyone an idea to “workaround” this problem and exchange a list/array of complex types?
Posted by: kl3tte on June 24, 2004 2:31 AMHi
First of thank you for this wonderful article. It helped me very much. But i am facing a problem when i use this service in VB.Net The error that is coming is ” Client foud response content of type “text\html”, but expected “text\xml” the resuest failed with error message: No output file specified”
Could any one tell me what could be wrong. It would be a great favour
Using nusoap, how do you call a .NET web service that takes an integer array as a parameter? Any help would be very much appreciated! rangi.robinson AT framestore-cfc.com
Posted by: rangi500 on September 13, 2004 8:07 AMI met the same program with Rakesh.
Client found response content of type “text\html”, but expected “text\xml”.
What’s wrong?
Appreciate your help~ :)
Posted by: West on September 28, 2004 2:58 AMWhen successful, NuSOAP is returning a text/xml. If you see text/html, it’s probably an error document being returned by the web server. Look through your server’s error log to see if it’s reporting any problems.
Posted by: stepan on September 28, 2004 1:52 PMHi, is there a way to use an XSD file to define a complex structure? I need my service to output the results of a mysql query using the XSD format for the output structure
Posted by: Norbert on October 5, 2004 1:21 PMI really don’t get this $NAMESPACE variable. What is that supposed to be? I’m looking and looking at it and searching but there is no light.
Posted by: Mark on November 9, 2004 5:08 PMdecoded it ;)
Posted by: Mark on November 10, 2004 4:04 PMHello:
I want to do a web service which the server is writen in python and the consumer is writen in php with nusoap but I haven’t found some example about that and I don’t know if it could be possible.
If you know some answer please answer me.
Thanks a lot
Friederich Marcks
Posted by: Friederich Marcks on November 26, 2004 2:08 PMI’ve created a web service using NuSOAP, and I’m able to connect to it from a PHP(NuSOAP) and Java(Apache Axis) client with no problems. Where the problems begin is putting the web service in a password protected directory using HTTP Authentication. If I created the web service without using WSDL my PHP client can connect using HTTP Authentication, but once I use the WSDL feature of NuSOAP I get problems. I need the WSDL feature because I want the Java client to connect, and possible other clients. Below I placed a sample of a simple service that’s giving trouble. I would greatly appreciate some help, it’s driving me nuts.
/***************************************/
// Insert the NuSOAP code
require_once(‘nusoap.php’);
$NAMESPACE = “http://www.myserver.com/WebService”;
// Create an instance of the server
$server = new soap_server;
// Initialize WSDL support
$server->configureWSDL(‘Events’, $NAMESPACE);
// Put the WSDL schema types in the namespace with the tns prefix
$server->wsdl->schemaTargetNamespace = $NAMESPACE;
$server->wsdl->addComplexType(
‘Person’,
‘complexType’,
‘struct’,
‘all’,
”,
array(
‘personId’=>array(‘name’=>’personId’,’type’=>’xsd:int’),
‘firstName’=>array(‘name’=>’firstName’,’type’=>’xsd:string’),
‘lastName’=>array(‘name’=>’lastName’,’type’=>’xsd:string’)
)
);
$server->register(
‘getPerson’,
array(‘personId’=>’xsd:int’),
array(‘return’=>’tns:Person’),
$NAMESPACE,
$NAMESPACE . ‘#’ . ‘getPerson’,
‘rpc’,
‘encoded’,
‘Returns a pserson by ID’
);
function getPerson($personId) {
if($personId==0||$personId==”) {
return new soap_fault(‘Client’, ”, ‘Must supply a person id.’);
}
else {
$aPerson = array(
‘personId’=>$personId,
‘firstName’=>’Bart’,
‘lastName’=>’Simpson’
);
return $aPerson;
}
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”;
$server->service($HTTP_RAW_POST_DATA);
Ok, I got the problem solved. So here’s the solution to anyone else who might have the same problem. The client should be as follows:
define(‘username’, ‘foo’);
define(‘password’, ‘bar’);
// This is location of the remote service
$client = new soapclient(‘http://’ . username . “:” . password . ‘@www.myserver.com/ws/server.php?wsdl’, true);
$client->setCredentials(username,password);
I define the username and password as constants, and that’s it.
Thankyou so much for this article, i was completely stuck on parsing mulitdimensional arrays until reading this.
Posted by: Andy on December 21, 2004 5:00 AMHey :).
My little testing script using nusoap to get Alexa services is coming unstuck, claiming I am only sending one of the required parameters:
Array
(
[OperationRequest] => Array
(
[RequestId] => 1QXVH0NY2C2M1BMSHKFN
)
[UrlInfoResult] => Array
(
[Request] => Array
(
[IsValid] => False
[Errors] => Array
(
[Error] => Array
(
[Code] => AWS.MissingParameters
[Message] => Your request is missing required parameters. Required parameters include Url.
…..
and yet my code is:
———snip——-
// Call the SOAP method
$proxy->soap_defencoding = “UTF-8”;
$result = $proxy->UrlInfo(array(‘SubscriptionId’ => ‘1405M88PWV52RDDEKTG2’,’Url’ => ‘www.djpauledge.com’));
var_dump($result);
——-snip—————
Any ideas anyone ?
Thanks in advance,
Mik.e
Mike: what is the WSDL URL?
All: the NuSOAP mailing list on SourceForge is a great place for your questions. Go to http://sourceforge.net/projects/nusoap/ and follow the links to join the list.
Posted by: Scott Nichol on April 2, 2005 1:34 PMFirst thanks for this great artical ,it helps me so much ! But still I have some problems in using web service. I want to call a web service wrote by .net, how can I do this??? Does anyone know this?
Posted by: nicole on May 18, 2005 3:58 AMWonderful article.
Posted by: Ramachandran on July 9, 2005 1:35 PMHi Guys
Prob being thick, but the above wsdl code, where does this go.
If it is a separate file placed with my php nusoap file and server files, should it have a .php extenstion, and if so, how does the client request know to look at the wsdl file.
Posted by: che on July 18, 2005 2:40 AMI have finally solved a problem I’ve seen posted on many forums including this one.
— WebServiceFault: VersionMismatch —
Make sure that if you’re using nusoap and apache compression that you go edit nusoap and comment out the lines that perform compression on the soap envelope. Whats happening is that it is being double compressed and the flash client is getting garbage (when viewed in IE). It works fine from the local host since you’re not passing the “compress me plz” header (which both Apache AND nusoap react to).
Hi,
I have been trying to implement an example of nusoap for a week and am really stuck now. Could someone please help me?
i have created the following server code, which basically (if correct) should return to the client multiple rows of data. However, I can’t get the client to work. Can someone please explain to me what the client code should be. I am desperate. Thanks.
here is the server code;
// includes nusoap classes
require(‘nusoap.php’);
// create server
$l_oServer = new soap_server();
// wsdl generation
$l_oServer->debug_flag=false;
$l_oServer->configureWSDL(‘TvData’, ‘http://abctv.org/schedule’);
$l_oServer->wsdl->schemaTargetNamespace = ‘http://abctv.org/schedule’;
// add complex type
$l_oServer->wsdl->addComplexType(
‘scheduleitem’,
‘complexType’,
‘struct’,
‘all’,
”,
array(
‘name’ => array(‘name’=>’name’, ‘type’=>’xsd:string’),
‘start’ => array(‘name’=>’start’, ‘type’=>’xsd:string’),
‘end’ => array(‘name’=>’end’, ‘type’=>’xsd:string’))
);
$l_oServer->wsdl->addComplexType(
‘dailyschedule’,
‘complexType’,
‘array’,
”,
‘SOAP-ENC:Array’,
array(),
array(
array(‘ref’=>’SOAP-ENC:arrayType’,’wsdl:arrayType’=>’tns:scheduleitem[]’)
),
‘tns:scheduleitem’
);
// register method
$l_oServer->register(‘getSchedule’, array(
‘date’ => ‘xsd:string’),
array(‘return’=>’tns:dailyschedule’),
‘http://abctv.org/schedule’);
// method code (get DB result)
function getSchedule ($a_stInput) {
if (is_string($a_stInput)) {
$l_oDBlink = @mysql_connect(
‘abc’, ‘abc’, ‘abc’);
$l_oDBresult = @mysql_db_query(
‘tvdb’,
‘SELECT item.name, slot.start, slot.end FROM (episode INNER JOIN item ON episode.itemID = item.itemID) INNER JOIN slot ON episode.episodeID = slot.episodeID
WHERE slot.date = (“’ . mysql_escape_string((string)$a_stInput) . ‘”)’);
// simple error checking
if (!$l_oDBresult) {
return new soap_fault(‘Server’, ”, ‘Internal server error.’);
}
// no data avaible for x city
if (!mysql_num_rows($l_oDBresult)) {
return new soap_fault(‘Server’, ”,
‘Service contains data only for a few cities.’);
}
mysql_close($l_oDBlink);
// return data
$schedule = array();
for ( $counter = 0;
$list = mysql_fetch_object( $l_oDBresult);
$counter++ )
{
$itemname = $list -> name;
$start = $list -> start;
$end = $list -> end;
// build table to display results
$schedule[] = array(‘scheduleitem’ => $itemname, $start, $end);
}
return $schedule;
}
// we accept only a string
else {
return new soap_fault(‘Client’, ”, ‘Service requires a string parameter.’);
}
}
// pass incoming (posted) data
$l_oServer->service($HTTP_RAW_POST_DATA);
hi guys…i’d like to ask.. i try connected php webservices with vb.net as a client, when im trying to connected with two output or more that i get from array, it works, like tutorial that i get from stepan how to consume php ws to vb.net.. it really work, but.. when i turning into database that i use from my sql. im stuck.. i cant get the output..
for example.. i have database name it stockprices and with 3 field = stock_id,stock_price,stock_symbol, for ex i do my query like this. Select stock_symbol,Stok_price from stockprices where id = 1;
i can’t show the data, but if with array it doin well.. also i’d like to ask you.. how to show multiple data to dbgrid vb.net.. for example select * from stockPrices; and i’d like to show the data into dbgrid.
please i need ur help with a sample code how to make it from php as webservices, and vb.net as a client.. please send me a email at salim_shammakh@yahoo.com
best regard…
When I use the example and click on the WSDL link the following error messag is shown:
Anyone any idea what could be wrong?
START ERROR MESSAGE
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
Only one top level element is allowed in an XML document. Error processing resource ‘http://localhost/test/TMPfjqstz3xo7.ph…
Warning: Cannot modify header information - headers already sent by (output started at c:\Inetpub\wwwroo…
END ERROR MESSAGE
Thanks to your example, I have made a C# web service consumer (server done in php).
Thanks so much.
Posted by: Robert on July 24, 2006 1:57 PMThanks.
Your example is very simple and very clean.
Great demo. It would be nice to see it added to NuSOAP samples. Right now none implements producing end while there are two dozens of consumers.
Posted by: bojan gajic on December 22, 2006 9:51 AMThanks to all the great people on here. Newbie looking for some insight on php/nusoap. It is possible for my soap server to return a xml document of the result? In this article, the getBooks(author) returns a array of Books. Do I used that array result and create a .xml document before I redirect the client to that .xml page? Here is a great example of what I want:
http://www.webservicex.net/WS/WSDetails.aspx?WSID=42&CATID=7
Click on “GetInfoByState” and type in “WY”, the result would redirect me to a xml document.
Again, thank you and hope to see some answer soon.
Is there any way to remove the xsi:type=xsd:string from the content in a soap request?? Any help is welcome.
Posted by: Brian Anderson on January 18, 2007 6:03 PMI’m trying to return a ComplexType from a NuSOAP webservive that has a “circular reference”. When I call this from a NuSOAP/PHP client, it works great. When I try to add this web reference to my ASP.Net project, it throws in an erroneous Array “class” into my project & I’m unable to address any of the elements of the array.
Any thoughts?
Here’s the URL to my WSDL (at some point I’ll put a password check on this) :)
http://www.iancaz.com/VentStatusService/VentStatusService.php?wsdl
Here are my “ComplexTypes”:
Posted by: Ian Cazabat on March 15, 2007 1:55 PM
$server->wsdl->addComplexType(
'VentChannel',
'complexType',
'struct',
'all',
'',
array(
'channelName'=>array('name'=>'channelName','type'=>'xsd:string'),
'channelLinkURL'=>array('name'=>'channelLinkURL','type'=>'xsd:string'),
'channelUsers'=>array('name'=>'channelUsers','type'=>'tns:VentUserArray'),
'channelSubchannels'=>array('name'=>'channelSubchannels','type'=>'tns:VentChannelArray')
)
);
$server->wsdl->addComplexType(
'VentChannelArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:VentChannel[]')
),
'tns:VentChannel'
);