RE: ext/soap handing of header params

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I really wasn't subscribed. :)

1. I take only a very short look into the patch, but didn't understand that
it does.
I will make more careful look on next week.
Your explanations and PHP examples (tests) would be very useful.

2. __setHeaders() - can be easily implemented in PHP itself:

<?php
class CleverSoapClient extends SoapClient {
  private $headers = null;

  function __setHeaders($headers) {
    $this->headers = $headers;
  }

  function __call($function, $args) {
    return $this->__soapCall($function, $args, null, $this->headers);
  }
}

$client = new CleverSoapClient(...);
$client->__setHeaders(new SoapHeader(...));
$client->GetUser(...);
?>

I didn't test this example, but similar code worked fine.

Thanks. Dmitry.

> -----Original Message-----
> From: George Schlossnagle [mailto:george@omniti.com] 
> Sent: Saturday, March 19, 2005 00:48
> To: Adam Maccabee Trachtenberg; dmitry@php.net
> Cc: George Schlossnagle; soap@lists.php.net
> Subject: Re:  ext/soap handing of header params
> 
> 
> Here's my patch that seems to address the issue via my version of 
> solution b).  Seems to work with the Sabre API for me.  I await 
> comments and approval (from Dmitry) to commit:
> 
> http://sanni.omniti.com/soap_header.diff
> 
> 
> 
> On Mar 18, 2005, at 12:29 PM, Adam Maccabee Trachtenberg wrote:
> 
> > On Fri, 18 Mar 2005, George Schlossnagle wrote:
> >
> >> these binding.operation.input.header blocks are currently
> >> a) entering the proxy classes call prototype
> >> b) not being put into the actual soap envelope as headers 
> but as body 
> >> nodes.
> >>
> >> This is clearly broken.  As I see it one of two things 
> need to occur:
> >>
> >> a) drop the header params from the proxy class's method 
> prototype and 
> >> require they be set by hand. (ick, imho)
> >> b) have php correctly integrate them into the request as headers.
> >
> > I would prefer (b). I do a lot of (a) right now, which I don't like 
> > because it's, well, ick.
> >
> > The one redeeming quality is that once I've built up the 
> header, I can 
> > stash it someplace and ignore it. What I dislike is that I can no 
> > longer use the overloaded method syntax (because there's no 
> way to set 
> > headers, only parameters), so I'm forced to do:
> >
> > $user = $client->__soapCall('GetUser', array($params), 
> NULL, $header);
> >
> > Instead of:
> >
> > $user = $client->GetUser($params);
> >
> > (I think I can probably work around this by subclassing 
> SOAPClient and 
> > doing some __call() magic of my own, but it's not the best solution,
> > IMHO.)
> >
> > In my ideal world, I would be able to do something like:
> >
> > $client = new SOAPClient('foo.wsdl'); 
> $client->__setHeaders($headers);
> > $client->GetUser($params);
> >
> > I think trying to have ext/soap figure out what values are SOAP 
> > headers and what are SOAP parameters may require a little too much 
> > magic. (And what happens when a header and a parameter have the same
> > name?)
> >
> > Also, I generally find I set the headers once per client 
> and then make 
> > multiple client calls without modifying them, so a "set it once and 
> > forget it" method works best in this situation.
> >
> > How does this sync up with what you're thinking?
> >
> > -adam
> >
> > PS: Dimity @ Zend does almost all of the ext/soap work, but I never 
> > see him on this list.
> >
> > --
> > adam@trachtenberg.com | http://www.trachtenberg.com
> > author of o'reilly's "upgrading to php 5" and "php cookbook"
> > avoid the holiday rush, buy your copies today!
> >
> > --
> > PHP Soap Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
> George Schlossnagle
> 
> -- Prinicipal Consultant
> -- OmniTI Computer Consulting
> -- http://www.omniti.com
> 
> 

-- 
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux