RE: [SOAP] GsoaP/PEAR::SOAP interoperability
| From: | Owain Perry | Date: | Tue, 04 May 2004 20:19:10 +0000 |
| Subject: | RE: [SOAP] GsoaP/PEAR::SOAP interoperability | ||
| References: | 1 | Groups: | php.soap |
| Request: | Send a blank email to php-soap+get-1510@lists.php.net to get a copy of this message | ||
Norb,
Sorry not had a chance to reply before, Just using a modified version of the
quote example in the samples directory that comes with Gsoap, I have used a
stuct to return , so you can see how they fit in if you need to pass complex
structures around. Let me know if you have any problems.
This is the c++ header file.
<snip>
typedef char * xsd__string;
int ns__sendback (char * password, struct ns__sendbackResponse {xsd__string
_return_;} * out);
</snip>
This is the c++ code.
<Snip>
#include "soapH.h" /* include generated proxy and SOAP support */
int main(int argc, char **argv)
{
struct soap soap;
struct ns__sendbackResponse q;
char *sym;
if (argc > 1)
sym = argv[1];
else
{
fprintf(stderr, "Usage: quote <ticker>\n");
exit(1);
}
soap_init(&soap);
if (soap_call_ns__sendback(&soap, "http://redfairy/soap/testserver.php",
"",sym , &q) == 0)
printf("Input was %s soap call returned - %s\n", sym, q._return_);
else
soap_print_fault(&soap, stderr);
soap_end(&soap);
soap_done(&soap);
return 0;
}
/* The namespace mapping table is required and associates namespace prefixes
with namespace names: */
struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"},
/* MUST be
first */
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"},
/* MUST be
second */
{"xsi", "http://www.w3.org/1999/XMLSchema-instance",
"http://www.w3.org/*/XMLSchema-instance"},
/* MUST be third */
{"xsd", "http://www.w3.org/1999/XMLSchema",
"http://www.w3.org/*/XMLSchema"},
{"ns", "urn:test_Server"}, /* Method namespace URI */
{NULL, NULL}
};
</snip>
and the php server
<snip>
<?php
// first, include the SOAP/Server class
require_once 'SOAP/Server.php';
class Test1 {
// Stores instance of PEAR::SOAP Server
var $soapServer;
// Constructor builds PEAR::SOAP Server
function Test1 ()
{
// Switch off notices to all GET
error_reporting(E_ALL ^ E_NOTICE);
// Instantiate PEAR::SOAP SOAP_Server
$this->soapServer=new SOAP_Server;
// Build the object map (using this instance) + add a namespace
$this->soapServer->addObjectMap($this,'urn:test_Server');
// Turn on the server
$this->soapServer->service($GLOBALS['HTTP_RAW_POST_DATA']);
}
function serverTimestamp()
{
return time();
}
function sendback($name)
{
return 'Hello '.$name;
}
}
// Start the SOAP server
$test = new Test1;
?>
</snip>
Have fun
O.
-----Original Message-----
From: PHPDiscuss - PHP Newsgroups and mailing lists
[mailto:nblam@austin.rr.com]
Sent: 04 May 2004 19:12
To: soap@lists.php.net
Subject: Re: [SOAP] GsoaP/PEAR::SOAP interoperability
Thanks O for answering my posting.
That would be great if you could send me a example (like 'hello' below) of
a GSOAP client making a request to a PEAR::SOAP server.
Also, if you have an example of structures or lists that are being passed
as a SOAP response. I have a MySQL database that is being queried by my
backend PHP code and am wondering how to pass multiple types via SOAP.
Thanks again,
Norb
Here's the corresponding C code which is currently failing:
C Code:
#include "soapH.h"
#include "ns.nsmap"
const char server[] =
"http://192.168.2.102/test/pear_soap/examples/ws/testserver1.php";
int main(int argc, char **argv) {
struct soap soap;
char result[50];
char *pass_variable;
pass_variable = result;
soap_init(&soap);
soap_call_ns4__hello(soap_new(), server, "", "bonnie girl",
&pass_variable);
if (soap.error) soap_print_fault(&soap,stderr);
else {
printf("successful");
printf("result: %s", pass_variable);
}
return 0;
}
Here's the corresponding PHP server side code:
<?php
class Test1 {
// Stores instance of PEAR::SOAP Server
var $soapServer;
// Constructor builds PEAR::SOAP Server
function Test1 () {
// Switch off notices to all GET
error_reporting(E_ALL ^ E_NOTICE);
// Instantiate PEAR::SOAP SOAP_Server
$this->soapServer=new SOAP_Server;
// Build the object map (using this instance) + add a namespace
$this->soapServer->addObjectMap($this,'http://www.phppatterns.com#Test1');
//$this->soapServer->addObjectMap($this,'http://tempuri.org');
// Turn on the server
$this->soapServer->service($GLOBALS['HTTP_RAW_POST_DATA']);
}
function serverTimestamp() {
return time();
}
function hello($name) {
return 'Hello '.$name;
}
function hello1() {
return 'Hello from PEAR';
}
}
?>
Owain Perry wrote:
> Norb,
> I can confirm that I have got GSOAP 2.4 & 2.5 working fine with
PEAR::Soap,
> but I have only been passing strings around and not really tested any
other
> data types. Apart from Attachments which don't seem to work that well as
> PEAR::SOAP doesn't build the options array that gsoap expects, but this
can
> be worked around. let me know if you need some code.
> O.
> -----Original Message-----
> From: PHPDiscuss - PHP Newsgroups and mailing lists
> [mailto:nblam@austin.rr.com]
> Sent: 27 April 2004 03:00
> To: soap@lists.php.net
> Subject: [SOAP] GsoaP/PEAR::SOAP interoperability
> I've been trying to get my C++ gsoap client request to work with my PHP
> PEAR::SOAP server response.
> Has anyone ever tried this and get it to work? Here are the details:
> GSOAP request:
> <?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope
>
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>
> xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:xsi="
>http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:ns4="http://www.phppatterns.com#Test1">
> <SOAP-ENV:Body id="_0">
> <hello
> xmlns="http://www.phppatterns.com#Test1">
> <param-1>bonnie girl</param-1>
> </hello>
> </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
> PEAR::SOAP response:
> HTTP/1.1 200 OK
> Date: Tue, 27 Apr 2004 01:50:52 GMT
> Server: Apache/1.3.27 (Unix) PHP/4.3.1 DAV/1.0.3 mod_ssl/2.8.14
> OpenSSL/0.9.6b
> X-Powered-By: PHP/4.3.1
> Status: 200 OK
> Content-Length: 561
> Connection: close
> Content-Type: text/xml; charset=UTF-8
> <?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope
>
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
> xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns4="http://www.phppatterns.com#Test1"
>
> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> <SOAP-ENV:Body>
> <ns4:helloResponse>
> <return xsi:type="xsd:string">Hello bonnie
> girl</return></ns4:helloResponse>
> </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
> Everything looks good except GSOAP doesn't like the <return> tag
> according to the following debug message:
> Unknown element 'return' (level=3, 1)
> IGNORING element 'return'
> End element found (level=3) 'return'=''
> A more generic question:
> Has anyone ever gotten a C++ SOAP client (any SOAP implementation) to
> correct communicate with a PHP SOAP Server (Any SOAP implementation)
> Thanks in Advance
> Norb
> --
> PHP Soap Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php