Zend SOAP

Salve,

  stavo cercando di far funzionare il modulo per i web services di zend. ho letto una guida e mi son scaricato http://www.box.net/shared/jy8daftmp9 il sito d'esempio.

come modello base ho utilizzato zend_Tool creando un progetto base ed adeguando la configurazione.

Pero' quando richiamo http:/localhost/soap/public/soap?wsdl(cioe' l'azione index del controller Soap, passando con GET il parametro 'wsdl') mi dice :

Not Found The requested URL /soap/public/soap was not found on this server.

cosa ho sbagliato?

inviato 7 anni fa
cybaSsh
X 0 X

Questo è il link della tua applicazione e funziona correttamente?

 http:/localhost/soap/public/

Se si, a meno che non hai impostato in qualche modo particolare le route devi fare:

http:/localhost/soap/public/controller/action/parametro1/valore1/parametro2/valore2
risposto 7 anni fa
Mario Santagiuliana
X 0 X

con l'url  http:/localhost/soap/public/ mi da la pagina di presentazione di default fatta da  Zend Tool.

anche con la sintassi /soap/public/soap/index/wsdl (che sarebbe esplicitamente la stessa url che avevo scritto dato che index action del controller è definita come:

 public function indexAction()     {            $this->_helper->viewRenderer->setNoRender();                   if(isset($_GET['wsdl'])) {           //return the WSDL           $this->hadleWSDL();       } else {          //handle SOAP request           $this->handleSOAP();       }     }

) mi da lo stesso errore...

utilizzo apache2 su Ubuntu...e non ha particolari impostazioni da quelle di default

Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g Server at localhost Port 80

risposto 7 anni fa
cybaSsh
modificato 7 anni fa
X 0 X
con l'url  http:/localhost/soap/public/ mi da la pagina di presentazione di default fatta da  Zend Tool.

Scusa è la prima volta che provi a creare una applicazione con Zend?

La pagina di "presentazione di default" si tratta del controller index e dell'action index.

Hai creato un nuovo controller chiamato soap per caso?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

si,

diciamo che sono alle prime armi con gli strumenti zend a causa di un tira e molla lavorativo(diciamo) ::).

si ho creato un controller soap.

Andrea

risposto 7 anni fa
cybaSsh
X 0 X

il file di configurazione è:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
;includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
;impostazione data/ora 
phpSettings.date.timezone = "Europe/Rome"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

il codice del controller Soap è :

<?php
require_once realpath(APPLICATION_PATH .'/../library/').'/Soaptest.php';

class SoapController extends Zend_Controller_Action
{
   private $_WSDL_URI = "http://192.168.188.128:8081/soap?wsdl";
   
    public function init()
    {    
    }

    public function indexAction()
    {    
       $this->_helper->viewRenderer->setNoRender();
          
       if(isset($_GET['wsdl'])) {
          //return the WSDL
          $this->hadleWSDL();
      } else {
         //handle SOAP request
          $this->handleSOAP();
      }
    }

   private function hadleWSDL() {
      $autodiscover = new Zend_Soap_AutoDiscover();
       $autodiscover->setClass('Soaptest');
       $autodiscover->handle();
   }
    
   private function handleSOAP() {
      $soap = new Zend_Soap_Server($this->_WSDL_URI); 
       $soap->setClass('Soaptest');
       $soap->handle();
   }
    
    public function clientAction() {
       $client = new Zend_Soap_Client($this->_WSDL_URI);
       
       $this->view->add_result = $client->math_add(11, 55);
       $this->view->logical_not_result = $client->logical_not(true);
       $this->view->sort_result = $client->simple_sort( array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"));
       
    }

}
risposto 7 anni fa
cybaSsh
X 0 X

ho notato 2 cose:

1) errore: devo cambiare l'attributo privato  private $_WSDL_URI, magari con  "http://localhost/soap/soap?wsdl"?

2) warning: connettendomi a  http://localhost/soap/application/controllers/SoapController.php mi dice che non trova iol file Soaptest Failed opening required '/Soaptest.php' (include_path='.:/opt/ZendFramework/current/library:/usr/share/php5:/usr/share/pear') in /media/Archivio/www/soap/application/controllers/SoapController.php on line 2.  eppure sul file di configurazione sembra tutto ok

risposto 7 anni fa
cybaSsh
X 0 X

Cosa contiene soaptest.php? Perchè lo vuoi includere?

<?php

require_once realpath(APPLICATION_PATH .'/../library/').'/Soaptest.php';

risposto 7 anni fa
Mario Santagiuliana
X 0 X

alcune operazioni semplici

<?php
class Soaptest {
   /**
    * Add method
    *
    * @param Int $param1
    * @param Int $param2
    * @return Int
    */
   public function math_add($param1, $param2) {
      return $param1+$param2; 
   }
   
   /**
    * Logical not method
    *
    * @param boolean $param1
    * @return boolean
    */
   public function logical_not($param1) {
      return !$param1;
   }
   
   /**
    * Simple array sort
    *
    * @param Array $array
    * @return Array
    */
   public function simple_sort($array) {
      asort($array);
      return $array;
   }
   
}
risposto 7 anni fa
cybaSsh
X 0 X

Allora non caricare così la tua libreria soaptest.php.

Inseriscila nella cartella library e caricala con Zend_Loader, il caricamento fallo prima di richiamare la classe della libreria, all'interno della tua action o nell'_init del tuo controller.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

c'è qualcos'altro....ho fatto un progetto vuoto utilizzando zend tool.

mi visualizza la pagina index

creo il controller pippo (file PippoController.php su controllers e index.phtml su scripts->pippo)

quando vado a chiamare  /localhost/xxx/public/pippo mi dice che "The requested URL /xxx/public/pippo was not found on this server."

avevo fatto una precedente "applicazione d'esempio" seguendo un tutorial che si chiama "get starting with Zend etc etc." sulla gestione di un piccola discoteca(aggiungi modifica elimana cd sul db.

questa mi funziona.

bho? :crazy:

risposto 7 anni fa
cybaSsh
X 0 X

L'htaccess l'hai creato correttamente?

Non continuo a chiederti del controller pippo che hai creato se no andiamo offtopic(forse è il caso apri una discussione specifica).

La modifica che ti avevo suggerito l'hai fatta?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

lo da per default ed èSetEnv APPLICATION_ENV development

RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]        

l'ho messo sotto library, maniente

risposto 7 anni fa
cybaSsh
X 0 X

Prova ad aggiungere la direttiva RewriteBase tipo così:

SetEnv APPLICATION_ENV development


RewriteEngine On
RewriteBase /percorso/cartella/html
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
risposto 7 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda