docs: @SuppressWarnings("unchecked")
      public static ApiVersionBean unmarshallApiVersion(Map<String, Object> source) {
          if (source == null) {
              return null;
          }
          ApiVersionBean bean = new ApiVersionBean();
          bean.setVersion(asString(source.get("version")));
          bean.setStatus(asEnum(source.get("status"), ApiStatus.class));
          bean.setCreatedBy(asString(source.get("createdBy")));
          bean.setCreatedOn(asDate(source.get("createdOn")));
          bean.setModifiedBy(asString(source.get("modifiedBy")));
          bean.setModifiedOn(asDate(source.get("modifiedOn")));
          bean.setPublishedOn(asDate(source.get("publishedOn")));
          bean.setRetiredOn(asDate(source.get("retiredOn")));
          bean.setEndpoint(asString(source.get("endpoint")));
          bean.setEndpointType(asEnum(source.get("endpointType"), EndpointType.class));
          bean.setEndpointContentType(asEnum(source.get("endpointContentType"), EndpointContentType.class));
          bean.setPublicAPI(asBoolean(source.get("publicAPI")));
          bean.setDefinitionType(asEnum(source.get("definitionType"), ApiDefinitionType.class));
          bean.setParsePayload(asBool(source.get("parsePayload")));
          bean.setGateways(new HashSet<>());
          List<Map<String, Object>> gateways = (List<Map<String, Object>>) source.get("gateways");
          if (gateways != null) {
              for (Map<String, Object> gatewayMap : gateways) {
                  ApiGatewayBean gatewayBean = new ApiGatewayBean();
                  gatewayBean.setGatewayId(asString(gatewayMap.get("gatewayId")));
                  bean.getGateways().add(gatewayBean);
              }
          }
          bean.setPlans(new HashSet<>());
          List<Map<String, Object>> plans = (List<Map<String, Object>>) source.get("plans");
          if (plans != null) {
              for (Map<String, Object> planMap : plans) {
                  ApiPlanBean planBean = new ApiPlanBean();
                  planBean.setPlanId(asString(planMap.get("planId")));
                  planBean.setVersion(asString(planMap.get("version")));
                  bean.getPlans().add(planBean);
              }
          }
          Map<String, Object> endpointProperties = (Map<String, Object>) source.get("endpointProperties");
          if (endpointProperties != null) {
              bean.setEndpointProperties(new HashMap<>());
              for (Entry<String, Object> entry : endpointProperties.entrySet()) {
                  bean.getEndpointProperties().put(entry.getKey(), String.valueOf(entry.getValue()));
              }
          }
          postMarshall(bean);
          return bean;
      }