public void testAuthorizeIngressICMPToSecurityGroups() throws SecurityException, NoSuchMethodException, IOException { Invokable<?, ?> method = Invokable.from( SecurityGroupAsyncClient.class.getMethod( "authorizeIngressICMPToSecurityGroups", String.class, int.class, int.class, Multimap.class, AccountInDomainOptions[].class)); GeneratedHttpRequest httpRequest = processor.createRequest( method, ImmutableList.<Object>of( 2, 22, 22, ImmutableMultimap.of("adrian", "group1", "adrian", "group2", "bob", "group1"))); assertRequestLineEquals(httpRequest, authorizeSecurityGroupIngress2.getRequestLine()); assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n"); assertPayloadEquals(httpRequest, null, null, false); assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class); assertSaxResponseParserClassEquals(method, null); assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class); checkFilters(httpRequest); }
public HttpResponse call() throws Exception { HttpResponse response = null; for (; ; ) { HttpRequest request = command.getCurrentRequest(); Q nativeRequest = null; try { for (HttpRequestFilter filter : request.getFilters()) { request = filter.filter(request); } checkRequestHasContentLengthOrChunkedEncoding( request, "After filtering, the request has neither chunked encoding nor content length: " + request); logger.debug("Sending request %s: %s", request.hashCode(), request.getRequestLine()); wirePayloadIfEnabled(wire, request); utils.logRequest(headerLog, request, ">>"); nativeRequest = convert(request); response = invoke(nativeRequest); logger.debug("Receiving response %s: %s", request.hashCode(), response.getStatusLine()); utils.logResponse(headerLog, response, "<<"); if (response.getPayload() != null && wire.enabled()) wire.input(response); int statusCode = response.getStatusCode(); if (statusCode >= 300) { if (shouldContinue(response)) continue; else break; } else { break; } } catch (Exception e) { IOException ioe = Throwables2.getFirstThrowableOfType(e, IOException.class); if (ioe != null) { if (ioe instanceof SSLException) { command.setException( new AuthorizationException( e.getMessage() + " connecting to " + command.getCurrentRequest().getRequestLine(), e)); break; } else if (ioRetryHandler.shouldRetryRequest(command, ioe)) { continue; } } command.setException( new HttpResponseException( e.getMessage() + " connecting to " + command.getCurrentRequest().getRequestLine(), command, null, e)); break; } finally { cleanup(nativeRequest); } } if (command.getException() != null) throw command.getException(); return response; }
public static void logRequest(Logger logger, HttpRequest request, String prefix) { if (logger.isDebugEnabled()) { logger.debug("%s %s", prefix, request.getRequestLine().toString()); for (Entry<String, String> header : request.getHeaders().entries()) { if (header.getKey() != null) logger.debug("%s %s: %s", prefix, header.getKey(), header.getValue()); } } }
public void handleError(HttpCommand command, HttpResponse response) { HttpRequest request = command.getCurrentRequest(); Exception exception = new HttpResponseException(command, response); try { VCloudError error = null; String message = null; if (response.getPayload() != null) { try { error = utils.parseErrorFromContent(request, response); if (error != null) { message = error.getMessage(); exception = new VCloudResponseException(command, response, error); } else { message = Strings2.toStringAndClose(response.getPayload().getInput()); exception = message != null ? new HttpResponseException(command, response, message) : exception; } } catch (IOException e) { } finally { response.getPayload().release(); } } message = message != null ? message : String.format("%s -> %s", request.getRequestLine(), response.getStatusLine()); switch (response.getStatusCode()) { case 400: if (error != null && ((error.getMinorErrorCode() != null && error.getMinorErrorCode() == MinorCode.BUSY_ENTITY) || (error.getMessage() != null && error.getMessage().indexOf("is not running") != -1))) exception = new IllegalStateException(message, exception); else exception = new IllegalArgumentException(message, exception); break; case 401: case 403: if (error != null && ((error.getMinorErrorCode() != null && error.getMinorErrorCode() == MinorCode.ACCESS_TO_RESOURCE_IS_FORBIDDEN) || (error.getMessage() != null && error.getMessage().indexOf("No access to entity") != -1))) exception = new ResourceNotFoundException(message, exception); else exception = new AuthorizationException(exception.getMessage(), exception); break; case 404: if (!command.getCurrentRequest().getMethod().equals("DELETE")) { String path = command.getCurrentRequest().getEndpoint().getPath(); Matcher matcher = RESOURCE_PATTERN.matcher(path); if (matcher.find()) { message = String.format("%s %s not found", matcher.group(1), matcher.group(2)); } else { message = path; } exception = new ResourceNotFoundException(message); } break; } } finally { releasePayload(response); command.setException(exception); } }
public void logRequest(Logger logger, HttpRequest request, String prefix) { if (logger.isDebugEnabled()) { logger.debug("%s %s", prefix, request.getRequestLine().toString()); logMessage(logger, request, prefix); } }