improvement of URIStreamOpener::open() implementation

This commit is contained in:
Günter Obiltschnig
2016-09-29 19:06:46 +02:00
parent 07f6f77d6e
commit 4a96c934ba
2 changed files with 26 additions and 24 deletions

View File

@@ -178,4 +178,5 @@ POCO_IMPLEMENT_EXCEPTION(URISyntaxException, SyntaxException, "Bad URI syntax")
POCO_IMPLEMENT_EXCEPTION(ApplicationException, Exception, "Application exception")
POCO_IMPLEMENT_EXCEPTION(BadCastException, RuntimeException, "Bad cast exception")
} // namespace Poco

View File

@@ -65,22 +65,15 @@ std::istream* URIStreamOpener::open(const std::string& pathOrURI) const
{
return openURI(scheme, uri);
}
else
else if (scheme.length() <= 1) // could be Windows path
{
Path path;
if (path.tryParse(pathOrURI, Path::PATH_GUESS))
{
return openFile(path);
else
throw UnknownURISchemeException(pathOrURI);
}
}
}
catch (UnknownURISchemeException&)
{
throw;
}
catch (TooManyURIRedirectsException&)
{
throw;
throw UnknownURISchemeException(pathOrURI);
}
catch (URISyntaxException&)
{
@@ -105,24 +98,32 @@ std::istream* URIStreamOpener::open(const std::string& basePathOrURI, const std:
if (it != _map.end())
{
uri.resolve(pathOrURI);
scheme = uri.getScheme();
return openURI(scheme, uri);
}
else if (scheme.length() <= 1) // could be Windows path
{
Path base;
Path path;
if (base.tryParse(basePathOrURI, Path::PATH_GUESS) && path.tryParse(pathOrURI, Path::PATH_GUESS))
{
base.resolve(path);
return openFile(base);
}
}
throw UnknownURISchemeException(basePathOrURI);
}
catch (UnknownURISchemeException&)
{
throw;
}
catch (TooManyURIRedirectsException&)
{
throw;
}
catch (Exception&)
catch (URISyntaxException&)
{
Path base;
Path path;
if (base.tryParse(basePathOrURI, Path::PATH_GUESS) && path.tryParse(pathOrURI, Path::PATH_GUESS))
{
base.resolve(path);
return openFile(base);
}
else throw;
}
Path base(basePathOrURI, Path::PATH_GUESS);
Path path(pathOrURI, Path::PATH_GUESS);
base.resolve(path);
return openFile(base);
}