Re: PHP SOAP - Extreme newbie questions :/

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 31 March 2010 13:54, lmhelp2 <lea.massiot@ign.fr> wrote:
>
> Hi everyone,
>
> I am an absolute beginner with SOAP :-( :-).
> I have been trying to follow a tutorial
> but I got stuck with "things" not working...
>
> (Maybe the following example is not the simplest
> (I whish I had found a little "Hello World", but I didn't).
> Notice that I wasn't especially willing to use "nusoap"
> but it is what I found first. I discovered later I could
> have used the SOAP extension for PHP...
> but as I said I know nothing about that).
>
>
>
> 1) Database:
> ~~~~~~~~~~~
> So, in that example, I first created a database:
> =================================================
> CREATE DATABASE soap_tutorial;
>
> CREATE TABLE stockprices
> (
>  stock_id          INT UNSIGNED    NOT NULL AUTO_INCREMENT,
>  stock_symbol   CHAR(3)            NOT NULL,
>  stock_price      DECIMAL(8,2)     NOT NULL,
>  PRIMARY KEY(stock_id)
> );
>
> INSERT INTO stockprices VALUES (1, 'ABC', '75.00');
> INSERT INTO stockprices VALUES (2, 'DEF', '45.00');
> INSERT INTO stockprices VALUES (3, 'GHI', '12.00');
> INSERT INTO stockprices VALUES (4, 'JKL', '34.00');
> ==================================================
>
>
> 2) Server code:
> ~~~~~~~~~~~
> it is supposed to connect to the above database and
> return the "stock_price" of the tuple in which "stock_symbol"
> is equal to the value of the getStockQuote() function
> parameter: "$symbol". This value comes from the client
> side...
> ==================================================
> soap_tutorial_server.php
> ==================================================
> <?php
>  function getStockQuote($symbol)
>  {
>  $retval = 0;
>
>    //----------------------------------------------------------------
>    $retval = mysql_connect("localhost", "user", "password");
>    if(!$retval)
>    {
>      echo "<br />";
>      echo "Database connection error";
>      echo "<br />";
>      return $retval;
>    }
>    //----------------------------------------------------------------
>    $retval = mysql_select_db("soap_tutorial");
>    if(!$retval)
>    {
>      echo "<br />";
>      echo "Database not found";
>      echo "<br />";
>      return $retval;
>    }
>    //----------------------------------------------------------------
>    $query = "SELECT stock_price FROM stockprices "
>           . "WHERE stock_symbol = '" . $symbol . "'";
>
>    $result = mysql_query($query);
>    if(!$result)
>    {
>      echo "<br />";
>      echo "Query error";
>      echo "<br />";
>      return $result;
>    }
>    //----------------------------------------------------------------
>    $row = mysql_fetch_assoc($result);
>
>    echo "<br />";
>    echo "stock_price = " . $row["stock_price"];
>    echo "<br />";
>
>    return $stock_price;
>  }
>
>  //=======================================
>  // Turn this function into a web service
>  //=======================================
>  //---------------------------------------------------------------
>  // Include the NuSOAP library
>  //---------------------------------------------------------------
>  require("nusoap-0.7.3/lib/nusoap.php");
>
>  //---------------------------------------------------------------
>  // Instantiate an instance of the soap_server class
>  //---------------------------------------------------------------
>  $server = new soap_server();
>
>  //---------------------------------------------------------------
>  // Tell NuSOAP information for the WSDL document it is going to
>  // create for us. Specifically we specify the name of the server
>  // and the namespace, in that order.
>  //---------------------------------------------------------------
>  $server->configureWSDL("stockserver", "urn:stockquote");
>
>  //---------------------------------------------------------------
>  // Register the function we created with the SOAP server.
>  // We pass several different parameters to the register method.
>  //
>  // The first is the name of the function we are registering.
>  //
>  // The next parameter specifies the input parameters to the
>  // function we are registering. Notice that it is an array.
>  // The keys of the array represent the names of the input
>  // parameters, while the value specifies the type of the
>  // input parameter. One thing that pure PHP programmers might
>  // find odd is that I had to specify what types my input and
>  // return parameters are with the designations of xsd:string
>  // and xsd:decimal. It is required that you describe your data
>  // properly. You are not dealing with a loosely typed language
>  // here.
>  //
>  // The third parameter to the register method specifies the
>  // return type of the registered function. As shown below, it
>  // is fashioned in the same way as the last parameter, as an
>  // array.
>  //
>  // The next two parameters specify the namespace we are
>  // operating in, and the SOAPAction.
>  //---------------------------------------------------------------
>  $server->register("getStockQuote",
>                    array("symbol" => "xsd:string"),
>                    array("return" => "xsd:decimal"),
>                    "urn:stockquote",
>                    "urn:stockquote#getStockQuote");
>
>  //---------------------------------------------------------------
>  // Now, we finally finish it off with two more lines of code.
>  // The first simply checks if $HTTP_RAW_POST_DATA is initialized.
>  // If it is not, it initializes it with an empty string.
>  //
>  // The next line actually calls the service. The web request is
>  // passed to the service from the $HTTP_RAW_POST_DATA variable
>  // and all the magic behind the scenes takes place.
>  //---------------------------------------------------------------
>  $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)
>                        ? $HTTP_RAW_POST_DATA : "";
>
>  $server->service($HTTP_RAW_POST_DATA);
> ?>
> ==================================================
>
> => :confused: I understand
> why the code inside the function is executed
> because there is a function call in the client but I do not
> understand when the rest of the code (outside the function)
> is executed...
> => :confused: Will I see server errors
> (for example if the database connection fails)?
>
> 3) Client side code
> ~~~~~~~~~~~~~~~~~
>
> ==================================================
> soap_tutorial_client.php
> ==================================================
> <?php
>  //---------------------------------------------------------------
>  // Include the NuSOAP library
>  //---------------------------------------------------------------
>  require("nusoap-0.7.3/lib/nusoap.php");
>
>  //---------------------------------------------------------------
>  // Instantiate the soapclient class.
>  // We pass in the URL of the SOAP Server we are dealing with.
>  //---------------------------------------------------------------
>  $c = new soapClient("soap_tutorial_server.wsdl");
>
>  //---------------------------------------------------------------
>  // Last make a call to the Web Service.
>  // The one caveat is that the parameters to the Web Service must
>  // be encapsulated in an array in which the keys are the names
>  // defined for the service. You will see that I have an array
>  // key named 'symbol' because that is the name of the input
>  // parameter of my function. If you remember how we specified
>  // the input parameters when we registered the function with the
>  // server, you will see that this is very similar.
>  //---------------------------------------------------------------
>  $stockprice = $c->call("getStockQuote", array("symbol" => "ABC"));
>
>  //---------------------------------------------------------------
>  // Output the result
>  //---------------------------------------------------------------
>  echo "<br />";
>  echo "The stock price for \"ABC\" is " . $stockprice . ".";
>  echo "<br />";
>
>  //---------------------------------------------------------------
>  // Kill object
>  //---------------------------------------------------------------
>  unset($c);
> ?>
> ==================================================
>
> 4) I put those two files ("soap_tutorial_server.php" and
> "soap_tutorial_client.php") in my "htdocs" directory.
>
> 5) When I open "soap_tutorial_server.php" in my browser, I get a page which
> contents are:
>
> ===================================================
> stockserver
>
> View the WSDL for the service. Click on an operation name to view
> it's details.
>
>    * getStockQuote
> ===================================================
>
> I can click on the word "WSDL" and I get the following URI :
> http://localhost/soap_tutorial_server.php?wsdl
> In the browser appears an XML file.
>
> => :confused: Should I do something with it?
> (Save it somewhere?)
> => :confused: Can you explain me the syntax "soap_tutorial_server.php?wsdl"?
>
> 6) When I open "soap_tutorial_client.php", I get the following content:
> ====================================================
> The stock price for "ABC" is .
> ====================================================
>
> As you can see, the "stock_price" is missing.
>
> I have tried to find a simple tutorial about SOAP but I haven't had
> the chance to find something simple...
>
> I know there is a lot to read above... but I would be very grateful if
> you could give me a little help :-) !
>
> Thanks and best regards :-),
> --
> Lmhelp
> --
> View this message in context: http://old.nabble.com/PHP-SOAP---Extreme-newbie-questions-%3A--tp28095423p28095423.html
> Sent from the Php - Soap mailing list archive at Nabble.com.
>
>
> --
> PHP Soap Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

What you are missing is the response from the server.

Can you show the wsdl file please? I don't know nusoap as it is PHP4
only I believe.

But at a guess, can you try this URL ...

http://localhost/soap_tutorial_server.php#getStockQuote?symbol=ABC


The WSDL file describes the web service. With that file, any SOAP
client (in any language/os/etc.) can talk to the server.


I use Zend Framework's Soap service to read my PHP classes and
construct the WSDL file.

I then use a tool to read a WSDL file and create client PHP code.

That way I can test the WSDL file is accurate.




-- 
-----
Richard Quadling
"Standing on the shoulders of some very clever giants!"
EE : http://www.experts-exchange.com/M_248814.html
EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
ZOPA : http://uk.zopa.com/member/RQuadling

-- 
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux