com.rabbitmq.tools.jsonrpc
Class JsonRpcServer

java.lang.Object
  extended by com.rabbitmq.client.RpcServer
      extended by com.rabbitmq.client.StringRpcServer
          extended by com.rabbitmq.tools.jsonrpc.JsonRpcServer

public class JsonRpcServer
extends StringRpcServer

JSON-RPC Server class. Given a Java Class, representing an interface, and an implementation of that interface, JsonRpcServer will reflect on the class to construct the ServiceDescription, and will route incoming requests for methods on the interface to the implementation object while the mainloop() is running.

See Also:
RpcServer, JsonRpcClient

Field Summary
 java.lang.Class<?> interfaceClass
          The interface this server implements.
 java.lang.Object interfaceInstance
          The instance backing this server.
 ServiceDescription serviceDescription
          Holds the JSON-RPC service description for this client.
 
Fields inherited from class com.rabbitmq.client.StringRpcServer
STRING_ENCODING
 
Constructor Summary
JsonRpcServer(Channel channel, java.lang.Class<?> interfaceClass, java.lang.Object interfaceInstance)
          Construct a server that talks to the outside world using the given channel, and constructs a fresh temporary queue.
JsonRpcServer(Channel channel, java.lang.String queueName, java.lang.Class<?> interfaceClass, java.lang.Object interfaceInstance)
          Construct a server that talks to the outside world using the given channel and queue name.
 
Method Summary
 java.lang.String doCall(java.lang.String requestBody)
          Runs a single JSON-RPC request.
static java.lang.String errorResponse(java.lang.Object id, int code, java.lang.String message, java.lang.Object errorArg)
          Construct and encode a JSON-RPC error response for the request ID given, using the code, message, and possible (JSON-encodable) argument passed in.
 ServiceDescription getServiceDescription()
          Public API - gets the service description record that this service built from interfaceClass at construction time.
 java.lang.String handleStringCall(java.lang.String requestBody, AMQP.BasicProperties replyProperties)
          Override our superclass' method, dispatching to doCall.
 java.lang.reflect.Method matchingMethod(java.lang.String methodName, java.lang.Object[] params)
          Retrieves the best matching method for the given method name and parameters.
static java.lang.String response(java.lang.Object id, java.lang.String label, java.lang.Object value)
          Private API - used by errorResponse and resultResponse.
static java.lang.String resultResponse(java.lang.Object id, java.lang.Object result)
          Construct and encode a JSON-RPC success response for the request ID given, using the result value passed in.
 
Methods inherited from class com.rabbitmq.client.StringRpcServer
handleCall, handleCast, handleStringCall, handleStringCast
 
Methods inherited from class com.rabbitmq.client.RpcServer
close, getChannel, getQueueName, handleCall, handleCall, handleCast, handleCast, mainloop, processRequest, setupConsumer, terminateMainloop
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

serviceDescription

public ServiceDescription serviceDescription
Holds the JSON-RPC service description for this client.


interfaceClass

public java.lang.Class<?> interfaceClass
The interface this server implements.


interfaceInstance

public java.lang.Object interfaceInstance
The instance backing this server.

Constructor Detail

JsonRpcServer

public JsonRpcServer(Channel channel,
                     java.lang.Class<?> interfaceClass,
                     java.lang.Object interfaceInstance)
              throws java.io.IOException
Construct a server that talks to the outside world using the given channel, and constructs a fresh temporary queue. Use getQueueName() to discover the created queue name.

Parameters:
channel - AMQP channel to use
interfaceClass - Java interface that this server is exposing to the world
interfaceInstance - Java instance (of interfaceClass) that is being exposed
Throws:
java.io.IOException - if something goes wrong during an AMQP operation

JsonRpcServer

public JsonRpcServer(Channel channel,
                     java.lang.String queueName,
                     java.lang.Class<?> interfaceClass,
                     java.lang.Object interfaceInstance)
              throws java.io.IOException
Construct a server that talks to the outside world using the given channel and queue name. Our superclass, RpcServer, expects the queue to exist at the time of construction.

Parameters:
channel - AMQP channel to use
queueName - AMQP queue name to listen for requests on
interfaceClass - Java interface that this server is exposing to the world
interfaceInstance - Java instance (of interfaceClass) that is being exposed
Throws:
java.io.IOException - if something goes wrong during an AMQP operation
Method Detail

handleStringCall

public java.lang.String handleStringCall(java.lang.String requestBody,
                                         AMQP.BasicProperties replyProperties)
Override our superclass' method, dispatching to doCall.

Overrides:
handleStringCall in class StringRpcServer

doCall

public java.lang.String doCall(java.lang.String requestBody)
Runs a single JSON-RPC request.

Parameters:
requestBody - the JSON-RPC request string (a JSON encoded value)
Returns:
a JSON-RPC response string (a JSON encoded value)

matchingMethod

public java.lang.reflect.Method matchingMethod(java.lang.String methodName,
                                               java.lang.Object[] params)
Retrieves the best matching method for the given method name and parameters. Subclasses may override this if they have specialised dispatching requirements, so long as they continue to honour their ServiceDescription.


errorResponse

public static java.lang.String errorResponse(java.lang.Object id,
                                             int code,
                                             java.lang.String message,
                                             java.lang.Object errorArg)
Construct and encode a JSON-RPC error response for the request ID given, using the code, message, and possible (JSON-encodable) argument passed in.


resultResponse

public static java.lang.String resultResponse(java.lang.Object id,
                                              java.lang.Object result)
Construct and encode a JSON-RPC success response for the request ID given, using the result value passed in.


response

public static java.lang.String response(java.lang.Object id,
                                        java.lang.String label,
                                        java.lang.Object value)
Private API - used by errorResponse and resultResponse.


getServiceDescription

public ServiceDescription getServiceDescription()
Public API - gets the service description record that this service built from interfaceClass at construction time.