[
https://issues.apache.org/jira/browse/TAJO-1944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15055254#comment-15055254
]
ASF GitHub Bot commented on TAJO-1944:
--------------------------------------
Github user jihoonson commented on a diff in the pull request:
https://github.com/apache/tajo/pull/876#discussion_r47455679
--- Diff:
tajo-core/src/main/java/org/apache/tajo/ws/rs/resources/outputs/RestOutputFactory.java
---
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.ws.rs.resources.outputs;
+
+import com.google.common.collect.Maps;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tajo.master.exec.NonForwardQueryResultScanner;
+import org.apache.tajo.util.ClassUtil;
+import org.apache.tajo.ws.rs.annotation.RestReturnType;
+
+import java.lang.reflect.Modifier;
+import java.util.Map;
+import java.util.Set;
+
+public class RestOutputFactory {
+ private static Log LOG = LogFactory.getLog(RestOutputFactory.class);
+ private static Map<String, String> restOutputClasses = load();
+
+ private static Map<String, String> load() {
+ Map<String, String> outputClasses = Maps.newHashMap();
+ Set<Class> restOutputClasses =
ClassUtil.findClasses(AbstractStreamingOutput.class,
"org.apache.tajo.ws.rs.resources.outputs");
+
+ for (Class eachClass : restOutputClasses) {
+ if (eachClass.isInterface() ||
+ Modifier.isAbstract(eachClass.getModifiers())) {
+ continue;
+ }
+
+ AbstractStreamingOutput streamingOutput = null;
+ try {
+ streamingOutput = (AbstractStreamingOutput)
eachClass.getDeclaredConstructor(
+ new Class[]{NonForwardQueryResultScanner.class, Integer.class,
Integer.class}).newInstance(null, 0, 0);
+ } catch (Exception e) {
+ LOG.warn(eachClass + " cannot instantiate Function class because
of " + e.getMessage(), e);
+ continue;
+ }
+ String className = streamingOutput.getClass().getCanonicalName();
+ String headerType =
streamingOutput.getClass().getAnnotation(RestReturnType.class).headerType();
+
+ if (StringUtils.isNotEmpty(headerType)) {
+ outputClasses.put(headerType, className);
+ }
+ }
+
+ return outputClasses;
+ }
+
+ public static AbstractStreamingOutput get(String headerType,
NonForwardQueryResultScanner scanner, Integer count, Integer startOffset) {
+ AbstractStreamingOutput output = null;
+ try {
+ if (restOutputClasses.containsKey(headerType)) {
+ String className = (String) restOutputClasses.get(headerType);
+ Class<?> clazz = Class.forName(className);
+ output = (AbstractStreamingOutput) clazz.getDeclaredConstructor(
+ new Class[]{NonForwardQueryResultScanner.class,
+ Integer.class, Integer.class})
+ .newInstance(scanner, count, startOffset);
+ } else {
+ output = new BinaryStreamingOutput(scanner, count, startOffset);
--- End diff --
From that point, I think it will be ok because BinaryStreamingOutput is
designed to be used for clients of other languages.
> Support text resultset for REST
> --------------------------------
>
> Key: TAJO-1944
> URL: https://issues.apache.org/jira/browse/TAJO-1944
> Project: Tajo
> Issue Type: Task
> Components: REST API
> Reporter: Jihoon Son
> Assignee: DaeMyung Kang
> Fix For: 0.11.1
>
>
> See the discussion at http://markmail.org/message/gpvzw7fcbo4rrtkt.
> Currently, our REST api returns result sets in a binary form. This makes
> users to use our REST api difficult.
> However, see another discussion at
> https://mail-archives.apache.org/mod_mbox/tajo-dev/201503.mbox/%3ccafu6yh0dgbvwqnbyw3hrp-6dvzp4fg65mnpueqqgwuoq_x_...@mail.gmail.com%3E.
> Since we plan to support other types of clients using REST api, we also need
> to support binary result sets.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)