public GadgetsHandlerApi.CajaResponse getCaja(GadgetsHandlerApi.CajaRequest request) throws ProcessingException { verifyBaseParams(request, true); Set<String> fields = beanFilter.processBeanFields(request.getFields()); MessageContext mc = new MessageContext(); CajoledResult result = cajaContentRewriter.rewrite(request.getUrl(), request.getContainer(), request.getMimeType(), true /* only support es53 */, request.getDebug()); String html = null; String js = null; if (!result.hasErrors && null != result.html) { html = Nodes.render(result.html); } if (!result.hasErrors && null != result.js) { StringBuilder builder = new StringBuilder(); TokenConsumer tc = request.getDebug() ? new JsPrettyPrinter(new Concatenator(builder)) : new JsMinimalPrinter(new Concatenator(builder)); RenderContext rc = new RenderContext(tc) .withAsciiOnly(true) .withEmbeddable(true); result.js.render(rc); rc.getOut().noMoreTokens(); js = builder.toString(); } // TODO(jasvir): Improve Caja responses expiration handling return createCajaResponse(request.getUrl(), html, js, convertMessages(result.messages, mc), fields, timeSource.currentTimeMillis() + specRefreshInterval); }