Lite.pm.diff   [plain text]


--- SOAP-Lite/lib/SOAP/Lite.pm       2006-02-13 14:49:39.000000000 -0800
+++ /tmp/Lite.pm      2006-02-15 12:21:04.000000000 -0800
@@ -1687,6 +1687,7 @@
 
 sub parts {
   my $self = shift;
+  die "SOAP::SOM->parts was broken by a CBL-local change to break a circular reference";
   if (@_) {
     $self->context->packager->parts(@_);
     return $self;
@@ -1926,7 +1927,7 @@
   }
   $self->decode_object($parsed);
   my $som = SOAP::SOM->new($parsed);
-  $som->context($self->context); # TODO - try removing this and see if it works!
+#  $som->context($self->context); # TODO - try removing this and see if it works!
   return $som;
 }

@@ -2133,25 +2134,9 @@
     my $res = {};
     $self->hrefs->{$id} = $res if defined $id;
     # Patch code introduced in 0.65 - deserializes array properly
-    # %$res = map {$self->decode_object($_)} @{$children || []}; # removed in patch
-    # Decode each element of the struct.
-    foreach my $child (@{$children || []}) {
-      my ($child_name, $child_value) = $self->decode_object($child);
-      # Store the decoded element in the struct.  If the element name is
-      # repeated, replace the previous scalar value with a new array
-      # containing both values.
-      my $prev = $res->{$child_name};
-      if (not defined $prev) {
-        # first time to see this value: use scalar
-        $res->{$child_name} = $child_value;
-      } elsif (ref $prev ne "ARRAY") {
-        # second time to see this value: convert scalar to array
-        $res->{$child_name} = [ $prev, $child_value ];
-      } else {
-        # already have an array: append to it
-        push @{$res->{$child_name}}, $child_value;
-      }
-    }
+    # ARK - this patch does not work as advertised. WebObjects WS calls
+    # are not serialized correctly. It has been backed out
+    %$res = map {$self->decode_object($_)} @{$children || []}; # removed in patch
     # End patch code
     return defined $class && $class ne 'SOAPStruct' ? bless($res => $class) : $res;
   } else {