From 1470a71a80b3b3e1d38f812aac9451368dc90cac Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 7 Dec 2014 10:35:17 +0100 Subject: Improve error messages, especially for ambiguous input values --- bin/efa | 23 +++++++++++++---------- lib/Travel/Routing/DE/EFA.pm | 19 ++++++++++++++----- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/bin/efa b/bin/efa index 5045de7..177c170 100755 --- a/bin/efa +++ b/bin/efa @@ -49,13 +49,13 @@ sub handle_efa_exception { if ( $e->isa('Travel::Routing::DE::EFA::Exception::Setup') ) { if ( $e->message ) { printf STDERR ( - "Error: %s (option '%s'): %s\n", + "User error: %s (option '%s'): %s\n", $e->description, $e->option, $e->message ); } else { printf STDERR ( - "Error: %s (option '%s', got '%s', want '%s')\n", + "User error: %s (option '%s', got '%s', want '%s')\n", $e->description, $e->option, $e->have, $e->want ); } @@ -63,27 +63,30 @@ sub handle_efa_exception { exit 1; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Net') ) { - printf STDERR ( "Error: %s: %s\n", $e->description, - $e->http_response->as_string ); + printf STDERR ( + "Network error: %s: %s\n", + $e->description, $e->http_response->as_string + ); exit 2; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::NoData') ) { - printf STDERR ( "Error: %s\n", $e->description ); + printf STDERR ( "Backend rror: %s\n", $e->description ); exit 3; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Ambiguous') ) { printf STDERR ( - "Error: %s for key %s. Specify one of %s\n", - $e->description, $e->post_key, $e->possibilities + "Backend error: The %s '%s' is ambiguous. Try one of %s\n", + $e->post_key, $e->post_value,, $e->possibilities ); exit 4; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Other') ) { - printf STDERR ( "Error: %s: %s\n", $e->description, $e->message ); + printf STDERR ( "Backend error: %s: %s\n", $e->description, + $e->message ); exit 5; } - printf STDERR ( "Uncaught exception: %s\n%s", ref($e), $e->trace ); + printf STDERR ( "Unknown error: %s\n%s", ref($e), $e->trace ); exit 10; } @@ -235,7 +238,7 @@ if ( $opt->{exclude} ) { } if ( $opt->{service} ) { - my $service = first { lc($_->{shortname}) eq lc($opt->{service}) } + my $service = first { lc( $_->{shortname} ) eq lc( $opt->{service} ) } Travel::Routing::DE::EFA::get_efa_urls(); if ( not $service ) { printf STDERR ( diff --git a/lib/Travel/Routing/DE/EFA.pm b/lib/Travel/Routing/DE/EFA.pm index 53d5d22..357e35b 100644 --- a/lib/Travel/Routing/DE/EFA.pm +++ b/lib/Travel/Routing/DE/EFA.pm @@ -31,7 +31,7 @@ use Exception::Class ( 'Travel::Routing::DE::EFA::Exception::Ambiguous' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'ambiguous input', - fields => [ 'post_key', 'possibilities' ], + fields => [ 'post_key', 'post_value', 'possibilities' ], }, 'Travel::Routing::DE::EFA::Exception::Other' => { isa => 'Travel::Routing::DE::EFA::Exception', @@ -687,8 +687,10 @@ sub check_ambiguous_xml { my $xp_place = XML::LibXML::XPathExpression->new('./itdOdvPlace'); my $xp_name = XML::LibXML::XPathExpression->new('./itdOdvName'); - my $xp_place_elem = XML::LibXML::XPathExpression->new('./odvPlaceElem'); - my $xp_name_elem = XML::LibXML::XPathExpression->new('./odvNameElem'); + my $xp_place_elem = XML::LibXML::XPathExpression->new('./odvPlaceElem'); + my $xp_place_input = XML::LibXML::XPathExpression->new('./odvPlaceInput'); + my $xp_name_elem = XML::LibXML::XPathExpression->new('./odvNameElem'); + my $xp_name_input = XML::LibXML::XPathExpression->new('./odvNameInput'); my $e_place = ( $tree->findnodes($xp_place) )[0]; my $e_name = ( $tree->findnodes($xp_name) )[0]; @@ -703,7 +705,11 @@ sub check_ambiguous_xml { if ( $s_place eq 'list' ) { Travel::Routing::DE::EFA::Exception::Ambiguous->throw( - post_key => 'place', + post_key => 'place', + post_value => decode( + 'UTF-8', + ( $e_place->findnodes($xp_place_input) )[0]->textContent + ), possibilities => join( q{ | }, map { decode( 'UTF-8', $_->textContent ) } @{ $e_place->findnodes($xp_place_elem) } ) @@ -711,7 +717,10 @@ sub check_ambiguous_xml { } if ( $s_name eq 'list' ) { Travel::Routing::DE::EFA::Exception::Ambiguous->throw( - post_key => 'name', + post_key => 'name', + post_value => decode( + 'UTF-8', ( $e_name->findnodes($xp_name_input) )[0]->textContent + ), possibilities => join( q{ | }, map { decode( 'UTF-8', $_->textContent ) } @{ $e_name->findnodes($xp_name_elem) } ) -- cgit v1.2.3