Thanks for the proposal Roar: The GeoTools wiki is not restricted, we can consider setting that up as needed.
If I understand correctly the proposal is: - boolean *isOK()*: returns true for HTTP status 200 - not quite sure if you want to consider some of the other success codes such as 201 here also? - Can/should this handle redirects? - InputStream *getErrorStream()*: provides the error response content when isOK() false - Unclear what this does if isOK() true? Do you wish to throw an exception to indicate error stream is not available? - InputStream *getResponseStream()*: provides the response when isOK() is true, or throws an IOException (presumably with the contents of the error response?) Glad your proposal includes examples: - Where we would parse a ServiceException: Before and after show different logic (the first assumes failure) - Where we can't handle the error response.: Does not show use of getErrorStream() Let me try and write an example that uses both getErrorStream() and getResponseStream() to see if I understand the proposal: try { if (httpResponse.isOK()) { return ImageIOExt.readBufferedImage(httpResponse.getResponseStream()); } else { if ("application/vnd.ogc.se_xml".equalsIgnoreCase(httpResponse.getContentType())) { throw parseXMLException(httpResponse.getErrorStream()); } else if (httpResponse.getContentType().toLowerCase().startsWith("text/")){ throw parseException(httpResponse.getErrorStream()); } else { throw new IOException("Server returned error on request"); } } finally { httpResponse.dispose(); } Feedback: - This is an HTTP Request, can we just see the response code? If we had a status code isOK() becomes making a check against Arrays.asList(200,201,203); - Your ticket examples with HTTP 400 and 415 requests do not seem to be addressed here? - Tempting to document httpResponse.getContentType() as returning lowercase to avoid requiring equalsIgnoreCase() and toLowerCase() be used by all client code ever - Having two method names is difficult, and it maybe easier for users of the API if you added httpResponse.getResponseStream(boolean allowsErrorResponse) - Even better would be httpResponse.getResponseStream(int httpStatusCode ) providing you make the status code available Putting these ideas together: try { if (httpResponse.getStatus() == 200) { return ImageIOExt.readBufferedImage(httpResponse.getResponseStream()); } if (httpResponse.getStatus() == 400) { if ("application/vnd.ogc.se_xml".equals(httpResponse.getContentType())) { String message = parseXmlException(httpResponse.getErrorStream(400)); throw new HttpException(400,message); } else if (httpResponse.getContentType().startsWith("text/")){ String message = parseTextException( httpResponse.getErrorStream(400)); throw new HttpException(400,message); } } throw new HttpException(httpResponse.getStatus(),"Couldn't get image of tile: " + tile.getId()); } finally { httpResponse.dispose(); } Food for thought. -- Jody Garnett On Wed, 25 May 2022 at 00:34, Roar Brænden <roar.brenden...@gmail.com> wrote: > Hi, > > I have a Proposal for the gt-http library. More specific the HTTPResponse > interface. I followed the instructions at the Wiki page, and created a New > Page, but when I clicked Save Page I didn't get a Pull Request as the > instructions indicated. It seems like the Page was created and freely > visible. > > > https://github.com/geotools/geotools/wiki/HTTPResponse-handling-error-responses > > Could you please have a look, and maybe give some feedback? > > Best regards, > Roar Brænden > > > _______________________________________________ > GeoTools-Devel mailing list > GeoTools-Devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/geotools-devel >
_______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel