better error management
authorjeff <jeff>
Thu, 19 Oct 2006 04:44:35 +0000 (04:44 +0000)
committerjeff <jeff>
Thu, 19 Oct 2006 04:44:35 +0000 (04:44 +0000)
lib/Net/Plesk.pm
lib/Net/Plesk/Response.pm

index 2b33c51..3e78963 100644 (file)
@@ -214,7 +214,13 @@ sub AUTOLOAD {
     $response;
   }
   else {
-    die $res->status_line, "\n";
+    new Net::Plesk::Response (
+      '<?xml version="1.0" encoding="UTF-8"?>'. #a lie?  probably safe
+      '<packet version="' . $self->{'version'} . '">' .
+      "<system><status>error</status><errcode>500</errcode>" .
+      "<errtext>" . $res->status_line . "</errtext></system>" .
+      "</packet>"
+    );
   }
 
 }
index 58203f7..53342d5 100644 (file)
@@ -38,13 +38,28 @@ sub new {
   bless($self, $class);
 
   my $data = shift;
-  $data =~ /^\<\?xml version=\"1.0\"\?\>(.*)$/s; 
-
-  my $xp = XML::XPath->new(xml => $1);
+  if ($data =~ /^\<\?xml version=\"1.0\"\?\>(.*)$/s){
+    $data=$1;
+  }else{
+    $data =~ s/[^\w\s]/ /g;  # yes, we lose stuff
+    $data = '<?xml version="1.0"?>' .
+      '<packet version="' . $self->{'version'} . '">' .
+      "<system><status>error</status><errcode>500</errcode>" .
+      "<errtext>Malformed Plesk response:" . $data .  "</errtext>".
+      "</system></packet>";
+  } 
+
+  my $xp = XML::XPath->new(xml => $data);
   my $nodeset = $xp->find('//result');
   foreach my $node ($nodeset->get_nodelist) {
     push @{$self->{'results'}}, XML::XPath::XMLParser::as_string($node);
   }
+  $nodeset = $xp->find('//system');
+  foreach my $node ($nodeset->get_nodelist) {
+    my $parsed = XML::XPath::XMLParser::as_string($node);
+    $parsed =~ s/\<(\/?)system\>/<$1result>/ig;
+    push @{$self->{'results'}}, $parsed;
+  }
 
   $self;
 }