@Override
 public PluginTransportItem encode(CallingContext ctx, String uri) {
   try {
     Object o = getReflectionObject(ctx, uri);
     MessageDigest md = MessageDigest.getInstance("MD5");
     PluginTransportItem item = new PluginTransportItem();
     item.setContent(JacksonUtil.bytesJsonFromObject(o));
     md.update(item.getContent());
     item.setHash(Hex.encodeHexString(md.digest()));
     item.setUri(uri);
     return item;
   } catch (NoSuchAlgorithmException e) {
     throw RaptureExceptionFactory.create(
         HttpURLConnection.HTTP_INTERNAL_ERROR, "Error encoding item", e);
   }
 }
 private PluginTransportItem encodeRaw(CallingContext context, RaptureURI uri) {
   String uriString = uri.toString();
   PluginTransportItem result = new PluginTransportItem();
   RaptureScript script = Kernel.getScript().getScript(context, uriString);
   if (script == null) return null;
   String text = script.getScript();
   result.setContent(text.getBytes(Charsets.UTF_8));
   result.setUri(uriString);
   try {
     MessageDigest md = MessageDigest.getInstance("MD5");
     md.update(text.getBytes("UTF-8"));
     result.setHash(Hex.encodeHexString(md.digest()));
   } catch (NoSuchAlgorithmException e) {
     throw RaptureExceptionFactory.create("JRE does not support MD5");
   } catch (UnsupportedEncodingException e) {
     throw RaptureExceptionFactory.create("JRE does not support UTF-8");
   }
   return result;
 }