code: public <B> Message<B> toCadmiumMessage(org.jgroups.Message jgMessage) throws JsonProcessingException, IOException {
      JsonParser parser = factory.createJsonParser(jgMessage.getBuffer());
      parser.nextToken(); // parse the start token for the document.
      parser.nextToken(); // parse the field name
      parser.nextToken(); // parse the start token for header.
      Header header = parser.readValueAs(Header.class);
      Class<?> bodyClass = lookupBodyClass(header);
      parser.nextToken(); // parse the end token for header.
      
      Object body = null;
      if( bodyClass == Void.class ) {
        body = null;
      }
      else {
        parser.nextToken(); // parse the start token for body.
        try {
          body = parser.readValueAs(bodyClass);
        } catch(JsonProcessingException e) {
          log.error("Failed to parse body class as "+bodyClass+" for message "+header,e);
          throw e;
        } catch(IOException e) {
          log.error("Failed to parse body class as "+bodyClass+" for message "+header,e);
          throw e;
        }
        parser.nextToken(); // the end token for body.
      }
      parser.nextToken(); // the end token for the document.
      parser.close();
      
      @SuppressWarnings("unchecked")
      Message<B> cMessage = new Message<B>(header, (B)body);
      return cMessage;
    }
docs: Deserializes the JSON content of a JGroups message into a cadmium message.
  @param jgMessage the JGroups message containing the JSON to deserialize.
  @return the deserialized cadmium message.
  @throws JsonProcessingException if the JSON was malformed.
  @throws IOException if an IO problem is encountered.