@Override protected void encodeInitialLine(final ChannelBuffer buf, final HttpMessage message) throws Exception { final MappingHttpRequest request = (MappingHttpRequest) message; buf.writeBytes(request.getMethod().toString().getBytes("ASCII")); buf.writeByte(HttpUtils.SP); buf.writeBytes(request.getServicePath().getBytes("ASCII")); buf.writeByte(HttpUtils.SP); buf.writeBytes(request.getProtocolVersion().toString().getBytes("ASCII")); buf.writeBytes(HttpUtils.CRLF); }
@Override public boolean checkAccepts(final HttpRequest message) { if (message instanceof MappingHttpRequest) { final MappingHttpRequest httpRequest = (MappingHttpRequest) message; final boolean usesServicePath = Iterables.any(servicePathPrefixes, Strings.isPrefixOf(message.getUri())); final boolean noPath = message.getUri().isEmpty() || message.getUri().equals("/") || message.getUri().startsWith("/?"); if (!usesServicePath && !(noPath && resolvesByHost(message.getHeader(HttpHeaders.Names.HOST)))) { return false; } if (httpRequest.getMethod().equals(HttpMethod.POST) && !message.getHeaderNames().contains("SOAPAction")) { Map<String, String> parameters = new HashMap<String, String>(httpRequest.getParameters()); Set<String> nonQueryParameters = Sets.newHashSet(); final String query = httpRequest.getContentAsString(); for (String p : query.split("&")) { String[] splitParam = p.split("=", 2); String lhs = splitParam[0]; String rhs = splitParam.length == 2 ? splitParam[1] : null; try { if (lhs != null) lhs = new URLCodec().decode(lhs); } catch (DecoderException e) { } try { if (rhs != null) rhs = new URLCodec().decode(rhs); } catch (DecoderException e) { } parameters.put(lhs, rhs); nonQueryParameters.add(lhs); } for (RequiredQueryParams p : requiredQueryParams) { if (!parameters.containsKey(p.toString())) { return false; } } httpRequest.getParameters().putAll(parameters); httpRequest.addNonQueryParameterKeys(nonQueryParameters); } else { for (RequiredQueryParams p : requiredQueryParams) { if (!httpRequest.getParameters().containsKey(p.toString())) { return false; } } } return true; } return false; }
@Override public boolean checkAccepts(final HttpRequest message) { if (message instanceof MappingHttpRequest) { final MappingHttpRequest httpRequest = (MappingHttpRequest) message; if (httpRequest.getMethod().equals(HttpMethod.POST)) { final Map<String, String> parameters = new HashMap<String, String>(httpRequest.getParameters()); final ChannelBuffer buffer = httpRequest.getContent(); buffer.markReaderIndex(); final byte[] read = new byte[buffer.readableBytes()]; buffer.readBytes(read); final String query = new String(read); buffer.resetReaderIndex(); for (final String p : query.split("&")) { final String[] splitParam = p.split("="); String lhs = splitParam[0]; String rhs = splitParam.length == 2 ? splitParam[1] : null; try { if (lhs != null) lhs = new URLCodec().decode(lhs); } catch (final DecoderException e) { } try { if (rhs != null) rhs = new URLCodec().decode(rhs); } catch (final DecoderException e) { } parameters.put(lhs, rhs); } for (final RequiredQueryParams p : RequiredQueryParams.values()) { if (!parameters.containsKey(p.toString())) { return false; } } httpRequest.getParameters().putAll(parameters); } else { for (final RequiredQueryParams p : RequiredQueryParams.values()) { if (!httpRequest.getParameters().containsKey(p.toString())) { return false; } } } return (message.getUri().startsWith(this.servicePath) || message.getUri().startsWith(this.internalServicePath)); } return false; }