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
`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
`protected AbstractClientContainer` `container`
`protected RemoteServiceClientRegistration` `registration`

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

`EMPTY_ARGS, futureExecutorService, futureExecutorServiceMaxThreads, iFutureExecutor`

### Constructor Summary

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

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`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 Detail

#### registration

    protected RemoteServiceClientRegistration registration

#### container

    protected AbstractClientContainer container

### Constructor Detail

#### AbstractClientService

    public AbstractClientService(AbstractClientContainer container,
                                 RemoteServiceClientRegistration registration)

### Method Detail

#### 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.