[ic] SOAP access to Interchange
Chris Sendall
cjs2 at admin.cam.ac.uk
Tue Apr 19 04:20:42 EDT 2005
interchange-users-bounces at icdevgroup.org wrote:
> Quoting Chris Sendall (cjs2 at admin.cam.ac.uk):
>> interchange-users-bounces at icdevgroup.org wrote:
>> global_config goes through each of the four catalogs and
>> calls config_named_catalog for each of my catalogs
>> config_named_catalog calls this block
>> eval {
>> $Vend::Cfg = $c;
>> $::Variable = $Vend::Cfg->{Variable};
>> $::Pragma = $Vend::Cfg->{Pragma};
>> Vend::Data::read_salestax();
>> Vend::Data::read_shipping();
>> open_database(1);
>> my $db;
>> close_database();
>> }
>> which sets the $::Variable hash. It seems to process the catalogs in
>> alphabetical order so at the end of global_config the variables from
>> the last of the four catalogs tutorial is set
>>
>> when soap_server is called the $::Variable->{FILE_NAME} is set to
>> tutorial value when http_soap is called this is still true
>> when http_soap sets catname to /foundcscp should it call
>> config_named_catalog?
>
> config_named_catalog is what happens at configuration time, not at
> runtime.
>
>>
>> What I find odd that the correct database is opened (foundcscp) but
>> I don't see where this is done.
>
> OK, I think I see the problem. The $::Variable and other such things
> ($::Items, etc) are not getting remapped. That means the equivalent
> of a Vend::Dispatch::open_cat() is not getting done.
>
> Try this patch to Server.pm and see if all is OK. I am unsure of what
> the effect of open_database() will be -- while I wrote the SOAP stuff
> originally I was not the last to work on it.
>
> --- /r/Server.pm 2004-07-27 19:48:35.000000000 -0500
> +++ /rt/Server.pm 2005-04-18 12:28:26.872905336 -0500
> @@ -1883,6 +1883,7 @@
> }
> else {
> #::logDebug("we have our SOAP enable, entity is $entity");
> + open_cat($Vend::Cat);
> ($Vend::SessionID, $CGI::cookiehost) = split
/:/,
> $env{SESSION_ID}; #::logDebug("Received ID=$Vend::SessionID,
> host='$CGI::cookiehost'"); $Vend::NoInterpolate
= 1
Mike
Thanks for looking at this
I needed to add use Vend::Dispatch to Server.pm
and include open_cat in the export in Dispatch.pm
However the script then hangs - (where would STDERR go at this point?)
Putting in debug
::logDebug("open_cat before if global foreground");
if($Global::Foreground) {
::logDebug("open_cat global foreground true");
my %hash;
tie %hash, 'Tie::ShadowHash',
$Global::Selector{$CGI::script_name} ;
::logDebug("open_cat after tie");
log shows that tie fails
Vend::Server:debug: variable FILE_NAME=tutorial/catalog.cfg
Vend::Server:debug: VEND Cat=foundcscp
Vend::Dispatch:debug: open_cat foundcscp
Vend::Dispatch:debug: open_cat before if global foreground
Vend::Dispatch:debug: open_cat global foreground true
I will continue investigating.
Chris
--
Chris Sendall
University of Cambridge MISD, First Floor,
Greenwich House, Madingley Rise, Madingley Road,
Cambridge, CB3 0TX.
Telephone: +44 1223 339653 Fax: +44 1223 339003
More information about the interchange-users
mailing list