@GET
 @Produces({"image/*", "text/*"})
 public Response getResource() {
   try {
     final PluginContext context = pluginsService.getPluginContext(pluginId);
     final String resPath = context.getResDirPath() + resource;
     final String mimeType = getMimeType(getExtension(resPath));
     final InputStream res =
         pluginsService.getLoader().getResourceAsStream(context.getSource(), resPath);
     if (res != null) {
       return Response.ok(res, mimeType).build();
     }
     return Response.status(NOT_FOUND).build();
   } catch (Exception e) {
     logger.warn(
         String.format("Failed to find the resource %s for plugin %s", resource, pluginId), e);
     return Response.status(NOT_FOUND).build();
   }
 }
  /** Bad style test :( */
  @Test
  public void testThatAnnotatedMethodInvokerIsWorkingAsExpected() throws Exception {
    CamelContext context = mock(CamelContext.class);
    Plugin plugin = new Plugin();
    PluginContext pluginContext = new PluginContext();
    pluginContext.setClassLoader(getClass().getClassLoader());
    pluginContext.setInjector(new PluginContextInjectorImpl());
    pluginContext.setPluginClass(TestAggregatorImpl.class.getName());
    final BasicMessagesSerializer serializer = new BasicMessagesSerializer();
    pluginContext.setMessagesSerializer(serializer);
    plugin.setAggregator(TestAggregatorImpl.class.getName());
    plugin.setContext(pluginContext);
    AggregationRepository repo = mock(AggregationRepository.class);
    FoundMethodProcessor proc = mock(FoundMethodProcessor.class);
    TestState state = new TestState();
    Exchange exchange = mock(Exchange.class);
    Message message = spy(new JmsMessage(mock(javax.jms.Message.class), mock(JmsBinding.class)));
    message.setBody(
        serializer.processBodyAndHeadersBeforeSend(
            state, new HashMap<String, Object>(), getSystemClassLoader()));
    when(message.getHeader(BODY_CLASS)).thenReturn(TestState.class.getName());
    when(exchange.getIn()).thenReturn(message);
    when(repo.getKeys()).thenReturn(new HashSet<>(asList("key1", "key2")));
    when(repo.get(context, "key1")).thenReturn(exchange);
    when(repo.get(context, "key2")).thenReturn(exchange);
    when(proc.appliesTo(any(Method.class), any(Annotation.class))).thenReturn(true);
    pluginContext.setAggregationRepo(repo);

    AggregatorPluginAnnotatedMethodInvoker invoker =
        new AggregatorPluginAnnotatedMethodInvoker(context, plugin, OnClientMessage.class, false);
    invoker.process(proc);

    invoker.invoke("test");

    verify(proc)
        .appliesTo(
            eq(TestAggregatorImpl.class.getMethod("onBroadcast", TestState.class)),
            any(Annotation.class));
    verify(proc)
        .appliesTo(
            eq(TestAggregatorImpl.class.getMethod("onBroadcast2", TestState.class, String.class)),
            any(Annotation.class));
    verify(aggMock, times(2)).onBroadcast(any(TestState.class));
    verify(aggMock, times(2)).onBroadcast2(any(TestState.class), eq("test"));
    verify(message, atLeast(5)).setBody(any());
    verify(repo, times(2)).get(context, "key1");
    verify(repo, times(2)).get(context, "key2");
    verify(repo, times(2)).getKeys();
    verify(repo, times(2)).add(context, "key1", exchange);
    verify(repo, times(2)).add(context, "key2", exchange);
    verifyNoMoreInteractions(aggMock, repo);
  }