Commit 1470a71a authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Improve error messages, especially for ambiguous input values

parent 4d0a56bd
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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;
}

+14 −5
Original line number Diff line number Diff line
@@ -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',
@@ -688,7 +688,9 @@ sub check_ambiguous_xml {
	my $xp_name  = XML::LibXML::XPathExpression->new('./itdOdvName');

	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];
@@ -704,6 +706,10 @@ sub check_ambiguous_xml {
	if ( $s_place eq 'list' ) {
		Travel::Routing::DE::EFA::Exception::Ambiguous->throw(
			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) } )
@@ -712,6 +718,9 @@ sub check_ambiguous_xml {
	if ( $s_name eq 'list' ) {
		Travel::Routing::DE::EFA::Exception::Ambiguous->throw(
			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) } )