IBM webMethods Hybrid Integration

IBM webMethods Hybrid Integration

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.



#Automation


#Applicationintegration
#webMethods
#Integration
 View Only
  • 1.  Web services

    Posted 05/11/10 10:43 AM

    Hi

     I need to create a new web-service by using php. And I need to use SOAP RPC/encoded for implementing this. I also need to authenticate the soap request using soap header information.  Before doing main task that I have created a WSDL file, client and server files using php.
    
    I have managed to send the soap request with header. But I am unaware of using the header information in the server side. That is I don't know how to check the header value is correct or not.
    
    And I got error while I have setting "must-understand" to 1 or true. The error is "Header not understood".
    
    I am  listing our WSDL, soap request, client and server here.
    
    Please guide me to create a good web service with authentication using soap headers.
    

    WSDL

    <?xml version="1.0" encoding="ISO-8859-1"?> adds two string values and returns the result

    SOAP Request
    <SOAP-ENV:Envelope
    xmlns:SOAP-ENV=“http://schemas.xmlsoap.org/soap/envelope/
    xmlns:ns1=“http://localhost/dipu/webservices/
    xmlns:xsd=“http://www.w3.org/2001/XMLSchema
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
    xmlns:ns2=“http://namespace.example.com/
    xmlns:SOAP-ENC=“http://schemas.xmlsoap.org/soap/encoding/
    SOAP-ENV:encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”>
    SOAP-ENV:Header
    ns2:usernamedipu</ns2:username>
    </SOAP-ENV:Header>
    SOAP-ENV:Body
    ns1:getCatalogEntry
    catalog1
    catalogTest111
    </ns1:getCatalogEntry>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    Client File

    <?php ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient("catalog.wsdl",array('trace' => 1 )); $catalogId='catalog1'; $functions=$client->__getFunctions(); echo '
    ';
    print_r($functions);
    
    
    //	$soapHeader=new SoapHeader('http://soapinterop.org/echoheader/','username','hello world');
    // $response = $client->getCatalogEntry('catalog1','catalogTest111', $soapHeader);
    /*$bodyArr	= array('catalog1', 'catalogTest111');
    $response 	= $client->__soapCall('getCatalogEntry', $bodyArr,NULL,$soapHeader,NULL);						   */
    //		echo '--'.$client->__getLastRequest().'--';
    $ns = 'http://namespace.example.com/';
    //Body of the Soap Header.
    $header = new SOAPHeader($ns, 'username', 'dipu'); 
    $testArr	= array('catalogId'=>'catalog1','catalogId2'=>'catalogTest111');	
    $response=$client->__soapCall("getCatalogEntry",$testArr,NULL, $header);
    //Create Soap Header.       
    echo $client->__getLastRequest();
    //echo $client->__getLastRequestHeaders();
    
    echo $response;
    ?>
    

    Server File

    <?php function getCatalogEntry($catalogId,$catalogId2) { if($catalogId=='catalog1') return " Catalog </HEAD

    CatalogId Journal Section Edition Title Author
    catalog1 IBM developerWorks XML October 2005 JAXP validation Brett McLaughlin
    $catalogId2 IBM developerWorks XML October 2005 JAXP validation Brett McLaughlin
    "; elseif ($catalogId='catalog2') return " Catalog </HEAD

    CatalogId Journal Section Edition Title Author
    catalog1 IBM developerWorks XML July 2006 The Java XPath API Elliotte Harold
    $catalogId2 IBM developerWorks XML July 2006 The Java XPath API Elliotte Harold
    "; } ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("catalog.wsdl"); $server->addFunction("getCatalogEntry"); $server->handle(); ?>
    #API-Management
    #soa
    #webMethods


  • 2.  RE: Web services

    Posted 05/11/10 01:43 PM

    Hum, I don’t think you’ll got lot of support here as it’s more wM centric.
    May I suggest to send your request directly to a PHP forum ?

    Anyway, I can’t help you as I have wrote only PHP client up to now :frowning: But if you find an answer, can you please copy it here as I’m interested on the subject.

    Thanks

    Laurent


    #API-Management
    #webMethods
    #soa


  • 3.  RE: Web services

    Posted 05/11/10 02:38 PM

    Hi laurent faillie,

                           Thank you for your quick response. I will post the answer, if I get it. It is helpful for to get links of some good php forum.
    

    Thanks

    Dipu


    #soa
    #webMethods
    #API-Management


  • 4.  RE: Web services

    Posted 05/11/10 02:41 PM

    Google / Yahoo will be your friend because the only PHP forums I know are in French :o


    #soa
    #API-Management
    #webMethods


  • 5.  RE: Web services

    Posted 05/11/10 02:49 PM

    Hi laurent faillie,

    Thank you for your reply.

    Thanks

    Dipu


    #API-Management
    #webMethods
    #soa


  • 6.  RE: Web services

    Posted 05/15/10 07:37 AM

    Hi All,

    Thank you for your reply. I have manged to solve the problem by modify the WSDL , server file and the client file. Now It is able to send and manipulate the soap header information.

    Dipu

    WSDL FIle

    
    <?xml version ='1.0' encoding ='UTF-8' ?>
    <definitions name='SayHello' targetNamespace='urn:SayHello'
    xmlns:tns='urn:SayHello'
    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
    xmlns:xsd='http://www.w3.org/2001/XMLSchema'
    xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
    xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
    xmlns='http://schemas.xmlsoap.org/wsdl/'>
    
    <message name='getHelloRequest'>
    <part name='name' type='xsd:string'/>
    </message>
    
    <message name='validateRequest'>
    <part name='username' type='xsd:string'/>
    <part name='password' type='xsd:string'/>
    </message>
    
    <message name='validateResponse'>
    <part name='testReturn' type='xsd:string'/>
    </message>
    
    <message name='getHelloResponse'>
    <part name='Result' type='xsd:string'/>
    </message>
    
    <portType name='SayHelloPortType'>
    <operation name='getHello'>
    <input message='tns:getHelloRequest'/>
    <output message='tns:getHelloResponse'/>
    </operation>
    <operation name='validate'>
    <input message='tns:validateRequest'/>
    <output message='tns:validateResponse'/>
    </operation>
    </portType>
    
    <binding name='SayHelloBinding' type='tns:SayHelloPortType'>
    <soap:binding style='rpc'
    transport='http://schemas.xmlsoap.org/soap/http'/>
    <operation name='getHello'>
    <soap:operation soapAction='urn:SayHello#getQuote'/>
    <input>
    <soap:body use='encoded' namespace='urn:SayHello'
    encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
    <soap:body use='encoded' namespace='urn:SayHello'
    encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
    </operation>
    
    <operation name='validate'>
    <soap:operation soapAction='urn:SayHello#getQuote'/>
    <input>
    <soap:body use='encoded' namespace='urn:SayHello'
    encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
    <soap:body use='encoded' namespace='urn:SayHello'
    encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
    </operation>
    </binding>
    
    <service name='SayHelloService'>
    <port name='SayHelloPort' binding='SayHelloBinding'>
    <soap:address location='URL to your server location'/>
    </port>
    </service>
    </definitions>

    SOAP Request

    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:SayHello" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="urn:example.org/auth"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Header>
    <ns2:validate>
    <username>username</username>
    <password>password</password>
    </ns2:validate>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
    <ns1:getHello>
    <name xsi:type="xsd:string">catalog1</name>
    </ns1:getHello>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    Server file

    
    <?php 
    
    class SayHello { 
    public function getHello($inmessage) { 
    return "Hello $inmessage!"; 
    } 
    public function validate($username,$password) { 
    if($username!='username' || $password!='password'){ 
    throw new SOAPFault("Incorrect username and password combination.", 401); 
    } 
    
    } 
    
    } //end class 
    ini_set("soap.wsdl_cache_enabled", "0"); 
    $server = new SoapServer("test_class.wsdl"); 
    $server->setClass("SayHello"); 
    $server->handle(); 
    $functions=$server->getFunctions(); 
    
    ?>

    Client File

    
    <?php 
    ini_set("soap.wsdl_cache_enabled", "0"); 
    $client = new SoapClient("test_class.wsdl",array('trace' => 1 )); 
    $catalogId='catalog1'; 
    $functions=$client->__getFunctions(); 
    echo '<pre>'; 
    print_r($functions); 
    
    
    class SOAPAuth { 
    public $username; 
    public $password; 
    
    public function __construct($username, $password) { 
    $this->username = $username; 
    $this->password = $password; 
    } 
    } 
    $ns = 'http://namespace.example.com/'; 
    //Body of the Soap Header. 
    if(@$_GET['username']!='')$username    =$_GET['username'];else $username    = 'username'; 
    if(@$_GET['password']!='')$password    =$_GET['password'];else $password    = 'password'; 
    
    $auth = new SOAPAuth($username,$password); 
    $header = new SOAPHeader('urn:example.org/auth', 'validate', $auth);
    $testArr    = array('testString'=>'catalog1'); 
    try{ 
    $response=$client->__soapCall("getHello",$testArr,NULL, $header); 
    
    
    echo $client->__getLastRequest(); 
    print_r($response); 
    }catch (SOAPFault $exception) { 
    echo '<pre>'; 
    print_r($exception); 
    } 
    ?>
    

    #API-Management
    #soa
    #webMethods


  • 7.  RE: Web services

    Posted 06/10/10 05:46 PM

    Hi Dipu,

    It will be very helpful if you can mention what changed you have done to make it work.

    I am interested from WSDL, SOAP Request perspective.

    Regards,
    Hemanth


    #webMethods
    #API-Management
    #soa