|
21 | 21 | import io.jooby.Reified; |
22 | 22 | import io.jooby.Route; |
23 | 23 | import io.jooby.Route.Handler; |
| 24 | +import io.jooby.ResponseHandler; |
24 | 25 | import io.jooby.internal.handler.KotlinJobHandler; |
25 | 26 | import io.jooby.internal.handler.SendAttachment; |
26 | 27 | import io.jooby.internal.handler.SendByteArray; |
|
46 | 47 |
|
47 | 48 | import java.io.File; |
48 | 49 | import java.io.InputStream; |
| 50 | +import java.lang.reflect.Type; |
49 | 51 | import java.nio.ByteBuffer; |
50 | 52 | import java.nio.channels.FileChannel; |
51 | 53 | import java.nio.file.Path; |
| 54 | +import java.util.List; |
52 | 55 | import java.util.Optional; |
53 | 56 | import java.util.concurrent.CompletionStage; |
54 | 57 | import java.util.concurrent.Executor; |
55 | 58 |
|
56 | 59 | public class Pipeline { |
57 | 60 |
|
58 | 61 | public static Handler compute(ClassLoader loader, Route route, ExecutionMode mode, |
59 | | - Executor executor) { |
60 | | - Class<?> type = Reified.rawType(route.getReturnType()); |
| 62 | + Executor executor, List<ResponseHandler> responseHandler) { |
| 63 | + Type returnType = route.getReturnType(); |
| 64 | + Class<?> type = Reified.rawType(returnType); |
61 | 65 | if (CompletionStage.class.isAssignableFrom(type)) { |
62 | 66 | return completableFuture(mode, route, executor); |
63 | 67 | } |
@@ -171,6 +175,14 @@ public static Handler compute(ClassLoader loader, Route route, ExecutionMode mod |
171 | 175 | return next(mode, executor, new SendByteBuf(route.getPipeline()), true); |
172 | 176 | } |
173 | 177 |
|
| 178 | + if (responseHandler != null) { |
| 179 | + return responseHandler.stream().filter(it -> it.matches(returnType)) |
| 180 | + .findFirst() |
| 181 | + .map(factory -> |
| 182 | + next(mode, executor, factory.create(route.getPipeline()), true) |
| 183 | + ) |
| 184 | + .orElseGet(() -> next(mode, executor, new DefaultHandler(route.getPipeline()), true)); |
| 185 | + } |
174 | 186 | return next(mode, executor, new DefaultHandler(route.getPipeline()), true); |
175 | 187 | } |
176 | 188 |
|
|
0 commit comments