@Override public InputStream getInputStream() { return typedData.getInputStream(); } }
@Override public <T> T parse(Context context, TypedData body, Parse<T, JsonParseOpts> parse) throws IOException { JsonParseOpts opts = parse.getOpts(); TypeToken<T> type = parse.getType(); ObjectMapper objectMapper = getObjectMapper(opts); InputStream inputStream = body.getInputStream(); if (type.equals(JSON_NODE_TYPE)) { return cast(objectMapper.readTree(inputStream)); } else { return objectMapper.readValue(inputStream, toJavaType(type, objectMapper)); } }
@Override public <T> T parse(Context context, TypedData body, Parse<T, JsonParseOpts> parse) throws IOException { if (!body.getContentType().isJson()) { return null; } JsonParseOpts opts = parse.getOpts().orElse(DefaultJsonParseOpts.INSTANCE); TypeToken<T> type = parse.getType(); ObjectMapper objectMapper = opts.getObjectMapper().orElseGet(() -> context.get(ObjectMapper.class)); InputStream inputStream = body.getInputStream(); if (type.equals(JSON_NODE_TYPE)) { return cast(objectMapper.readTree(inputStream)); } else { return objectMapper.readValue(inputStream, toJavaType(type, objectMapper)); } }
@Override public void handle(Context context) throws Exception { final Registry commandRegistry = context.join(registry); final RegistryBuilder registryBuilder = Registry.builder(); Receiver receiver = new RatpackReceiver(chain -> new DelegatingCommandDelegate(registryBuilder, commandRegistry) { @Override public void clearRegistry() { registryReference.set(null); } }); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); context.getRequest().getBody() .blockingOp(body -> receiver.execute(body.getInputStream(), outputStream)) .then(body -> { if (registryBuilder.size() > 0) { Registry newRegistry = registryBuilder.build(); registryReference.set(newRegistry); } context.getResponse().send(ContentType.RESULT.getValue(), outputStream.toByteArray()); }); } }