#
# $Id: Response.pm,v 1.11 2003/03/02 11:12:09 dsw Exp $
#
# COPYRIGHT AND LICENSE
# Copyright (c) 2001-2003, Juniper Networks, Inc.
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 1. Redistributions of source code must retain the above
# copyright notice, this list of conditions and the following
# disclaimer.
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# 3. The name of the copyright owner may not be used to
# endorse or promote products derived from this software without specific
# prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
package JUNOS::Response;
use strict;
use vars qw(@ISA $error_tag);
@ISA = qw(XML::DOM::Element);
$error_tag = "xnm:error";
use XML::DOM;
use JUNOS::Trace;
sub new
{
my($class, $self) = @_;
$self = [] unless ref $self;
bless $self, $class;
}
sub getFirstError
{
my($self) = @_;
return undef if $#$self < 0;
my $err;
if ($self->getTagName() eq $error_tag) {
$err = $self;
} else {
my $errors = $self->getElementsByTagName($error_tag);
return undef unless defined $errors;
return undef unless $errors->getLength;
# We only really can return the first error.
$err = shift @$errors;
}
my $rc = {};
for my $kid ($err->getChildNodes) {
next unless $kid->isElementNode;
my $name = $kid->getNodeName;
my $val;
for my $baby ($kid->getChildNodes) {
$val .= $baby->getData if $baby->getNodeType == TEXT_NODE;
}
$name =~ s/^[\s\n]+//;
$name =~ s/[\s\n]+$//;
$name =~ s/-/_/g;
$val =~ s/^[\s\n]+//;
$val =~ s/[\s\n]+$//;
trace("Noise", "JUNOS::Response: $name -> $val");
$rc->{ $name } .= " $val";
}
# append any extraneous 'output' tag
$rc->{message} .= $rc->{output};
$rc;
}
sub toString
{
my $self = shift;
=1= |