Changeset 11723


Ignore:
Timestamp:
05/18/11 21:18:08 (2 years ago)
Author:
MichaelDaum
Message:

Item10771:

  • implemented caching of SOAP responses
  • including a local version of SOAP::Lite with patches applied
  • removed XML::Parser::Lite from the SOAP::Lite package as it is seriously broken
  • new dependency on XML::Parser (the real thing) now
Location:
trunk/SoapPlugin
Files:
31 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/SoapPlugin

    • Property svn:ignore set to
      SoapPlugin.txt
      SoapPlugin.zip
      SoapPlugin.tgz
      SoapPlugin.md5
      SoapPlugin_installer.pl
      SoapPlugin.sha1
      SoapPlugin_installer
  • trunk/SoapPlugin/data/System/SoapPlugin.txt

    r8281 r11723  
    3737| depth="int" | the depth to which an XML response object should be traversed while rendering it using =format=, =header=, =footer= and =separator= | 
    3838| warn="on/off" | if switched off all error warnings will be suppressed (defaults to on) | 
    39  
     39| cache="on/off" | toggles caching on or of (default is off) | 
     40| expire="seconds/units" | indicates the time the soap response is reused from cache if available instead of fetching it from the distant endpoint; =expire= can either be specified numerically in seconds or using a date expression like "10 minutes". Valid units are \ 
     41  =s=, =second=, =seconds=, =sec=, =m=, =minute=, =minutes=, =min=, =h=, =hour=, =hours=, =d=, =day=, =days=, =w=, =week=, =weeks=, =M=, =month=, =months=, =y=, =year=, and =years=, as well as =now= and =never= | 
     42 
     43The cache can be invalidated manually by using a =refresh=soap= (or =refresh=on=) url parameter.  
    4044 
    4145Any additional parameter like for example =EMPLOYEEID= in 
     
    177181--> 
    178182|  Author(s): | Foswiki:Main/MichaelDaum | 
    179 |  Copyright: | © 2010 Michael Daum http://michaeldaumconsulting.com | 
     183|  Copyright: | © 2011 Michael Daum http://michaeldaumconsulting.com | 
    180184|  License: | [[http://www.gnu.org/licenses/gpl.html][GPL (Gnu General Public License)]] | 
    181185|  Release: | %$RELEASE% | 
    182186|  Version: | %$VERSION% | 
    183187|  Change History: | <!-- versions below in reverse order -->&nbsp; | 
     188|  18 May 2011: | implemented caching; \ 
     189                  including a local version of SOAP::Lite with patches applied; \ 
     190                  removed XML::Parser::Lite from the SOAP::Lite package as it is seriously broken; \ 
     191                  new dependency on XML::Parser (the real thing) now | 
    184192|  14 Jun 2010: | added =warn= parameter to suppress error messages; \ 
    185193                  fixed perl rookie error for default values retrieved from a SOM object | 
  • trunk/SoapPlugin/lib/Foswiki/Plugins/SoapPlugin.pm

    r8281 r11723  
    11# Plugin for Foswiki - The Free and Open Source Wiki, http://foswiki.org/ 
    22# 
    3 # SoapPlugin is Copyright (C) 2010 Michael Daum http://michaeldaumconsulting.com 
     3# SoapPlugin is Copyright (C) 2010-2011 Michael Daum http://michaeldaumconsulting.com 
    44# 
    55# This program is free software; you can redistribute it and/or 
     
    1717 
    1818our $VERSION = '$Rev$'; 
    19 our $RELEASE = '1.0'; 
     19our $RELEASE = '2.00'; 
    2020our $SHORTDESCRIPTION = 'SOAP for Foswiki'; 
    2121our $NO_PREFS_IN_TOPIC = 1; 
    22 our $baseWeb; 
    23 our $baseTopic; 
    24 our $doneInit; 
     22 
     23our $core; 
    2524 
    2625############################################################################### 
    2726sub initPlugin { 
    28   ($baseTopic, $baseWeb) = @_; 
    2927 
    30   Foswiki::Func::registerTagHandler('SOAP', \&SOAP); 
    31   Foswiki::Func::registerTagHandler('SOAPFORMAT', \&SOAPFORMAT); 
     28  Foswiki::Func::registerTagHandler('SOAP', sub { 
     29    my $session = shift; 
     30    return getCore($session)->handleSOAP(@_); 
     31  }); 
    3232 
    33   $doneInit = 0; 
     33  Foswiki::Func::registerTagHandler('SOAPFORMAT', sub { 
     34    my $session = shift; 
     35    return getCore($session)->handleSOAPFORMAT(@_); 
     36  }); 
     37 
     38  $core = undef; 
    3439  return 1; 
    3540} 
    3641 
    3742############################################################################### 
    38 sub finishPlugin { 
    39   return unless $doneInit; 
     43sub getCore { 
    4044 
    41   require Foswiki::Plugins::SoapPlugin::Core; 
    42   Foswiki::Plugins::SoapPlugin::Core::finish(); 
    43 } 
     45  unless ($core) { 
     46    require Foswiki::Plugins::SoapPlugin::Core; 
     47    $core = new Foswiki::Plugins::SoapPlugin::Core(@_); 
     48  } 
    4449 
    45 ############################################################################### 
    46 sub init { 
    47   return if $doneInit; 
    48  
    49   $doneInit = 1; 
    50  
    51   require Foswiki::Plugins::SoapPlugin::Core; 
    52   Foswiki::Plugins::SoapPlugin::Core::init($baseWeb, $baseTopic); 
    53 } 
    54  
    55 ############################################################################### 
    56 sub SOAP { 
    57   init(); 
    58   return Foswiki::Plugins::SoapPlugin::Core::handleSOAP(@_); 
    59 } 
    60  
    61 ############################################################################### 
    62 sub SOAPFORMAT { 
    63   init(); 
    64   return Foswiki::Plugins::SoapPlugin::Core::handleSOAPFORMAT(@_); 
     50  return $core; 
    6551} 
    6652 
  • trunk/SoapPlugin/lib/Foswiki/Plugins/SoapPlugin/Client.pm

    r8281 r11723  
    11# Plugin for Foswiki - The Free and Open Source Wiki, http://foswiki.org/ 
    22#  
    3 # SoapPlugin is Copyright (C) 2010 Michael Daum http://michaeldaumconsulting.com 
     3# SoapPlugin is Copyright (C) 2010-2011 Michael Daum http://michaeldaumconsulting.com 
    44# 
    55# This program is free software; you can redistribute it and/or 
     
    2121use Error qw( :try ); 
    2222use SOAP::Lite;# +trace => ['debug'];  
     23use Cache::FileCache (); 
     24 
    2325use constant DEBUG => 0; # toggle me 
     26use constant DEFAULT_EXPIRE => 86400; # 24h 
    2427 
    2528use vars qw($currentClient); 
     
    5457 
    5558  bless($this, $class); 
     59 
     60  my $cacheDir = Foswiki::Func::getWorkArea("SoapPlugin")."/".$this->{id}; 
     61  mkdir $cacheDir unless -d $cacheDir; 
     62 
     63  writeDebug("cacheDir=$cacheDir"); 
     64  $this->{cache} = Cache::FileCache->new({ 
     65    cache_root => $cacheDir, 
     66    default_expires_in => DEFAULT_EXPIRE, 
     67    } 
     68  ); 
    5669 
    5770  return $this; 
     
    8194    $this->{soap}->on_fault(\&onFaultHandler); 
    8295 
     96 
    8397    foreach my $ns ($this->{namespaces}) { 
    8498      next unless $ns; 
     
    105119  my ($soap, $response) = @_; 
    106120 
    107   writeDebug("called onFaultHandler"); 
     121  writeDebug("called onFaultHandler()"); 
     122 
     123  return if $soap->{_insideOnFaultHandler}; 
     124  $soap->{_insideOnFaultHandler} = 1; 
     125 
     126  unless (defined $response) { 
     127    writeDebug("got a transport error"); 
     128    #writeDebug($soap->transport->http_response->content); 
     129    die($soap->transport->status); 
     130  } 
    108131 
    109132  if (ref $response) { 
    110133    return $response; 
    111134  } else { 
    112     writeDebug("got a transport error"); 
    113     die($soap->transport->status); 
    114   } 
     135    writeDebug("Error: $response"); 
     136    die $response; 
     137  } 
     138 
    115139  return new SOAP::SOM; 
    116140} 
     
    145169  $method ||= $this->{defaultMethod}; 
    146170  writeDebug("called call($method)"); 
     171 
     172  my $som; 
     173  my $error; 
     174 
     175  my $expire = $params->{expire} || $params->{cache}; 
     176  my $useCache = Foswiki::Func::isTrue($params->{cache}, 0); 
     177 
     178  my $cacheKey; 
     179 
     180  if ($useCache) { 
     181    $cacheKey = $this->_cacheKey($method, $params); 
     182 
     183    my $query = Foswiki::Func::getCgiQuery(); 
     184    my $refresh = $query->param("refresh"); 
     185    if (defined($refresh) && ($refresh =~ /^(on|soap)$/)) { 
     186      writeDebug("refreshing soap cache"); 
     187      $this->_cacheRemove($cacheKey); 
     188    } else { 
     189      $som = $this->_cacheGet($cacheKey); 
     190    } 
     191 
     192    if ($som) { 
     193      writeDebug("found in cache"); 
     194      return ($som, $error); 
     195    } 
     196  } else { 
     197    writeDebug("not using caching"); 
     198  } 
     199 
    147200  $currentClient = $this; 
    148201 
     
    179232    ); 
    180233 
    181   my $som; 
    182   my $error; 
    183  
    184234  $method = SOAP::Data->name($method); 
    185235 
     
    189239 
    190240  try { 
     241    writeDebug("calling soap"); 
    191242    $som = $this->soap->call($method, @params); 
    192243    writeDebug("success"); 
     244    $this->_cacheSet($cacheKey, $expire, $som) if $useCache; 
     245 
    193246  } catch Error::Simple with { 
    194247    writeDebug("error"); 
     
    206259} 
    207260 
     261sub clearCache { 
     262  my $this = shift; 
     263  my $cache = $this->{cache}; 
     264  return unless defined $cache; 
     265 
     266  writeCmisDebug("clearing cache"); 
     267  return $cache->clear(@_); 
     268} 
     269sub purgeCache { 
     270  my $this = shift; 
     271  my $cache = $this->{cache}; 
     272  return unless defined $cache; 
     273 
     274  return $cache->purge(@_); 
     275} 
     276 
     277# internal cache layer 
     278sub _cacheGet { 
     279  my $this = shift; 
     280  my $key = shift; 
     281 
     282  my $cache = $this->{cache}; 
     283  return unless defined $cache; 
     284 
     285  my $val = $cache->get($key, @_); 
     286 
     287  return unless $val; 
     288 
     289  $val = _untaint($val); 
     290 
     291  my $som = SOAP::Deserializer->deserialize($val); 
     292  $som->context($this->soap); 
     293 
     294  $som->{_foswiki_content} = $val; # trick in the orig content 
     295 
     296  return $som; 
     297} 
     298 
     299sub _cacheSet { 
     300  my $this = shift; 
     301  my $key = shift; 
     302  my $expire = shift; 
     303  my $som = shift; 
     304 
     305  $expire = DEFAULT_EXPIRE unless defined $expire; 
     306 
     307  my $cache = $this->{cache}; 
     308  return unless defined $cache; 
     309 
     310  my $val = _untaint($som->context->transport->http_response->content); 
     311  return $cache->set($key, $val, $expire); 
     312} 
     313 
     314sub _cacheRemove { 
     315  my $this = shift; 
     316  my $key = shift; 
     317 
     318  my $cache = $this->{cache}; 
     319  return unless defined $cache; 
     320 
     321  return $cache->remove($key, @_); 
     322} 
     323 
     324sub _cacheKey { 
     325  my ($this, $method, $params) = @_; 
     326  return _untaint($method.'-'.$params->stringify); 
     327} 
     328 
     329sub _untaint { 
     330  my $content = shift; 
     331  if (defined $content && $content =~ /^(.*)$/s) { 
     332    $content = $1; 
     333  } 
     334  return $content; 
     335} 
     336 
     337 
    2083381; 
  • trunk/SoapPlugin/lib/Foswiki/Plugins/SoapPlugin/Core.pm

    r8281 r11723  
    11# Plugin for Foswiki - The Free and Open Source Wiki, http://foswiki.org/ 
    22# 
    3 # SoapPlugin is Copyright (C) 2010 Michael Daum http://michaeldaumconsulting.com 
     3# SoapPlugin is Copyright (C) 2010-2011 Michael Daum http://michaeldaumconsulting.com 
    44# 
    55# This program is free software; you can redistribute it and/or 
     
    1919use Foswiki::Plugins (); 
    2020use Foswiki::Plugins::SoapPlugin::Client(); 
    21 use Unicode::MapUTF8 (); 
    22  
    23 our $baseWeb; 
    24 our $baseTopic; 
    25 our %clients; 
    26 our %knownSoms; 
    2721 
    2822use constant DEBUG => 0; # toggle me 
    2923#use Data::Dumper (); 
    3024 
    31 ############################################################################### 
     25############################################################################## 
     26sub new { 
     27  my ($class, $session) = @_; 
     28 
     29  my $this = bless({ 
     30    session => $session, 
     31  }, $class); 
     32 
     33  foreach my $desc (@{$Foswiki::cfg{SoapPlugin}{Clients}}) { 
     34    $this->createClient($desc); 
     35  } 
     36   
     37  return $this; 
     38} 
     39 
     40############################################################################### 
     41sub createClient { 
     42  my ($this, $desc) = @_; 
     43 
     44  my $client = new Foswiki::Plugins::SoapPlugin::Client(%$desc); 
     45  writeDebug("created client $client->{id}"); 
     46 
     47  return $this->client($client->{id}, $client); 
     48} 
     49 
     50############################################################################### 
     51sub client { 
     52  my ($this, $key, $value) = @_; 
     53 
     54  $this->{clients}{$key} = $value if defined $value; 
     55  return $this->{clients}{$key}; 
     56} 
     57 
     58############################################################################### 
     59sub handleSOAP { 
     60  my ($this, $params, $theTopic, $theWeb) = @_; 
     61 
     62  writeDebug("called handleSOAP()"); 
     63   
     64  my $theClient = $params->{_DEFAULT} || $params->{client} || ''; 
     65  normalizeParams($params); 
     66 
     67  my $client = $this->client($theClient); 
     68  return inlineError("unknown client '$theClient'") unless $client; 
     69   
     70  my $method = $params->{method} || $client->{defaultMethod}; 
     71  return inlineError("no method") unless $method; 
     72 
     73  my ($som, $error) = $client->call($method, $params); 
     74  $error ||= ''; 
     75 
     76  return inlineError("Error during SOAP call $error") unless $som; 
     77 
     78  my $theId = $params->{id}; 
     79  $this->{knownSoms}{$theId} = $som if $theId; 
     80 
     81  return '' if defined $theId &&  
     82    !$params->{format} && 
     83    !$params->{verbatim}; 
     84 
     85  return formatResult($som, $params); 
     86} 
     87 
     88############################################################################### 
     89sub handleSOAPFORMAT { 
     90  my ($this, $params, $theTopic, $theWeb) = @_; 
     91 
     92  normalizeParams($params); 
     93 
     94  writeDebug("called handleSOAPFORMAT()"); 
     95  my $theId = $params->{_DEFAULT} || $params->{id}; 
     96 
     97  unless ($theId) { 
     98    return '' if $params->{warn} eq 'off'; 
     99    return inlineError("Error: no id"); 
     100  } 
     101 
     102  my $som = $this->{knownSoms}{$theId}; 
     103 
     104  unless ($som) { 
     105    return '' if $params->{warn} eq 'off'; 
     106    return inlineError("Error: unknown som id '$theId'"); 
     107  } 
     108 
     109  return formatResult($som, $params); 
     110} 
     111 
     112 
     113############################################################################### 
     114# static 
    32115sub writeDebug { 
    33116  print STDERR "SoapPlugin::Core - $_[0]\n" if DEBUG; 
     
    35118 
    36119############################################################################## 
    37 sub init { 
    38   ($baseWeb, $baseTopic) = @_; 
    39  
    40   writeDebug("called init"); 
    41  
    42   foreach my $desc (@{$Foswiki::cfg{SoapPlugin}{Clients}}) { 
    43     my $client = new Foswiki::Plugins::SoapPlugin::Client(%$desc); 
    44     $clients{$client->{id}} = $client; 
    45     writeDebug("created client $client->{id}"); 
    46   } 
    47 } 
    48  
    49 ############################################################################## 
    50 sub finish { 
    51   undef %clients; 
    52   undef %knownSoms; 
    53 } 
    54  
    55 ############################################################################## 
     120# static 
    56121sub inlineError { 
    57122  my $msg = shift; 
     
    61126 
    62127############################################################################### 
     128# static 
    63129sub prettyPrint { 
    64130  my $xml = shift; 
     
    80146 
    81147  if ($exit) { 
    82     return inlineError("Error linting xml: "+$output); 
     148    return inlineError("Error linting xml: ".$output); 
    83149  } 
    84150 
     
    89155 
    90156############################################################################### 
    91 sub handleSOAP { 
    92   my ($session, $params, $theTopic, $theWeb) = @_; 
    93  
    94   writeDebug("called handleSOAP()"); 
    95    
    96   my $theClient = $params->{_DEFAULT} || $params->{client} || ''; 
    97   normalizeParams($params); 
    98  
    99   my $client = $clients{$theClient}; 
    100   return inlineError("unknown client '$theClient'") unless $client; 
    101    
    102   my $method = $params->{method} || $client->{defaultMethod}; 
    103   return inlineError("no method") unless $method; 
    104  
    105   my ($som, $error) = $client->call($method, $params); 
    106   $error ||= ''; 
    107  
    108   return inlineError("Error during SOAP call $error") unless $som; 
    109  
    110   my $theId = $params->{id}; 
    111   $knownSoms{$theId} = $som if $theId; 
    112  
    113   return '' if defined $theId &&  
    114     !$params->{format} && 
    115     !$params->{verbatim}; 
    116  
    117   return formatResult($som, $params); 
    118 } 
    119  
    120 ############################################################################### 
     157# static 
    121158sub normalizeParams { 
    122159  my $params = shift; 
     
    137174 
    138175############################################################################### 
     176# static 
    139177sub formatResult { 
    140178  my ($som, $params) = @_; 
     
    142180  writeDebug("called formatResult"); 
    143181  if ($params->{raw} || $params->{verbatim}) { 
    144     my $content = $som->context->transport->http_response->content; 
     182    my $content = $som->{_foswiki_content} || $som->context->transport->http_response->content; 
    145183    return $content if $params->{raw}; 
    146184    $content = prettyPrint($content); 
     
    161199 
    162200############################################################################### 
    163 sub handleSOAPFORMAT { 
    164   my ($session, $params, $theTopic, $theWeb) = @_; 
    165  
    166   normalizeParams($params); 
    167  
    168   writeDebug("called handleSOAPFORMAT()"); 
    169   my $theId = $params->{_DEFAULT} || $params->{id}; 
    170  
    171   unless ($theId) { 
    172     return '' if $params->{warn} eq 'off'; 
    173     return inlineError("Error: no id"); 
    174   } 
    175  
    176   my $som = $knownSoms{$theId}; 
    177  
    178   unless ($som) { 
    179     return '' if $params->{warn} eq 'off'; 
    180     return inlineError("Error: unknown som id '$theId'"); 
    181   } 
    182  
    183   return formatResult($som, $params); 
    184 } 
    185  
    186 ############################################################################### 
     201# static 
    187202sub stringify { 
    188203  my ($som, $params, $data, $depth) = @_; 
     
    245260          $index++; 
    246261        } 
     262      } elsif (ref($value) eq "REF") { 
     263        push @values, ref($$value); 
    247264      } else { 
    248265        push @values, ref($value); 
     
    261278 
    262279############################################################################### 
     280# static 
     281sub fromUtf8 { 
     282  my $string = shift; 
     283 
     284  my $charset = $Foswiki::cfg{Site}{CharSet}; 
     285  return $string if $charset =~ /^utf-?8$/i; 
     286 
     287  if ($] < 5.008) { 
     288 
     289    # use Unicode::MapUTF8 for Perl older than 5.8 
     290    require Unicode::MapUTF8; 
     291    if (Unicode::MapUTF8::utf8_supported_charset($charset)) { 
     292      return Unicode::MapUTF8::from_utf8({ -string => $string, -charset => $charset }); 
     293    } else { 
     294      print STDERR "Warning: Conversion from $charset no supported, ' . 'or name not recognised - check perldoc Unicode::MapUTF8\n"; 
     295      return $string; 
     296    } 
     297  } else { 
     298 
     299    # good Perl version, just use Encode 
     300    require Encode; 
     301    import Encode; 
     302    my $encoding = Encode::resolve_alias($charset); 
     303    if (not $encoding) { 
     304      print STDERR "Warning: Conversion to $charset not supported, or name not recognised - check 'perldoc Encode::Supported'\n"; 
     305      return $string; 
     306    } else { 
     307 
     308      # converts to $charset, generating HTML NCR's when needed 
     309      my $octets = $string; 
     310      $octets = Encode::decode('utf-8', $string) unless utf8::is_utf8($string); 
     311      return Encode::encode($encoding, $octets, 0);#&Encode::FB_HTMLCREF()); 
     312    } 
     313  } 
     314} 
     315 
     316############################################################################### 
     317# static 
    263318sub toUtf8 { 
    264   my $text = shift; 
    265  
    266   $text = Unicode::MapUTF8::to_utf8(-string=>$text, -charset=>$Foswiki::cfg{Site}{CharSet}) 
    267     if $Foswiki::cfg{Site}{CharSet} !~ /^utf-?8$/i; 
    268  
    269   return $text; 
    270 } 
    271  
    272 ############################################################################### 
    273 sub fromUtf8 { 
    274   my $text = shift; 
    275  
    276   $text = Unicode::MapUTF8::from_utf8(-string=>$text, -charset=>$Foswiki::cfg{Site}{CharSet}) 
    277     if $Foswiki::cfg{Site}{CharSet} !~ /^utf-?8$/i; 
    278  
    279   return $text; 
    280 } 
    281  
    282  
     319  my $string = shift; 
     320 
     321  my $charset = $Foswiki::cfg{Site}{CharSet}; 
     322  return $string if $charset =~ /^utf-?8$/i; 
     323 
     324  if ($] < 5.008) { 
     325 
     326    # use Unicode::MapUTF8 for Perl older than 5.8 
     327    require Unicode::MapUTF8; 
     328    if (Unicode::MapUTF8::utf8_supported_charset($charset)) { 
     329      return Unicode::MapUTF8::to_utf8({ -string => $string, -charset => $charset }); 
     330    } else { 
     331      print STDERR "Warning: Conversion from $charset no supported, or name not recognised - check 'perldoc Unicode::MapUTF8'\n"; 
     332      return $string; 
     333    } 
     334  } else { 
     335 
     336    # good Perl version, just use Encode 
     337    require Encode; 
     338    import Encode; 
     339    my $encoding = Encode::resolve_alias($charset); 
     340    if (not $encoding) { 
     341      print STDERR "Warning: Conversion to $charset not supported, or name not recognised - check 'perldoc Encode::Supported'\n"; 
     342      return undef; 
     343    } else { 
     344      my $octets = Encode::decode($encoding, $string, &Encode::FB_PERLQQ()); 
     345      $octets = Encode::encode('utf-8', $octets) unless utf8::is_utf8($octets); 
     346      return $octets; 
     347    } 
     348  } 
     349} 
    2833501; 
    284351 
  • trunk/SoapPlugin/lib/Foswiki/Plugins/SoapPlugin/DEPENDENCIES

    r6790 r11723  
    1 SOAP::Lite,>=0.71,CPAN,Required. install from CPAN 
    2 libxml2,>=2.7.5,,Required. 
    3 Unicode::MapUTF8,>=1.11,cpan,Required.  
     1XML::Parser,>=2.34,CPAN,Required. install from CPAN 
     2Cache::Cache,>=1.05,CPAN,Required. install from CPAN 
     3libxml2,>=2.7.5,c,Required. 
  • trunk/SoapPlugin/lib/Foswiki/Plugins/SoapPlugin/MANIFEST

    r6759 r11723  
    44lib/Foswiki/Plugins/SoapPlugin/Core.pm 0644 
    55lib/Foswiki/Plugins/SoapPlugin.pm 0644 
     6lib/SOAP/Constants.pm 0644 
     7lib/SOAP/Lite/Deserializer/XMLSchema1999.pm 0644 
     8lib/SOAP/Lite/Deserializer/XMLSchema2001.pm 0644 
     9lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_1.pm 0644 
     10lib/SOAP/Lite/Deserializer/XMLSchemaSOAP1_2.pm 0644 
     11lib/SOAP/Lite/Packager.pm 0644 
     12lib/SOAP/Lite.pm 0644 
     13lib/SOAP/Lite/Utils.pm 0644 
     14lib/SOAP/Packager.pm 0644 
     15lib/SOAP/Test.pm 0644 
     16lib/SOAP/Transport/HTTP.pm 0644 
     17lib/SOAP/Transport/IO.pm 0644 
     18lib/SOAP/Transport/LOCAL.pm 0644 
     19lib/SOAP/Transport/LOOPBACK.pm 0644 
     20lib/SOAP/Transport/MAILTO.pm 0644 
     21lib/SOAP/Transport/POP3.pm 0644 
     22lib/SOAP/Transport/TCP.pm 0644 
     23lib/UDDI/Lite.pm 0644 
     24lib/XMLRPC/Lite.pm 0644 
     25lib/XMLRPC/Test.pm 0644 
     26lib/XMLRPC/Transport/HTTP.pm 0644 
     27lib/XMLRPC/Transport/POP3.pm 0644 
     28lib/XMLRPC/Transport/TCP.pm 0644 
     29soap-lite.patch 0644 
    630soap-transport-http.patch 0644 
Note: See TracChangeset for help on using the changeset viewer.