use of com.linkedin.r2.transport.common.Client in project rest.li by linkedin.
the class Bootstrap method createHttpClient.
public static Client createHttpClient(FilterChain filters, boolean restOverStream) {
HashMap<String, String> properties = new HashMap<>();
properties.put(HttpClientFactory.HTTP_PROTOCOL_VERSION, HttpProtocolVersion.HTTP_1_1.name());
final TransportClient client = new HttpClientFactory.Builder().setFilterChain(filters).build().getClient(properties);
return new TransportClientAdapter(client, restOverStream);
}
use of com.linkedin.r2.transport.common.Client in project rest.li by linkedin.
the class TestRestClientRequestBuilder method clientGeneratedStreamRequest.
//This is similar to clientGeneratedRestRequest above except that it will generate a StreamRequest instead
//of a RestRequest. Note that this will ONLY happen if either acceptResponseAttachments below is 'true' OR
//streamingAttachmentDataSources below is non-null with a size greater then 0. If both of these do not hold,
//then a StreamRequest will not be generated by the RestClient.
@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
private <T extends Request> StreamRequest clientGeneratedStreamRequest(Class<T> requestClass, ResourceMethod method, DataMap entityBody, RestClient.ContentType contentType, List<RestClient.AcceptType> acceptTypes, boolean acceptContentTypePerClient, List<Object> streamingAttachmentDataSources, boolean acceptResponseAttachments) throws URISyntaxException {
// massive setup...
Client mockClient = EasyMock.createMock(Client.class);
@SuppressWarnings({ "rawtypes" }) Request<?> mockRequest = EasyMock.createMock(requestClass);
RecordTemplate mockRecordTemplate = EasyMock.createMock(RecordTemplate.class);
@SuppressWarnings({ "rawtypes" }) RestResponseDecoder mockResponseDecoder = EasyMock.createMock(RestResponseDecoder.class);
RestliRequestOptions requestOptions = RestliRequestOptions.DEFAULT_OPTIONS;
//If there is a desire to receive response attachments, then we must use request options.
if (!acceptContentTypePerClient || acceptResponseAttachments) {
requestOptions = new RestliRequestOptions(ProtocolVersionOption.USE_LATEST_IF_AVAILABLE, null, null, contentType, acceptTypes, acceptResponseAttachments);
}
setCommonExpectations(mockRequest, method, mockResponseDecoder, requestOptions);
if (streamingAttachmentDataSources != null && streamingAttachmentDataSources.size() > 0) {
EasyMock.expect(mockRequest.getStreamingAttachments()).andReturn(streamingAttachmentDataSources).times(2);
} else {
EasyMock.expect(mockRequest.getStreamingAttachments()).andReturn(null).times(2);
}
setResourceMethodExpectations(method, mockRequest, mockRecordTemplate, entityBody);
Capture<StreamRequest> streamRequestCapture = new Capture<StreamRequest>();
EasyMock.expect(mockClient.getMetadata(new URI(HOST + SERVICE_NAME))).andReturn(Collections.<String, Object>emptyMap()).once();
mockClient.streamRequest(EasyMock.capture(streamRequestCapture), (RequestContext) EasyMock.anyObject(), (Callback<StreamResponse>) EasyMock.anyObject());
EasyMock.expectLastCall().once();
EasyMock.replay(mockClient, mockRequest, mockRecordTemplate);
// do work!
RestClient restClient;
if (acceptContentTypePerClient) {
// configuration per client
restClient = new RestClient(mockClient, HOST, contentType, acceptTypes);
} else {
// configuration per request
restClient = new RestClient(mockClient, HOST);
}
restClient.sendRequest(mockRequest);
return streamRequestCapture.getValue();
}
use of com.linkedin.r2.transport.common.Client in project rest.li by linkedin.
the class TestRestClientRequestBuilder method clientGeneratedRestRequest.
@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
private <T extends Request> RestRequest clientGeneratedRestRequest(Class<T> requestClass, ResourceMethod method, DataMap entityBody, RestClient.ContentType contentType, List<RestClient.AcceptType> acceptTypes, boolean acceptContentTypePerClient) throws URISyntaxException {
// massive setup...
Client mockClient = EasyMock.createMock(Client.class);
@SuppressWarnings({ "rawtypes" }) Request<?> mockRequest = EasyMock.createMock(requestClass);
RecordTemplate mockRecordTemplate = EasyMock.createMock(RecordTemplate.class);
@SuppressWarnings({ "rawtypes" }) RestResponseDecoder mockResponseDecoder = EasyMock.createMock(RestResponseDecoder.class);
RestliRequestOptions requestOptions = RestliRequestOptions.DEFAULT_OPTIONS;
if (!acceptContentTypePerClient) {
requestOptions = new RestliRequestOptions(ProtocolVersionOption.USE_LATEST_IF_AVAILABLE, null, null, contentType, acceptTypes, false);
}
setCommonExpectations(mockRequest, method, mockResponseDecoder, requestOptions);
EasyMock.expect(mockRequest.getStreamingAttachments()).andReturn(null).times(2);
setResourceMethodExpectations(method, mockRequest, mockRecordTemplate, entityBody);
Capture<RestRequest> restRequestCapture = new Capture<RestRequest>();
EasyMock.expect(mockClient.getMetadata(new URI(HOST + SERVICE_NAME))).andReturn(Collections.<String, Object>emptyMap()).once();
mockClient.restRequest(EasyMock.capture(restRequestCapture), (RequestContext) EasyMock.anyObject(), (Callback<RestResponse>) EasyMock.anyObject());
EasyMock.expectLastCall().once();
EasyMock.replay(mockClient, mockRequest, mockRecordTemplate);
// do work!
RestClient restClient;
if (acceptContentTypePerClient) {
// configuration per client
restClient = new RestClient(mockClient, HOST, contentType, acceptTypes);
} else {
// configuration per request
restClient = new RestClient(mockClient, HOST);
}
restClient.sendRequest(mockRequest);
return restRequestCapture.getValue();
}
use of com.linkedin.r2.transport.common.Client in project rest.li by linkedin.
the class ExampleRequestResponseGenerator method buildRequest.
private RestRequest buildRequest(Request<?> request) {
ProtocolVersion protocolVersion;
switch(_requestOptions.getProtocolVersionOption()) {
case FORCE_USE_LATEST:
protocolVersion = AllProtocolVersions.LATEST_PROTOCOL_VERSION;
break;
case USE_LATEST_IF_AVAILABLE:
protocolVersion = AllProtocolVersions.BASELINE_PROTOCOL_VERSION;
break;
case FORCE_USE_NEXT:
protocolVersion = AllProtocolVersions.NEXT_PROTOCOL_VERSION;
break;
case FORCE_USE_PREVIOUS:
protocolVersion = AllProtocolVersions.PREVIOUS_PROTOCOL_VERSION;
break;
default:
throw new IllegalArgumentException("Unsupported enum value: " + _requestOptions.getProtocolVersionOption());
}
URI uri = RestliUriBuilderUtil.createUriBuilder(request, "", protocolVersion).build();
RestRequestBuilder requestBuilder = new RestRequestBuilder(uri);
requestBuilder.setMethod(request.getMethod().getHttpMethod().name());
// unfortunately some headers get set in RestClient, and since we're not using rest client, we
// replicate that behavior here
requestBuilder.setHeader(RestConstants.HEADER_ACCEPT, RestConstants.HEADER_VALUE_APPLICATION_JSON);
requestBuilder.setHeader(RestConstants.HEADER_RESTLI_PROTOCOL_VERSION, protocolVersion.toString());
if (request.getMethod().getHttpMethod() == HttpMethod.POST) {
requestBuilder.setHeader(RestConstants.HEADER_RESTLI_REQUEST_METHOD, request.getMethod().toString());
}
if (request.getInputRecord() != null) {
requestBuilder.setHeader(RestConstants.HEADER_CONTENT_TYPE, RestConstants.HEADER_VALUE_APPLICATION_JSON);
writeEntity(request, protocolVersion, requestBuilder);
}
return requestBuilder.build();
}
use of com.linkedin.r2.transport.common.Client in project rest.li by linkedin.
the class RestLiExampleBasicClient method sendRequest.
public void sendRequest(String pathInfo, PrintWriter respWriter) {
/* Supported URLs
* /fail: just fail
* /album/<album_id>: display album
* all others: make photos, get photos, purge photos
*/
try {
if (pathInfo.equals("/fail")) {
getNonPhoto();
} else {
if (pathInfo.startsWith("/album/")) {
getAlbum(respWriter, Long.parseLong(pathInfo.substring("/album/".length())));
} else {
// this track does not make any assumption on server
// we need to create photo first, find it and clean them up
// we use both sync and async approaches for creating
final long newPhotoId = createPhoto(respWriter);
final CountDownLatch latch = new CountDownLatch(1);
createPhotoAsync(respWriter, latch, newPhotoId);
getPhoto(respWriter, newPhotoId);
findPhoto(respWriter);
partialUpdatePhoto(respWriter, newPhotoId);
// photos and albums have IDs starting from 1
getAlbumSummary(respWriter, (long) new Random().nextInt(10) + 1);
purgeAllPhotos(respWriter);
try {
latch.await();
} catch (InterruptedException e) {
respWriter.println(e.getMessage());
}
}
}
} catch (RemoteInvocationException e) {
respWriter.println("Error in example client: " + e.getMessage());
}
respWriter.flush();
}
Aggregations