This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 54928eb6a3b03c7d71d1c07e11d813f9be8798da Merge: 4b0ea93 ac5b498 Author: Michael Blow <mb...@apache.org> AuthorDate: Tue Mar 12 13:43:08 2019 -0400 Merge commit 'ac5b498' from 'stabilization-f69489' into 'master' Change-Id: Iaf16894f0628189e3d2de685f2b3f132c65baff3 .../translator/LangExpressionToPlanTranslator.java | 15 +++-- .../apache/asterix/test/common/TestExecutor.java | 58 +++++++---------- hyracks-fullstack/hyracks/hyracks-http/pom.xml | 2 - .../hyracks/http/server/FormUrlEncodedRequest.java | 76 ++++------------------ .../apache/hyracks/http/server/utils/HttpUtil.java | 12 +--- 5 files changed, 47 insertions(+), 116 deletions(-) diff --cc hyracks-fullstack/hyracks/hyracks-http/pom.xml index a0e426b,9bfbfc2..bf96e79 --- a/hyracks-fullstack/hyracks/hyracks-http/pom.xml +++ b/hyracks-fullstack/hyracks/hyracks-http/pom.xml @@@ -59,15 -58,8 +58,14 @@@ <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> - <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpcore-nio</artifactId> + <version>4.4.10</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> diff --cc hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java index 08271a6,05a7e5e..42712fd --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/FormUrlEncodedRequest.java @@@ -18,86 -18,32 +18,36 @@@ */ package org.apache.hyracks.http.server; - import java.io.IOException; + import java.nio.charset.Charset; +import java.net.InetSocketAddress; import java.util.ArrayList; - import java.util.Collections; - import java.util.HashMap; - import java.util.HashSet; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; - import java.util.Set; + import org.apache.http.client.utils.URLEncodedUtils; import org.apache.hyracks.http.api.IServletRequest; import org.apache.hyracks.http.server.utils.HttpUtil; +import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.QueryStringDecoder; - import io.netty.handler.codec.http.multipart.Attribute; - import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder; - import io.netty.handler.codec.http.multipart.InterfaceHttpData; - import io.netty.handler.codec.http.multipart.MixedAttribute; public class FormUrlEncodedRequest extends BaseRequest implements IServletRequest { - private final List<String> names; - private final List<String> values; - - public static IServletRequest create(ChannelHandlerContext ctx, FullHttpRequest request) throws IOException { - List<String> names = new ArrayList<>(); - List<String> values = new ArrayList<>(); - HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(request); - try { - List<InterfaceHttpData> bodyHttpDatas = decoder.getBodyHttpDatas(); - for (InterfaceHttpData data : bodyHttpDatas) { - if (data.getHttpDataType().equals(InterfaceHttpData.HttpDataType.Attribute)) { - Attribute attr = (MixedAttribute) data; - names.add(data.getName()); - values.add(attr.getValue()); - } - } - } finally { - decoder.destroy(); - } - public static IServletRequest create(FullHttpRequest request) { ++ public static IServletRequest create(ChannelHandlerContext ctx, FullHttpRequest request) { + Charset charset = HttpUtil.getRequestCharset(request); + Map<String, List<String>> parameters = new LinkedHashMap<>(); + URLEncodedUtils.parse(request.content().toString(charset), charset).forEach( + pair -> parameters.computeIfAbsent(pair.getName(), a -> new ArrayList<>()).add(pair.getValue())); + new QueryStringDecoder(request.uri()).parameters() + .forEach((name, value) -> parameters.computeIfAbsent(name, a -> new ArrayList<>()).addAll(value)); - return new FormUrlEncodedRequest(request, parameters); + InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress(); - return new FormUrlEncodedRequest(request, remoteAddress, new QueryStringDecoder(request.uri()).parameters(), - names, values); ++ return new FormUrlEncodedRequest(request, remoteAddress, parameters); } - protected FormUrlEncodedRequest(FullHttpRequest request, InetSocketAddress remoteAddress, - Map<String, List<String>> parameters, List<String> names, List<String> values) { - private FormUrlEncodedRequest(FullHttpRequest request, Map<String, List<String>> parameters) { - super(request, parameters); ++ private FormUrlEncodedRequest(FullHttpRequest request, InetSocketAddress remoteAddress, ++ Map<String, List<String>> parameters) { + super(request, remoteAddress, parameters); - this.names = names; - this.values = values; - } - - @Override - public String getParameter(CharSequence name) { - for (int i = 0; i < names.size(); i++) { - if (name.equals(names.get(i))) { - return values.get(i); - } - } - return HttpUtil.getParameter(parameters, name); - } - - @Override - public Set<String> getParameterNames() { - HashSet<String> paramNames = new HashSet<>(); - paramNames.addAll(parameters.keySet()); - paramNames.addAll(names); - return Collections.unmodifiableSet(paramNames); - } - - @Override - public Map<String, String> getParameters() { - HashMap<String, String> paramMap = new HashMap<>(); - paramMap.putAll(super.getParameters()); - for (int i = 0; i < names.size(); i++) { - paramMap.put(names.get(i), values.get(i)); - } - - return Collections.unmodifiableMap(paramMap); } } diff --cc hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java index 78b5096,5326019..34ca2c4 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java @@@ -77,23 -73,12 +77,13 @@@ public class HttpUtil public static String getParameter(Map<String, List<String>> parameters, CharSequence name) { List<String> parameter = parameters.get(String.valueOf(name)); - if (parameter == null) { - return null; - } else if (parameter.size() == 1) { - return parameter.get(0); - } else { - StringBuilder aString = new StringBuilder(parameter.get(0)); - for (int i = 1; i < parameter.size(); i++) { - aString.append(",").append(parameter.get(i)); - } - return aString.toString(); - } + return parameter == null ? null : String.join(",", parameter); } - public static IServletRequest toServletRequest(FullHttpRequest request) throws IOException { + public static IServletRequest toServletRequest(ChannelHandlerContext ctx, FullHttpRequest request) + throws IOException { return ContentType.APPLICATION_X_WWW_FORM_URLENCODED.equals(getContentTypeOnly(request)) - ? FormUrlEncodedRequest.create(request) : BaseRequest.create(request); + ? FormUrlEncodedRequest.create(ctx, request) : BaseRequest.create(ctx, request); } public static String getContentTypeOnly(IServletRequest request) {