2010-07-20 3 views
0

J'ai créé un simple service web en utilisant Php Nusoap. Cela fonctionne correctement, mais la seule chose qui manque est d'ajouter l'attribut xmlns par défaut à la balise de réponse.Nusoap - correction de l'attribut xmlns vide pour la réponse

Voici la copie de la réponse:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 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/"> 
    <SOAP-ENV:Body> 
    <LoginResponse xmlns=""> 
     <LoginResult> 
     <register> 
      <customer>d2ff3b88d34705e01d150c21fa7bde07</customer> 
     </register> 
     </LoginResult> 
    </LoginResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Voici le code:

<?php 

require_once ('nusoap.php'); 
// set namespace 
$ns = 'mynamspace'; 
// set up soap server 
$server = new soap_server(); 
$server->configureWSDL ('testservice', $ns); 
$server->wsdl->schemaTargetNamespace = $ns; 
// define new user data type 


// define results 


$server->wsdl->addComplexType ('customer', 'complexType', 'struct', '', '', array ('customer' => array ('name' => 'customer', 'type' => 'xsd:string'))); 
$server->wsdl->addComplexType ('register', 'complexType', 'struct', '', '', array ('register' => array ('name' => 'register', 'type' => 'tns:customer'))); 
$server->wsdl->addComplexType ('LoginResult', 'complexType', 'struct', '', '', array ('LoginResult' => array ('name' => 'LoginResult', 'type' => 'tns:register'))); 

// register Login function 
$server->register ('Login', // method name 
array ('username' => 'xsd:string', 'password' => 'xsd:string'), // input parameters 
array ('LoginResult' => 'tns:register'), // output parameters 
'urn:mynamespace', // namespace 
'urn:mynamespaceAction', // soapaction 
'document', // style 
'literal', // use 
'Login service for testing'); // documentation 


function Login($username, $password) { 
    if (isset ($username) && isset ($password)) { 
     $hash = md5 ($username); 
     return array ('LoginResult' => array ('register' => array ('customer' => $hash))); 

    } 
} 

// Use the request to (try to) invoke the service 
$HTTP_RAW_POST_DATA = isset ($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 
$server->service ($HTTP_RAW_POST_DATA); 
?> 

Toute aide est grandement appréciée.

Répondre

1

Je ne prétends pas que ce soit particulièrement élégant, mais travaillé dans mon cas:

Je suis entré dans la nusoap.php et a commenté cette ligne (ligne 5925 pour moi):

// $ elementNS = "xmlns = \" \ "";

directement après: if ($ non qualifié & & utilisation de $ == 'littérale') {

+0

Merci beaucoup Lee, j'ai utilisé la même approche. – Rajat