summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjeff <jeff>2006-10-19 04:44:35 +0000
committerjeff <jeff>2006-10-19 04:44:35 +0000
commit69bf46aa820bb3378944e0646398c4f093234783 (patch)
tree7c2061b91307f86e479c4e6f7b3de895e7b32715
parent3e8bc1837343e34bac7106be458add3982fb77da (diff)
better error management
-rw-r--r--lib/Net/Plesk.pm8
-rw-r--r--lib/Net/Plesk/Response.pm21
2 files changed, 25 insertions, 4 deletions
diff --git a/lib/Net/Plesk.pm b/lib/Net/Plesk.pm
index 2b33c51..3e78963 100644
--- a/lib/Net/Plesk.pm
+++ b/lib/Net/Plesk.pm
@@ -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>"
+ );
}
}
diff --git a/lib/Net/Plesk/Response.pm b/lib/Net/Plesk/Response.pm
index 58203f7..53342d5 100644
--- a/lib/Net/Plesk/Response.pm
+++ b/lib/Net/Plesk/Response.pm
@@ -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;
}