@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { JsRequest jsRequest; try { jsRequest = jsRequestBuilder.build(req); } catch (GadgetException e) { resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); return; } JsResponse jsResponse; try { jsResponse = jsServingPipeline.execute(jsRequest); } catch (JsException e) { resp.sendError(e.getStatusCode(), e.getMessage()); return; } emitJsResponse(jsResponse, req, resp); }
/** * Get the JS content for a request (JsUri) */ protected String getFeaturesContent(JsUri jsUri) throws GadgetException { // Inject js content, fetched from JsPipeline JsRequest jsRequest = new JsRequestBuilder(jsUriManager, featureRegistryProvider.get(jsUri.getRepository())).build(jsUri, null); JsResponse jsResponse; try { jsResponse = jsServingPipeline.execute(jsRequest); } catch (JsException e) { throw new GadgetException(Code.JS_PROCESSING_ERROR, e, e.getStatusCode()); } return jsResponse.toJsString(); }
@Test public void testJsFailure() throws Exception { registerGadgetsHandler(null); List<String> features = ImmutableList.of("rpc2"); List<String> loadedFeatures = ImmutableList.of(); Uri jsUri = Uri.parse("http://shindig.com/gadgets/js/rpc:io"); String onload = "do \"this\";"; JSONObject request = makeComplexJsRequest(features, loadedFeatures, onload, null); Capture<JsUri> captureUri = new Capture<JsUri>(); EasyMock.expect(jsUriManager.makeExternJsUri(EasyMock.capture(captureUri))).andReturn(jsUri); EasyMock.expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andThrow( new JsException(404, "not found")); replay(); RpcHandler operation = registry.getRpcHandler(request); Object responseObj = operation.execute(emptyFormItems, authContext, converter).get(); JSONObject results = new JSONObject(converter.convertToString(responseObj)); assertFalse(results.has("jsUrl")); assertEquals(HttpResponse.SC_NOT_FOUND, results.getJSONObject("error").getInt("code")); assertTrue(results.getJSONObject("error").getString("message").contains("not found")); verify(); }
@Test public void testJsFailure() throws Exception { registerGadgetsHandler(null); List<String> features = ImmutableList.of("rpc2"); List<String> loadedFeatures = ImmutableList.of(); Uri jsUri = Uri.parse("http://shindig.com/gadgets/js/rpc:io"); String onload = "do \"this\";"; JSONObject request = makeComplexJsRequest(features, loadedFeatures, onload, null); Capture<JsUri> captureUri = new Capture<JsUri>(); EasyMock.expect(jsUriManager.makeExternJsUri(EasyMock.capture(captureUri))).andReturn(jsUri); EasyMock.expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andThrow( new JsException(404, "not found")); replay(); RpcHandler operation = registry.getRpcHandler(request); Object responseObj = operation.execute(emptyFormItems, authContext, converter).get(); JSONObject results = new JSONObject(converter.convertToString(responseObj)); assertFalse(results.has("jsUrl")); assertEquals(HttpResponse.SC_NOT_FOUND, results.getJSONObject("error").getInt("code")); assertTrue(results.getJSONObject("error").getString("message").contains("not found")); verify(); }
@Test(expected = ProcessingException.class) public void testGetJsDataWithException() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("unknown"); Uri resUri = Uri.parse("http://server.com/gadgets/js/foo"); Capture<JsUri> uriCapture = new Capture<JsUri>(); expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andThrow( new JsException(404, "error")); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, null); expect(request.getOnload()).andStubReturn("do this"); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); gadgetHandler.getJs(request); }
@Test(expected = ProcessingException.class) public void testGetJsDataWithException() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("unknown"); Uri resUri = Uri.parse("http://server.com/gadgets/js/foo"); Capture<JsUri> uriCapture = new Capture<JsUri>(); expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andThrow( new JsException(404, "error")); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, null); expect(request.getOnload()).andStubReturn("do this"); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); gadgetHandler.getJs(request); }
expect(jsServingPipeline.execute(EasyMock.<JsRequest>anyObject())).andReturn(builder.build()); } catch (JsException e) { throw new RuntimeException("Should not fail here");
expect(jsServingPipeline.execute(EasyMock.<JsRequest>anyObject())).andReturn(builder.build()); } catch (JsException e) { throw new RuntimeException("Should not fail here");
@Test public void testJsData() throws Exception { registerGadgetsHandler(null); List<String> features = ImmutableList.of("rpc", "io"); List<String> loadedFeatures = ImmutableList.of("rpc"); Uri jsUri = Uri.parse("http://shindig.com/gadgets/js/rpc:io"); String onload = "do \"this\";"; String repository = "v01"; JSONObject request = makeComplexJsRequest(features, loadedFeatures, onload, repository); Capture<JsUri> captureUri = new Capture<JsUri>(); EasyMock.expect(jsUriManager.makeExternJsUri(EasyMock.capture(captureUri))).andReturn(jsUri); String jsContent = "var b=\"123\";"; EasyMock.expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").build()); replay(); RpcHandler operation = registry.getRpcHandler(request); Object responseObj = operation.execute(emptyFormItems, authContext, converter).get(); JSONObject results = new JSONObject(converter.convertToString(responseObj)); assertEquals(jsUri.toString(), results.getString("jsUrl")); JsUri expectedUri = new JsUri(123, true, true, CONTAINER, GADGET1_URL, features, loadedFeatures, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, captureUri.getValue()); assertFalse(results.has("error")); assertEquals(jsContent, results.getString("jsContent")); verify(); }
@Test public void testJsData() throws Exception { registerGadgetsHandler(null); List<String> features = ImmutableList.of("rpc", "io"); List<String> loadedFeatures = ImmutableList.of("rpc"); Uri jsUri = Uri.parse("http://shindig.com/gadgets/js/rpc:io"); String onload = "do \"this\";"; String repository = "v01"; JSONObject request = makeComplexJsRequest(features, loadedFeatures, onload, repository); Capture<JsUri> captureUri = new Capture<JsUri>(); EasyMock.expect(jsUriManager.makeExternJsUri(EasyMock.capture(captureUri))).andReturn(jsUri); String jsContent = "var b=\"123\";"; EasyMock.expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").build()); replay(); RpcHandler operation = registry.getRpcHandler(request); Object responseObj = operation.execute(emptyFormItems, authContext, converter).get(); JSONObject results = new JSONObject(converter.convertToString(responseObj)); assertEquals(jsUri.toString(), results.getString("jsUrl")); JsUri expectedUri = new JsUri(123, true, true, CONTAINER, GADGET1_URL, features, loadedFeatures, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, captureUri.getValue()); assertFalse(results.has("error")); assertEquals(jsContent, results.getString("jsContent")); verify(); }
@Test public void testGetJsData() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("rpc"); Uri resUri = Uri.parse("http://server.com/gadgets/js/rpc"); Capture<JsUri> uriCapture = new Capture<JsUri>(); String jsContent = "var a;"; String onload = "do this"; String repository = "v01"; expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").setProxyCacheable(true).build()); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, repository); expect(request.getOnload()).andStubReturn(onload); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request); JsUri expectedUri = new JsUri(null, false, false, CONTAINER, FakeProcessor.SPEC_URL.toString(), features, null, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, uriCapture.getValue()); assertNull(response.getJsUrl()); assertEquals(jsContent, response.getJsContent()); assertEquals(timeSource.currentTimeMillis() + HttpUtil.getDefaultTtl() * 1000, response .getExpireTimeMs().longValue()); verify(); }
@Test public void testGetJsData() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("rpc"); Uri resUri = Uri.parse("http://server.com/gadgets/js/rpc"); Capture<JsUri> uriCapture = new Capture<JsUri>(); String jsContent = "var a;"; String onload = "do this"; String repository = "v01"; expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").setProxyCacheable(true).build()); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, repository); expect(request.getOnload()).andStubReturn(onload); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request); JsUri expectedUri = new JsUri(null, false, false, CONTAINER, FakeProcessor.SPEC_URL.toString(), features, null, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, uriCapture.getValue()); assertNull(response.getJsUrl()); assertEquals(jsContent, response.getJsContent()); assertEquals(timeSource.currentTimeMillis() + HttpUtil.getDefaultTtl() * 1000, response .getExpireTimeMs().longValue()); verify(); }
public GadgetsHandlerApi.JsResponse getJs(GadgetsHandlerApi.JsRequest request) throws ProcessingException { verifyBaseParams(request, false); Set<String> fields = beanFilter.processBeanFields(request.getFields()); JsUri jsUri = createJsUri(request); Uri servedUri = jsUriManager.makeExternJsUri(jsUri); String content = null; Long expireMs = null; if (isFieldIncluded(fields, "jsContent")) { JsResponse response; try { response = jsPipeline.execute(jsRequestBuilder.build(jsUri, servedUri.getAuthority())); } catch (JsException e) { throw new ProcessingException(e.getMessage(), e.getStatusCode()); } content = response.toJsString(); if (response.isProxyCacheable()) { expireMs = getDefaultExpiration(); } } else { expireMs = getDefaultExpiration(); } return createJsResponse(request.getUrl(), servedUri, content, fields, expireMs); }