Package org.eclipse.ecf.remoteservice.client

# Class AbstractClientService

java.lang.Object
org.eclipse.ecf.remoteservice.asyncproxy.AbstractAsyncProxyRemoteService
org.eclipse.ecf.remoteservice.AbstractRemoteService
org.eclipse.ecf.remoteservice.client.AbstractClientService

All Implemented Interfaces:
  `InvocationHandler`, `IRemoteService`

Direct Known Subclasses:
  `AbstractRestClientService`, `AbstractRSAClientService`

public abstract class AbstractClientService extends AbstractRemoteService
Remote service client service. Implements `IRemoteService`.

Since:
  4.0

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected class`
`AbstractClientService.AsyncResult`
inner class implementing the asynchronous result object.
`static class`
`AbstractClientService.UriRequest`

## Nested classes/interfaces inherited from class org.eclipse.ecf.remoteservice.AbstractRemoteService

`AbstractRemoteService.AsyncArgs, AbstractRemoteService.ProxyClassLoader`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected AbstractClientContainer`
`container`
`protected RemoteServiceClientRegistration`
`registration`

### Fields inherited from class org.eclipse.ecf.remoteservice.AbstractRemoteService

`EMPTY_ARGS, futureExecutorService, futureExecutorServiceMaxThreads, iFutureExecutor`

## Constructor Summary

Constructors
Constructor
Description
`AbstractClientService(AbstractClientContainer container, RemoteServiceClientRegistration registration)`

## Method Summary

Modifier and Type
Method
Description
`org.eclipse.equinox.concurrent.future.IFuture`
`callAsync(IRemoteCall call)`
Call remote method specified by call parameter asynchronously, and immediately return `IFuture` instance.
`protected org.eclipse.equinox.concurrent.future.IFuture`
`callAsync(IRemoteCall call, IRemoteCallable callable)`
`protected void`
`callAsync(IRemoteCall call, IRemoteCallable restClientCallable, IRemoteCallListener listener)`
`void`
`callAsync(IRemoteCall call, IRemoteCallListener listener)`
Call remote method specified by call parameter asynchronously, and notify specified listener when call starts and completes.
`Object`
`callSync(IRemoteCall call)`
Call remote method specified by call parameter synchronously.
`protected AbstractClientService.UriRequest`
`createUriRequest(String endpoint, IRemoteCall call, IRemoteCallable callable)`
`void`
`fireAsync(IRemoteCall call)`
Fire remote method specified by call parameter.
`protected String`
`getCallMethodNameForProxyInvoke(Method method, Object[] args)`
`protected Object[]`
`getCallParametersForProxyInvoke(String callMethod, Method proxyMethod, Object[] args)`
`protected AbstractClientContainer`
`getClientContainer()`
`protected String[]`
`getInterfaceClassNames()`
`protected long`
`getNextRequestID()`
`protected RemoteServiceClientRegistration`
`getRegistration()`
`protected IRemoteServiceID`
`getRemoteServiceID()`
`protected IRemoteServiceReference`
`getRemoteServiceReference()`
`protected void`
`handleInvokeException(String message, Throwable e)`
`protected abstract Object`
`invokeRemoteCall(IRemoteCall call, IRemoteCallable callable)`
Invoke remote call.
`protected Object`
`invokeSync(IRemoteCall remoteCall)`
`protected String`
`prepareEndpointAddress(IRemoteCall call, IRemoteCallable callable)`
`protected IRemoteCallParameter[]`
`prepareParameters(String uri, IRemoteCall call, IRemoteCallable callable)`
`protected Object`
`processResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody)`

### Methods inherited from class org.eclipse.ecf.remoteservice.AbstractRemoteService

`addAsyncProxyClasses, addRemoteServiceProxyToProxy, callAsync, callAsync, callAsyncWithResult, callAsyncWithTimeout, callAsyncWithTimeout, callCompletableAsync, callFutureAsync, callFutureAsync, callSync, convertInterfaceNameToAsyncInterfaceName, createProxy, createProxy, createRCCE, createRCCEFailure, createRCCESuccess, createRemoteCall, dispose, findAsyncRemoteServiceProxyClass, findAsyncRemoteServiceProxyClass, getAsyncArgs, getAsyncInvokeMethodName, getAsyncRemoteCall, getCallTimeoutForProxyInvoke, getDefaultTimeout, getFutureExecutorService, getIFutureExecutor, getProxy, getProxy, getRemoteService, getRemoteServiceProxyCreator, handleInvokeSyncException, handleProxyException, invoke, invokeAsync, invokeObject, invokeReturnAsync, isAsync, isInterfaceAsync, isMethodAsync, isOSGIAsync, loadInterfaceClass, loadInterfaceClass, logWarning, setFutureExecutorService, setIFutureExecutor`

### Methods inherited from class org.eclipse.ecf.remoteservice.asyncproxy.AbstractAsyncProxyRemoteService

`callFuture, isReturnAsync`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### registration

protected RemoteServiceClientRegistration registration

### container

protected AbstractClientContainer container

## Constructor Details

### AbstractClientService

public AbstractClientService(AbstractClientContainer container, RemoteServiceClientRegistration registration)

## Method Details

### callSync

public Object callSync(IRemoteCall call) throws ECFException
Description copied from interface: `IRemoteService`
Call remote method specified by call parameter synchronously.

Parameters:
  `call` - the remote call to make
Returns:
  Object the result of the call. Will be `null` if remote provides `null` as result.
Throws:
  `ECFException` - thrown if disconnect occurs, caller not currently connected, or remote throws Exception

### callAsync

public org.eclipse.equinox.concurrent.future.IFuture callAsync(IRemoteCall call)
Description copied from interface: `IRemoteService`
Call remote method specified by call parameter asynchronously, and immediately return `IFuture` instance. Returned IFuture will not be `null`, and allows the caller to retrieve the actual resulting value from the remote call (or exception).

Specified by:
  `callAsync` in interface `IRemoteService`
Overrides:
  `callAsync` in class `AbstractRemoteService`
Parameters:
  `call` - the remote call to make. Must not be `null` .
Returns:
  IFuture the asynchronous result to allow the caller to poll for whether the result `IFuture.isDone()`, and then to `IFuture.get()` the actual result.

### callAsync

public void callAsync(IRemoteCall call, IRemoteCallListener listener)
Description copied from interface: `IRemoteService`
Call remote method specified by call parameter asynchronously, and notify specified listener when call starts and completes.

Parameters:
  `call` - the remote call to make. Must not be `null` .
  `listener` - the listener to notify when call starts and is completed. The listener will be notified via the two event types IRemoteCallStartEvent and IRemoteCallCompleteEvent. Must not be `null` .
See Also:
  - `IRemoteCallStartEvent`
  - `IRemoteCallCompleteEvent`

### fireAsync

public void fireAsync(IRemoteCall call) throws ECFException
Description copied from interface: `IRemoteService`
Fire remote method specified by call parameter. The remote method will be invoked as a result of asynchronous message send, but no failure/exception information will be returned, and no result will be returned

Parameters:
  `call` - the remote call to make. Must not be `null` .
Throws:
  `ECFException` - if caller not currently connected

### invokeSync

protected Object invokeSync(IRemoteCall remoteCall) throws ECFException

Overrides:
  `invokeSync` in class `AbstractRemoteService`
Throws:
  `ECFException`

### getCallParametersForProxyInvoke

protected Object[] getCallParametersForProxyInvoke(String callMethod, Method proxyMethod, Object[] args)

Overrides:
  `getCallParametersForProxyInvoke` in class `AbstractRemoteService`

### getCallMethodNameForProxyInvoke

protected String getCallMethodNameForProxyInvoke(Method method, Object[] args)

Overrides:
  `getCallMethodNameForProxyInvoke` in class `AbstractRemoteService`

### getNextRequestID

protected long getNextRequestID()

### callAsync

protected void callAsync(IRemoteCall call, IRemoteCallable restClientCallable, IRemoteCallListener listener)

### callAsync

protected org.eclipse.equinox.concurrent.future.IFuture callAsync(IRemoteCall call, IRemoteCallable callable)

### handleInvokeException

protected void handleInvokeException(String message, Throwable e) throws ECFException

Throws:
  `ECFException`

### getClientContainer

protected AbstractClientContainer getClientContainer()

### getRegistration

protected RemoteServiceClientRegistration getRegistration()

### prepareEndpointAddress

protected String prepareEndpointAddress(IRemoteCall call, IRemoteCallable callable)

### prepareParameters

protected IRemoteCallParameter[] prepareParameters(String uri, IRemoteCall call, IRemoteCallable callable) throws NotSerializableException

Throws:
  `NotSerializableException`

### processResponse

protected Object processResponse(String uri, IRemoteCall call, IRemoteCallable callable, Map responseHeaders, byte[] responseBody) throws NotSerializableException

Parameters:
  `uri` - uri
  `call` - call
  `callable` - callable
  `responseHeaders` - responseHeaders
  `responseBody` - responseBody
Returns:
  Object processed response
Throws:
  `NotSerializableException` - if response cannot be deserialized
Since:
  8.0

### getRemoteServiceID

protected IRemoteServiceID getRemoteServiceID()

Specified by:
  `getRemoteServiceID` in class `AbstractRemoteService`

### getRemoteServiceReference

protected IRemoteServiceReference getRemoteServiceReference()

Specified by:
  `getRemoteServiceReference` in class `AbstractRemoteService`

### getInterfaceClassNames

protected String[] getInterfaceClassNames()

Specified by:
  `getInterfaceClassNames` in class `AbstractRemoteService`

### createUriRequest

protected AbstractClientService.UriRequest createUriRequest(String endpoint, IRemoteCall call, IRemoteCallable callable)

Parameters:
  `endpoint` - endpoint
  `call` - call
  `callable` - callable
Returns:
  UriRequest new UriRequest
Since:
  8.5

### invokeRemoteCall

protected abstract Object invokeRemoteCall(IRemoteCall call, IRemoteCallable callable) throws ECFException
Invoke remote call. The implementation of this method should actually make the remote call for the given call and associated callable.

Parameters:
  `call` - the call for the remote call. Will not be `null`.
  `callable` - the callable associated with the remote call. Will not be `null`.
Returns:
  Object the result of the remote call. May be `null`.
Throws:
  `ECFException` - thrown if the call fails.