{{tag>Programmers_Reference Custom_channels Replies_To_Service_Requests}} [<10>] ==== Handling replies to service requests ==== When a service of the external party or //**Aware IM**// has been requested the service provider may send a reply. The reply is sent as a special notification (called the //service reply notification//). This notification implements the [[docs:3500:0300:0319|INotification]] interface and exposes methods that allow checking the status of the service request and retrieve error message if there was any. If //**Aware IM**// requests services of external parties, replies from the external parties need to be delivered back to //**Aware IM**//. Rather than write the Source that would do this it is possible to use the special version of a Sink that would not only deliver service requests to the external party but also send the immediate replies back to //**Aware IM**//. Rather than extending ''AbstractSimpleSink'' class such a Sink must extend the ''AttachedReplySink'' class. ''AttachedReplySink'' has the Source, which //**Aware IM**// automatically attaches to the Sink when Sources and Sinks are constructed. The only extra functionality that the Sink extending ''AttachedReplySink'' has to provide is to feed the reply to the attached Source when the reply becomes available – this will guarantee that the reply will be delivered to //**Aware IM**//. Feeding reply to the source is achieved by calling the ''feedToSource'' method of ''AttachedReplySink'' passing it the ''DataObjects'' as required by the Source. The message fed to the source must contain the service reply notification. The service reply notification can be constructed calling the static method INotification DomainFactory.createServiceReplyNotification (InotificationDefinition definition, int serviceStatus, String errorMessage); where ''definition'' must correspond to the structure of the reply declared for the requested service (or ''null'' if a "standard" reply has been declared), ''serviceStatus'' is the constant described in the ''[[pr_methods:getservicestatus|getServiceStatus]]'' method of the [[docs:3500:0300:0319|INotification]] interface and ''errorMessage'' is the message describing the error if service failed. Once the notification has been created it can be converted to ''DataObjects'' using the ''[[pr_methods:messagebuilder|MessageBuilder]]'' class and fed to the source. Here is the snippet of the code illustrating this: public void processMessage (Message msg) { // call the service here // … // construct service reply notification and feed it back to Aware IM INotification serviceReply = DomainFactory.createServiceReplyNotification (null, INotification.SERVICE_STATUS_SUCCESS, null); MessageBuilder mb = new MessageBuilder (); feedToSource (msg.peekDataObjects (), mb.addNotification (null, serviceReply)); }