use of org.apache.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapper in project java-chassis by ServiceComb.
the class SwaggerEnvironment method createConsumer.
public SwaggerConsumer createConsumer(Class<?> consumerIntf, Swagger swagger) {
Map<Class<?>, ContextArgumentMapperFactory> contextFactorys = SPIServiceUtils.getOrLoadSortedService(ConsumerContextArgumentMapperFactory.class).stream().collect(Collectors.toMap(ConsumerContextArgumentMapperFactory::getContextClass, Function.identity()));
ResponseMapperFactorys<ConsumerResponseMapper> consumerResponseMapperFactorys = new ResponseMapperFactorys<>(ConsumerResponseMapperFactory.class);
SwaggerOperations swaggerOperations = new SwaggerOperations(swagger);
SwaggerConsumer consumer = new SwaggerConsumer();
consumer.setConsumerIntf(consumerIntf);
for (Method consumerMethod : MethodUtils.findSwaggerMethods(consumerIntf)) {
String operationId = findOperationId(consumerMethod);
SwaggerOperation swaggerOperation = swaggerOperations.findOperation(operationId);
if (swaggerOperation == null) {
// consumer method set is bigger than contract, it's invalid
// but we need to support consumer upgrade before producer, so only log and ignore it.
LOGGER.warn("consumer method {}:{} not exist in contract.", consumerIntf.getName(), consumerMethod.getName());
continue;
}
ConsumerArgumentsMapperCreator creator = new ConsumerArgumentsMapperCreator(Json.mapper().getSerializationConfig(), contextFactorys, consumerIntf, consumerMethod, swaggerOperation);
ArgumentsMapper argsMapper = creator.createArgumentsMapper();
ConsumerResponseMapper responseMapper = consumerResponseMapperFactorys.createResponseMapper(consumerMethod.getGenericReturnType());
SwaggerConsumerOperation op = new SwaggerConsumerOperation();
op.setConsumerClass(consumerIntf);
op.setConsumerMethod(consumerMethod);
op.setSwaggerOperation(swaggerOperation);
op.setArgumentsMapper(argsMapper);
op.setResponseMapper(responseMapper);
consumer.addOperation(op);
}
return consumer;
}
use of org.apache.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapper in project incubator-servicecomb-java-chassis by apache.
the class SpringmvcConsumerResponseMapperFactory method createResponseMapper.
@Override
public ConsumerResponseMapper createResponseMapper(ResponseMapperFactorys<ConsumerResponseMapper> factorys, Type swaggerType, Type consumerType) {
Type realConsumerType = ((ParameterizedType) consumerType).getActualTypeArguments()[0];
ConsumerResponseMapper realMapper = factorys.createResponseMapper(swaggerType, realConsumerType);
return new SpringmvcConsumerResponseMapper(realMapper);
}
use of org.apache.servicecomb.swagger.invocation.response.consumer.ConsumerResponseMapper in project incubator-servicecomb-java-chassis by apache.
the class TestSpringmvcConsumerResponseMapperFactory method createResponseMapper.
@Test
public void createResponseMapper() {
Method responseEntityMethod = ReflectUtils.findMethod(this.getClass(), "responseEntity");
Method listMethod = ReflectUtils.findMethod(this.getClass(), "list");
ConsumerResponseMapper mapper = factory.createResponseMapper(factorys, listMethod.getGenericReturnType(), responseEntityMethod.getGenericReturnType());
Assert.assertThat(mapper, Matchers.instanceOf(SpringmvcConsumerResponseMapper.class));
Response response = Response.ok(Arrays.asList("a", "b"));
@SuppressWarnings("unchecked") ResponseEntity<String[]> responseEntity = (ResponseEntity<String[]>) mapper.mapResponse(response);
Assert.assertThat(responseEntity.getBody(), Matchers.arrayContaining("a", "b"));
}
Aggregations