public static Type getBodyActualType(Type bodyType) { return ofNullable(bodyType).map(type -> { if (type instanceof ParameterizedType) { Class<?> bodyClass = (Class<?>) ((ParameterizedType) type).getRawType(); if (Publisher.class.isAssignableFrom(bodyClass)) { return resolveLastTypeParameter(bodyType, bodyClass); } else { return type; } } else { return type; } }).orElse(null); }
/** * Registers type adapters by implicit type. Adds one to read numbers in a {@code Map<String, * Object>} as Integers. */ static Gson create(Iterable<TypeAdapter<?>> adapters) { GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); builder.registerTypeAdapter(new TypeToken<Map<String, Object>>() {}.getType(), new DoubleToIntMapTypeAdapter()); for (TypeAdapter<?> adapter : adapters) { Type type = resolveLastTypeParameter(adapter.getClass(), TypeAdapter.class); builder.registerTypeAdapter(type, adapter); } return builder.create(); } }
private ParameterizedTypeReference<Object> getBodyActualType(Type bodyType) { return ofNullable(bodyType).map(type -> { if (type instanceof ParameterizedType) { Class<?> returnBodyType = (Class<?>) ((ParameterizedType) type) .getRawType(); if ((returnBodyType).isAssignableFrom(Publisher.class)) { return ParameterizedTypeReference .forType(resolveLastTypeParameter(bodyType, returnBodyType)); } else { return ParameterizedTypeReference.forType(type); } } else { return ParameterizedTypeReference.forType(type); } }).orElse(null); }
public static Type returnActualType(MethodMetadata methodMetadata) { return resolveLastTypeParameter(methodMetadata.returnType(), returnPublisherType(methodMetadata)); }
@Override public List<MethodMetadata> parseAndValidatateMetadata(Class<?> targetType) { List<MethodMetadata> metadatas = this.delegate.parseAndValidatateMetadata(targetType); for (MethodMetadata metadata : metadatas) { Type type = metadata.returnType(); if (type instanceof ParameterizedType && ((ParameterizedType) type).getRawType().equals(HystrixCommand.class)) { Type actualType = resolveLastTypeParameter(type, HystrixCommand.class); metadata.returnType(actualType); } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getRawType().equals(Observable.class)) { Type actualType = resolveLastTypeParameter(type, Observable.class); metadata.returnType(actualType); } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getRawType().equals(Single.class)) { Type actualType = resolveLastTypeParameter(type, Single.class); metadata.returnType(actualType); } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getRawType().equals(Completable.class)) { metadata.returnType(void.class); } } return metadatas; } }
public static WebReactiveHttpClient webClient(MethodMetadata methodMetadata, WebClient webClient) { final Type returnType = methodMetadata.returnType(); Type returnPublisherType = ((ParameterizedType) returnType).getRawType(); ParameterizedTypeReference<Object> returnActualType = ParameterizedTypeReference.forType( resolveLastTypeParameter(returnType, (Class<?>) returnPublisherType)); ParameterizedTypeReference<Object> bodyActualType = ofNullable( getBodyActualType(methodMetadata.bodyType())) .map(type -> ParameterizedTypeReference.forType(type)) .orElse(null); return new WebReactiveHttpClient(webClient, bodyActualType, returnPublisherType, returnActualType); }
@Override public List<MethodMetadata> parseAndValidatateMetadata(final Class<?> targetType) { checkNotNull(targetType, "Argument targetType must be not null"); final List<MethodMetadata> metadatas = delegate.parseAndValidatateMetadata(targetType); for (final MethodMetadata metadata : metadatas) { final Type type = metadata.returnType(); if (type instanceof ParameterizedType && ((ParameterizedType) type).getRawType().equals(Future.class)) { final Type actualType = resolveLastTypeParameter(type, Future.class); metadata.returnType(actualType); } else { throw new IllegalStateException(String.format( "Method %s of contract %s doesn't returns io.vertx.core.Future", metadata.configKey(), targetType.getSimpleName())); } } return metadatas; } }
public static WebReactiveHttpClient webClient(MethodMetadata methodMetadata, WebClient webClient) { final Type returnType = methodMetadata.returnType(); Type returnPublisherType = ((ParameterizedType) returnType).getRawType(); ParameterizedTypeReference<Object> returnActualType = ParameterizedTypeReference.forType( resolveLastTypeParameter(returnType, (Class<?>) returnPublisherType)); ParameterizedTypeReference<Object> bodyActualType = ofNullable( getBodyActualType(methodMetadata.bodyType())) .map(type -> ParameterizedTypeReference.forType(type)) .orElse(null); return new WebReactiveHttpClient(webClient, bodyActualType, rx2ToReactor(returnPublisherType), returnActualType); }
public static JettyReactiveHttpClient jettyClient( MethodMetadata methodMetadata, HttpClient httpClient, JsonFactory jsonFactory, ObjectMapper objectMapper) { final Type returnType = methodMetadata.returnType(); Class returnPublisherType = (Class)((ParameterizedType) returnType).getRawType(); Class returnActualType = getClass(resolveLastTypeParameter(returnType, returnPublisherType)); Class bodyActualType = getClass(getBodyActualType(methodMetadata.bodyType())); return new JettyReactiveHttpClient(httpClient, bodyActualType, returnPublisherType, returnActualType, jsonFactory, objectMapper.writerFor(bodyActualType), objectMapper.readerFor(returnActualType)); }
public WebReactiveHttpClient(MethodMetadata methodMetadata, WebClient webClient, ReactiveHttpRequestInterceptor requestInterceptor, ReactiveStatusHandler statusHandler, boolean decode404) { this.webClient = webClient; this.metadata = methodMetadata; this.requestInterceptor = requestInterceptor; this.statusHandler = statusHandler; this.decode404 = decode404; this.logger = new Logger(); this.methodTag = methodMetadata.configKey().substring(0, methodMetadata.configKey().indexOf('(')); Type bodyType = methodMetadata.bodyType(); bodyActualType = getBodyActualType(bodyType); final Type returnType = methodMetadata.returnType(); returnPublisherType = ((ParameterizedType) returnType).getRawType(); returnActualType = ParameterizedTypeReference.forType( resolveLastTypeParameter(returnType, (Class<?>) returnPublisherType)); }
RestTemplateFakeReactiveHttpClient(MethodMetadata methodMetadata, RestTemplate restTemplate, boolean acceptGzip) { this.restTemplate = restTemplate; this.acceptGzip = acceptGzip; ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(mapper); restTemplate.getMessageConverters().add(0, converter); final Type returnType = methodMetadata.returnType(); returnPublisherType = ((ParameterizedType) returnType).getRawType(); returnActualType = forType( resolveLastTypeParameter(returnType, (Class<?>) returnPublisherType)); }
public static JettyReactiveHttpClient jettyClient( MethodMetadata methodMetadata, HttpClient httpClient, JsonFactory jsonFactory, ObjectMapper objectMapper) { final Type returnType = methodMetadata.returnType(); Class returnPublisherType = (Class)((ParameterizedType) returnType).getRawType(); Type returnActualType = resolveLastTypeParameter(returnType, returnPublisherType); Type bodyActualType = getBodyActualType(methodMetadata.bodyType()); ObjectWriter bodyWriter = bodyActualType != null ? objectMapper.writerFor(objectMapper.constructType(bodyActualType)) : null; ObjectReader responseReader = objectMapper.readerFor(objectMapper.constructType(returnActualType)); return new JettyReactiveHttpClient(httpClient, getClass(bodyActualType), returnPublisherType, getClass(returnActualType), jsonFactory, bodyWriter, responseReader); }
public static Java11ReactiveHttpClient jettyClient( MethodMetadata methodMetadata, HttpClient httpClient, JsonFactory jsonFactory, ObjectMapper objectMapper) { final Type returnType = methodMetadata.returnType(); Class returnPublisherType = (Class)((ParameterizedType) returnType).getRawType(); Type returnActualType = resolveLastTypeParameter(returnType, returnPublisherType); Type bodyActualType = getBodyActualType(methodMetadata.bodyType()); ObjectWriter bodyWriter = bodyActualType != null ? objectMapper.writerFor(objectMapper.constructType(bodyActualType)) : null; ObjectReader responseReader = objectMapper.readerFor(objectMapper.constructType(returnActualType)); return new Java11ReactiveHttpClient(httpClient, getClass(bodyActualType), returnPublisherType, getClass(returnActualType), jsonFactory, bodyWriter, responseReader); }