Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Errore su Web Services

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    Errore su Web Services

    Ciao a tutti,
    qualcuno di voi ha avuto a che fare con Web Services sviluppati in Java?

    Mi spiego meglio...

    Dove lavoro hanno realizzato un Web Services in Java che "dovrebbe" restituire in risposta un file xml...

    Mi dicono che, la chiamata al Web Services va fatta passando sempre un file XML e non un array di valori (ho molti dubbi in proposito)...

    Vabbé comunque, questo é quello che faccio io:

    Codice PHP:
    $wsdl = "http://INDIRIZZO_WEB_SERVICES?wsdl";
    $client = new SoapClient($wsdl);
      
    //$xml = file_get_contents('COUNTRY.xml');
    $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Request host=\"INDIRIZZO_HOST\" requestor=\"\" applicationName=\"NOME_APPLICAZIONE\" ip=\"xxx.xxx.xxx.xxx\" timestamp=\"2011-05-09T13:08:32.604+02:00\"><Service tableName=\"COUNTRY\" method=\"COUNTRY_CODE_LIST\"><input/></Service></Request>";
    //$xml = htmlspecialchars($xml);
    //$xml = htmlentities($xml, ENT_QUOTES);
      
    //$wsResult = $client->executeService($xml);
    //$wsResult = $client->__soapCall('executeService', $xml);
    //$wsResult = $client->__soapCall('executeService');

    $parameters = array();
    $wsResult $client->__soapCall('executeService',$parameters);

    //$parameters = "";
    //$wsResult = $client->__soapCall('executeService',$parameters);

    var_dump($wsResult);
    die();
    Come potete vedere dal codice commentato (che ho lasciato volutamente), ho fatto mille prove:

    - Leggendo il file XML da un file esterno
    - Scrivendo il file XML direttamente
    - Parsando il file XML e non

    Poi ho fatto diversi tipi di chiamate, ma il risultato é sempre lo stesso:

    codice:
    SoapFault  java.rmi.RemoteException: null; nested exception is: java.lang.NullPointerException
    Vi posto anche il var_dump della connessione e dei metodi a disposizione:

    Codice PHP:
    object(SoapClient)#25 (2) {
      
    ["_soap_version"]=>
      
    int(1)
      [
    "sdl"]=>
      
    resource(838of type (Unknown)
    }

    array(
    1) {
      [
    0]=>
      
    string(65"executeServiceResponse executeService(executeService $parameters)"

    Io vorrei capire, secondo voi, visto che chi ha sviluppato il Web Services non ne capisce nulla di PHP, sono io che sbaglio o é il Web Services che non va?

    Ciao e grazie, MAX
    http://www.mdlwork.com

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Per interpretare XML esistono delle funzioni apposite su PHP.

    Se hai l'XML su una stringa come nel tuo esempio puoi usare simplexml_load_string(), se invece devi leggere da un file c'è simplexml_load_file().

  3. #3
    Allora

    codice:
    SoapFault  java.rmi.RemoteException: null; nested exception is: java.lang.NullPointerException

    indica che il java si sbaglia, crede che una variabile sia referenziata invece è a null e da l'eccezione. Quindi magari segnalalo ai colleghi.

    Se il problema nasce dal fatto che tu con

    Codice PHP:
    $parameters = array(); 
    $wsResult $client->__soapCall('executeService',$parameters); 
    non gli stai passando nulla, beh magari popola in maniera corretta $parameters http://www.php.net/manual/en/soapclient.soapcall.php che accetterà pure un array di valori lato php, ma poi quando effettua la chiamata Soap al webserver codifica il tutto in xml e lo invia correttamente secondo quando dichiarato nel wsdl.

    poi la riga sopra può anche essere sostituita da

    Codice PHP:
    $wsResult $client->executeService($parameters); 
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    Grazie ragazzi

    Grazie per le risposte ragazzi..

    per Santino83_02:
    No in realtá la chiamata che faccio é questa:

    Codice PHP:
    $wsdl = "http://INDIRIZZO_WEB_SERVICES?wsdl";
    $client = new SoapClient($wsdl);
    $xml = "<?xml version="1.0\" encoding=\"UTF-8\"?><Request host=\"INDIRIZZO_HOST\" requestor=\"\" applicationName=\"NOME_APPLICAZIONE\" ip=\"xxx.xxx.xxx.xxx\" timestamp=\"2011-05-09T13:08:32.604+02:00\"><Service tableName=\"COUNTRY\" method=\"COUNTRY_CODE_LIST\"><input/></Service></Request>";

    $xml htmlspecialchars($xml);
      
    $wsResult $client->executeService($xml);

    var_dump($wsResult);
    die();
    Quindi passo proprio i parametri tranite XML...
    La riga di codice che hai scritto tu é una delle tante prove che non é andata a buon fine...

    Adesso provo pure le funzioni che dice Alhazred, ma se non erro avevo giá fatto questa prova..

    A dopo e grazie, MAX
    http://www.mdlwork.com

  5. #5
    non mi pare che SoapClient voglia un xml da passare come parametri, ma un array di chiavi->valori
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    allora...

    le funzioni "simplexml_load_file" e "simplexml_load_string" al caso mio non vanno bene perché ritornano un oggetto e a me serve una stringa che sia XML puro..

    non mi pare che SoapClient voglia un xml da passare come parametri, ma un array di chiavi->valori
    Fino ad oggi la pensavo allo stesso identico modo... Infatti, le prime prove che ho fatto é la creazione di un array e passato come parametro... Ma mi hanno detto che non devo far cosí, ma che devo passare un XML che rappresenta un insieme di parametri!!

    Mi puó andar bene, se funzionasse peró... Io anche ho sempre lavorato con i web services e con gli array...

    Boh, mi vedo un vicolo cieco...

    Altre idee?

    Ciao MAX
    http://www.mdlwork.com

  7. #7

    Re: allora...

    Originariamente inviato da masdel1979
    le funzioni "simplexml_load_file" e "simplexml_load_string" al caso mio non vanno bene perché ritornano un oggetto e a me serve una stringa che sia XML puro..



    Fino ad oggi la pensavo allo stesso identico modo... Infatti, le prime prove che ho fatto é la creazione di un array e passato come parametro... Ma mi hanno detto che non devo far cosí, ma che devo passare un XML che rappresenta un insieme di parametri!!

    Mi puó andar bene, se funzionasse peró... Io anche ho sempre lavorato con i web services e con gli array...

    Boh, mi vedo un vicolo cieco...

    Altre idee?

    Ciao MAX

    certo che state messi bene: da una parte te che non sai come parlare ad un web services, e dall'altra quelli che non sanno cosa dirti...

    la funzione executeService che parametro si aspetta? probabilemnte sarà un array con:

    Codice PHP:

    array('nomeDelParametroNelWSDL' => $xml); 
    dove $xml è il tuo xml di prima, penso...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Prova a usare le nusoaplib al posto delle standard di PHP: http://sourceforge.net/projects/nusoap/
    Io mi ci trovo benissimo e le chiamate sono davvero banali, del tipo
    codice:
    $soap_client = new nusoap_client($wsdl_path."nome_file_definizioni.wsdl", true, null, null, null, null);
    $err = $soap_client->getError();
    if ($err) {
       echo $err;
       die();
    }
    $param = array("Tipo" => "cane", "Taglia" => "media", "Peso" => 15);
    $result = $soap_client->call("metodo_wsdl_pubblico", $param, "", "", "");
    Ovviamente queste lib presuppongono l'esistenza di un file wsdl fornito dal server soap (quindi i colleghi javisti) che ha una sua struttura del tipo

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <wsdl:definitions targetNamespace="http://soap.service.acme.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://soap.service.acme.com" xmlns:intf="http://soap.service.acme.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
     <wsdl:types>
      <schema elementFormDefault="qualified" targetNamespace="http://soap.service.acme.com" xmlns="http://www.w3.org/2001/XMLSchema">
       <element name="metodo_wsdl_pubblico">
        <complexType>
         <sequence>
          <element name="Tipo" type="xsd:string"/>
          <element name="Taglia" type="xsd:string"/>
          <element name="Peso" nillable="true" type="xsd:int"/>
         </sequence>
        </complexType>
       </element>
       <element name="metodo_wsdl_pubblico_response">
        <complexType>
         <sequence>
          <element maxOccurs="unbounded" name="metodo_wsdl_pubblico_response" type="impl:metodo_wsdl_pubblico_ritorno"/>
         </sequence>
        </complexType>
       </element>
       <complexType name="metodo_wsdl_pubblico_ritorno">
        <sequence>
         <element name="codice_ritorno" nillable="true" type="xsd:string"/>
         <element name="esito" nillable="true" type="xsd:string"/>
         <element name="messaggio" nillable="true" type="xsd:string"/>
        </sequence>
       </complexType>
      </schema>
     </wsdl:types>
    
     <wsdl:message name="metodo_wsdl_pubblico_richiesta">
      <wsdl:part element="impl:metodo_wsdl_pubblico" name="parameters"/>
     </wsdl:message>
    
     <wsdl:message name="metodo_wsdl_pubblico_ritorno">
      <wsdl:part element="impl:metodo_wsdl_pubblico_ritorno" name="parameters"/>
     </wsdl:message>
    
     <wsdl:portType name="metodo_wsdl_pubblicoServicePortType">
      <wsdl:operation name="metodo_wsdl_pubblico">
       <wsdl:input message="impl:metodo_wsdl_pubblico_richiesta" name="metodo_wsdl_pubblico_richiesta"/>
       <wsdl:output message="impl:metodo_wsdl_pubblico_ritorno" name="metodo_wsdl_pubblico_ritorno"/>
      </wsdl:operation>
     </wsdl:portType>
    
     <wsdl:binding name="metodo_wsdl_pubblicoServiceBinding" type="impl:metodo_wsdl_pubblicoServicePortType">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="metodo_wsdl_pubblico">
       <wsdlsoap:operation soapAction="metodo_wsdl_pubblico"/>
       <wsdl:input name="metodo_wsdl_pubblico_richiesta">
        <wsdlsoap:body use="literal"/>
       </wsdl:input>
       <wsdl:output name="metodo_wsdl_pubblico_ritorno">
        <wsdlsoap:body use="literal"/>
       </wsdl:output>
      </wsdl:operation>
     </wsdl:binding>
    
     <wsdl:service name="metodo_wsdl_pubblico_Service">
      <wsdl:port binding="impl:metodo_wsdl_pubblicoServiceBinding" name="metodo_wsdl_pubblicoServicePort">
       <wsdlsoap:address location="http://xxx.xxx.xxx.xxx/cgi-bin/applet?wsabbi"/>
      </wsdl:port>
     </wsdl:service>
    
    </wsdl:definitions>
    Non spaventarti, la struttura può essere anche molto più semplice!)

    I tuoi colleghi comunque han ragione quando dicono:
    non devo far cosí, ma che devo passare un XML che rappresenta un insieme di parametri!!
    perchè loro in ingresso si aspettano un XML. Tu però, lato php, devi passare un array alle funzioni di chiamata soap, è poi la classe soap che converte tutto in xml e lo "sputa" al server di destinazione


  9. #9
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ...

    Ciao ragazzi ho letto adesso e ho avuto un incontro con il famigerato "javista"

    Dopo mille tentativi non funziona nulla, ma il problema sembra essere il server che non invia le richieste, probabilmente per problemi dovuti alla sicurezza...

    Quindi bisogna fare richiesta etc etc etc...

    Sembra un progetto per la NASA ed invece é un cavolata...

    Vabbé vediamo come va a finire lunedí, magari é solo questo il problema..

    Ciao e grazie..

    ps => x Santino83_02
    e si purtroppo in alcuni ambienti di lavoro é cosí Comunque il Web Services si aspetta un XML

    ps => x Dascos
    si il file wsdl esiste ed é messo a disposizione e mi preoccupa meno di tutti
    http://www.mdlwork.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.