From 937a09c0845abd97a9b216d6e34b5747b95ac9f5 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 12 Jan 2014 18:01:59 +0100 Subject: Add an exception class for EFA backend errors, pass provided message --- bin/efa | 4 ++-- lib/Travel/Routing/DE/VRR.pm | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/bin/efa b/bin/efa index 287ef18..5982c12 100755 --- a/bin/efa +++ b/bin/efa @@ -75,8 +75,8 @@ sub handle_efa_exception { ); exit 4; } - if ( $e->isa('Travel::Routing::DE::VRR::Exception::NoConnections') ) { - printf STDERR ( "Error: %s: %s\n", $e->description, $e->error ); + if ( $e->isa('Travel::Routing::DE::VRR::Exception::Other') ) { + printf STDERR ( "Error: %s: %s\n", $e->description, $e->message ); exit 5; } diff --git a/lib/Travel/Routing/DE/VRR.pm b/lib/Travel/Routing/DE/VRR.pm index c7193e1..603ac8b 100644 --- a/lib/Travel/Routing/DE/VRR.pm +++ b/lib/Travel/Routing/DE/VRR.pm @@ -33,9 +33,10 @@ use Exception::Class ( description => 'ambiguous input', fields => [ 'post_key', 'possibilities' ], }, - 'Travel::Routing::DE::VRR::Exception::NoConnections' => { + 'Travel::Routing::DE::VRR::Exception::Other' => { isa => 'Travel::Routing::DE::VRR::Exception', - description => 'got no connections', + description => 'EFA backend returned an error', + fields => ['message'], }, ); @@ -580,12 +581,20 @@ sub parse { my $xp_element = XML::LibXML::XPathExpression->new( '//itdItinerary/itdRouteList/itdRoute'); + my $xp_err = XML::LibXML::XPathExpression->new( + '//itdTripRequest/itdMessage[@type="error"]'); my $xp_odv = XML::LibXML::XPathExpression->new('//itdOdv'); for my $odv ( $tree->findnodes($xp_odv) ) { $self->check_ambiguous($odv); } + my $err = ( $tree->findnodes($xp_err) )[0]; + if ($err) { + Travel::Routing::DE::VRR::Exception::Other->throw( + message => $err->textContent ); + } + for my $part ( $tree->findnodes($xp_element) ) { $self->parse_part($part); } -- cgit v1.2.3