Search code examples
phpweb-servicessoapsoap-clientbugzilla

Bugzilla webservices using php soapclient - Error - wrong version


hi i need to create a bug in bugzilla using bugzilla webservices and php. I don't want to use any other libraries (for eg. zend, nusoap etc) as my boss wants it to be using strictly php soapclient. After trying for couple of day, I couldn't make it work. I hope you guys can help me. I was successful first time doing this using a class avaiable at http://code.google.com/p/bugzillaphp/ . However, as we upgraded to new bugzilla (4.2) and that class was using xmlrpc request and not the webservice. So it failed. I am pasting the code, soap request and response. Please help me guys.

<?php
$user = 'your email address';
$pass = 'your password';
$uri = 'http://your site/xmlrpc.cgi';       
$client = new SoapClient(NULL,
                                       array('location' => $uri,
                                            'uri'     => $uri,
                                            'trace' => 1,
                                            'soap_version' => SOAP_1_2,

                                             'action' => ""
                                            //'exceptions' => 0
));
try
{
 $result = $client->__soapCall("User.login", array(

            'login'          => $user,
            'password'       => $pass,          
            'remember'  => 'true'
            ));
print $result;                  
}
catch (Exception $e)
 {
        print $e->getMessage();
    echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
    echo "Response:\n" . $client->__getLastResponse() . "\n";
    echo "REQUEST HEADERS:\n" . $client->__getLastRequestHeaders() . "\n";
    echo "RESPONSE HEADERS:\n" . $client->__getLastResponseHeaders() . "\n";
print_r($headers);      
$headers = str_replace("application/soap+xml", "text/xml", $headers);
print_r($headers);  
 }
?>
     xml request and response, xml request headers and response headers:-

REQUEST:
 <?xml version="1.0" encoding="UTF-8"?>
 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="htt
p://devbugz/xmlrpc.cgi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/
soap-encoding"><env:Body><ns1:User.login env:encodingStyle="http://www.w3.org/20
03/05/soap-encoding"><param0 xsi:type="xsd:string">your email</param0><par
am1 xsi:type="xsd:string">your password</param1><param2 xsi:type="xsd:string">true</p
aram2></ns1:User.login></env:Body></env:Envelope>

Response:
<?xml version="1.0" encoding="UTF-8"?><methodResponse><fault><value><struct><mem
ber><name>faultString</name><value><string>Application failed during request des
erialization: 32612: When using XML-RPC, you cannot send data as application/soa
p+xml; charset=utf-8; action="http://devbugz/xmlrpc.cgi#User.login". Only text/x
ml and application/xml are allowed. at F:/applications/ActiveState/Perl/v5.10.0/
site/lib/SOAP/Lite.pm line 2778.
</string></value></member><member><name>faultCode</name><value><string>Client</s
tring></value></member></struct></value></fault></methodResponse>

REQUEST HEADERS:
POST /xmlrpc.cgi HTTP/1.1
Host: devbugz
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.9
Content-Type: application/soap+xml; charset=utf-8; action="http://yoursite/xmlrpc
.cgi#User.login"
Content-Length: 569


RESPONSE HEADERS:
HTTP/1.1 200 OK
Date: Thu, 22 Mar 2012 21:08:56 GMT
Server: Apache/2.2.19 (Win32) mod_auth_sspi/1.0.4 PHP/5.2.6 DAV/2 SVN/1.6.15 mod
_ssl/2.2.19 OpenSSL/0.9.8r
SOAPServer: SOAP::Lite/Perl/0.714
Content-Length: 578
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/xml

Solution

  • thanks "sas" but I figured it out. I concluded that as bugzilla webservices are implemented using xmlrpc server (xmlrpc.cgi) (not soap server), so we can not use php soapclient to call those services. I used xmlrpc client for php available at phpxmlrpc.sourceforge.net to implement the client script to call bugzilla webservices. I will post the code for this soon.