public static String buildJavascriptFault(BrokerMessage request, Exception fault)
        {

            log.enteredMethod();

            JsonOutput jsonWriter = new JsonStringOutput();
            jsonWriter.append("jsonbroker.forwardFault(\"fault\",");

            JsonObjectHandler jsonObjectHandler = JsonObjectHandler.getInstance();
            jsonObjectHandler.WriteValue(request.getMetaData(), jsonWriter);
            jsonWriter.append(",\"");
            jsonWriter.append(request.getServiceName());
            jsonWriter.append("\",1,0,\"");
            jsonWriter.append(request.getMethodName());
            jsonWriter.append("\",");
            jsonObjectHandler.WriteValue(FaultSerializer.ToJsonObject(fault), jsonWriter);
            jsonWriter.append(");");

            String answer = jsonWriter.ToString();

            log.debug(answer, "answer");

            return answer;

        }
        public static String buildJavascriptResponse(BrokerMessage response)
        {


            log.enteredMethod();


            JsonStringOutput jsonWriter = new JsonStringOutput();
            jsonWriter.append("jsonbroker.forwardResponse(\"response\",");
            JsonObjectHandler jsonObjectHandler = JsonObjectHandler.getInstance();
            jsonObjectHandler.WriteValue(response.getMetaData(), jsonWriter);
            jsonWriter.append(",\"");
            jsonWriter.append(response.getServiceName());
            jsonWriter.append("\",1,0,\"");
            jsonWriter.append(response.getMethodName());
            jsonWriter.append("\",");
            jsonObjectHandler.WriteValue(response.GetAssociativeParamaters(), jsonWriter);
            JsonArray parameters = response.GetOrderedParamaters();

            for (int i = 0, count = parameters.Count(); i < count; i++)
            {
                jsonWriter.append(',');
                Object blob = parameters.GetObject(i);
                JsonHandler handler = JsonHandler.getHandler(blob);
                handler.WriteValue(blob, jsonWriter);
            }

            jsonWriter.append(");");

            String answer = jsonWriter.ToString();

            log.debug(answer, "answer");

            return answer;

        }
        public BrokerMessage process(BrokerMessage request)
        {
            if (BrokerMessageType.META_REQUEST == request.getMessageType())
            {
                return this.processMetaRequest(request);
            }

            Service serviceDelegate = this.getService( request.getServiceName() );
            return serviceDelegate.process(request);
        }
        private BrokerMessage processMetaRequest(BrokerMessage request)
        {
            String methodName = request.getMethodName();

            if ("getVersion".Equals(methodName))
            {
                JsonObject associativeParamaters = request.GetAssociativeParamaters();
                String serviceName = request.getServiceName();

                BrokerMessage answer = BrokerMessage.buildMetaResponse(request);
                associativeParamaters = answer.GetAssociativeParamaters();

                if (!_services.ContainsKey(serviceName))
                {
                    associativeParamaters.put("exists", false);
                }
                else
                {
                    associativeParamaters.put("exists", true);

                    DescribedService describedService = _services[serviceName];
                    ServiceDescription serviceDescription = describedService.getServiceDescription();
                    associativeParamaters.put("majorVersion", serviceDescription.getMajorVersion());
                    associativeParamaters.put("minorVersion", serviceDescription.getMinorVersion());

                }

                return answer;

            }

            throw ServiceHelper.methodNotFound(this, request);
        }