public ProduceProcessor createProduceProcessor()

in common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessorManager.java [121:174]


  public ProduceProcessor createProduceProcessor(OperationMeta operationMeta,
      int statusCode, String accept, Class<?> serialViewClass) {
    // If no produces defined, using default processor
    ApiResponses responses = operationMeta.getSwaggerOperation().getResponses();
    ApiResponse response = responses.get(String.valueOf(statusCode));
    if (response == null || response.getContent() == null ||
        response.getContent().size() == 0) {
      return findDefaultProcessor();
    }

    // check intersection of `Accept` and `Produces`
    if (accept == null) {
      if (response.getContent().get(defaultResponseEncoding()) != null) {
        accept = defaultResponseEncoding();
      } else {
        accept = response.getContent().keySet().iterator().next();
      }
    }

    String actualAccept = null;
    for (String item : accept.split(",")) {
      ContentType contentType = ContentType.parse(item);
      if (MediaType.WILDCARD.equals(contentType.getMimeType()) ||
          MediaType.MEDIA_TYPE_WILDCARD.equals(contentType.getMimeType())) {
        if (response.getContent().get(defaultResponseEncoding()) != null) {
          actualAccept = defaultResponseEncoding();
        } else {
          actualAccept = response.getContent().keySet().iterator().next();
        }
        break;
      }
      if (response.getContent().get(contentType.getMimeType()) != null) {
        actualAccept = contentType.getMimeType();
        break;
      }
    }

    if (actualAccept == null) {
      LOGGER.warn("Operation {} do not support accept type {}", operationMeta.getSchemaQualifiedName(), accept);
      return findDefaultProcessor();
    }
    if (MediaType.APPLICATION_JSON.equals(actualAccept)) {
      return findJsonProcessorByViewClass(serialViewClass);
    }
    if (SwaggerConst.PROTOBUF_TYPE.equals(actualAccept)) {
      return new ProduceProtoBufferProcessor(operationMeta,
          operationMeta.getSchemaMeta().getSwagger(), response.getContent().get(actualAccept).getSchema());
    }
    if (MediaType.SERVER_SENT_EVENTS.equals(actualAccept)) {
      return new ProduceEventStreamProcessor();
    }
    // text plain
    return findPlainProcessorByViewClass(serialViewClass);
  }