Package org.astrogrid.samp.web

# Class WebHubXmlRpcHandler

java.lang.Object
org.astrogrid.samp.xmlrpc.ActorHandler
org.astrogrid.samp.web.WebHubXmlRpcHandler

All Implemented Interfaces:
  `SampXmlRpcHandler`

public class WebHubXmlRpcHandler extends ActorHandler
SampXmlRpcHandler implementation which passes Web Profile-type XML-RPC calls to a hub connection factory to provide a Web Profile hub server.

Since:
  2 Feb 2011
Author:
  Mark Taylor

## Constructor Summary

Constructors
Constructor
Description
`WebHubXmlRpcHandler(ClientProfile profile, ClientAuthorizer auth, KeyGenerator keyGen, URL baseUrl, UrlTracker urlTracker)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`HttpServer.Handler`
`getUrlTranslationHandler()`
Returns a handler suitable for performing URL translations on behalf of sandboxed clients as required by the Web Profile.
`Object`
`handleCall(String fqName, List params, Object reqObj)`
Processes an XML-RPC call.
`protected Object`
`invokeMethod(Method method, Object obj, Object[] args)`
Invokes a method reflectively on an object.

### Methods inherited from class org.astrogrid.samp.xmlrpc.ActorHandler

`canHandleCall, getActor`

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

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

## Constructor Details

### WebHubXmlRpcHandler

public WebHubXmlRpcHandler(ClientProfile profile, ClientAuthorizer auth, KeyGenerator keyGen, URL baseUrl, UrlTracker urlTracker)
Constructor.

Parameters:
  `profile` - hub connection factory
  `auth` - client authorizer
  `keyGen` - key generator for private keys
  `baseUrl` - base URL of HTTP server, used for URL translation
  `urlTracker` - tracks URLs in messages to restrict use in URL translation service for security reasons; may be null for no restrictions

## Method Details

### handleCall

public Object handleCall(String fqName, List params, Object reqObj) throws Exception
Description copied from interface: `SampXmlRpcHandler`
Processes an XML-RPC call. This method should only be called if `canHandleCall(method)` returns true. The `params` list and the return value must be SAMP-compatible, that is only Strings, Lists and String-keyed Maps are allowed in the data structures. The `reqInfo` parameter may be used to provide additional information about the XML-RPC request, for instance the originating host; this is implementation specific, and may be null.

Specified by:
  `handleCall` in interface `SampXmlRpcHandler`
Overrides:
  `handleCall` in class `ActorHandler`
Parameters:
  `fqName` - XML-RPC method name
  `params` - XML-RPC parameter list (SAMP-compatible)
  `reqObj` - optional additional request information; may be null
Returns:
  return value (SAMP-compatible)
Throws:
  `Exception`

### getUrlTranslationHandler

public HttpServer.Handler getUrlTranslationHandler()
Returns a handler suitable for performing URL translations on behalf of sandboxed clients as required by the Web Profile.

Returns:
  url translation handler

### invokeMethod

protected Object invokeMethod(Method method, Object obj, Object[] args) throws IllegalAccessException, InvocationTargetException
Description copied from class: `ActorHandler`
Invokes a method reflectively on an object. This method should be implemented in the obvious way, that is `return method.invoke(obj,params)`.

If the implementation is effectively prescribed, why is this abstract method here? It's tricky. The reason is so that reflective method invocation from this class is done by code within the actor implementation class itself rather than by code in the superclass, `ActorHandler`. That in turn means that the `actorType` class specified in the constructor does not need to be visible from `ActorHandler`'s package, only from the package where the implementation class lives.

Specified by:
  `invokeMethod` in class `ActorHandler`
Parameters:
  `method` - method to invoke
  `obj` - object to invoke the method on
  `args` - arguments for the method call
Throws:
  `IllegalAccessException`
  `InvocationTargetException`
See Also:
  - `Method.invoke(java.lang.Object, java.lang.Object...)`