public override void EndElement(String localName)
        {
            if (localName.Equals(Constants.SERVICE_DESCRIPTOR_PROPERTY, StringComparison.OrdinalIgnoreCase))
            {
                ProcessProperty();
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST, StringComparison.OrdinalIgnoreCase))
            {
                serviceDescriptor.AddRequest(request);

                request   = null;
                isRequest = false;
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_QUERY_PARAMETER, StringComparison.OrdinalIgnoreCase))
            {
                request.AddQueryParameter(queryParameter);

                queryParameter   = null;
                isQueryParameter = false;
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_HEADER_PARAMETER, StringComparison.OrdinalIgnoreCase))
            {
                request.AddHeaderParameter(headerParameter);

                headerParameter   = null;
                isHeaderParameter = false;
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_DATA_STREAM, StringComparison.OrdinalIgnoreCase))
            {
                request.SetDataStream(tempValue.ToString());
            }
        }
        public override void StartElement(XmlReader reader, IDictionary <String, String> attributes)
        {
            String localName = reader.Name;

            tempValue = new StringBuilder();

            if (localName.Equals(Constants.SERVICE_DESCRIPTOR_PROPERTY, StringComparison.OrdinalIgnoreCase))
            {
                propertyName = attributes[Constants.SERVICE_DESCRIPTOR_PROPERTY_NAME];
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST, StringComparison.OrdinalIgnoreCase))
            {
                request   = new ServiceDescriptor.Request();
                isRequest = true;
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_QUERY_PARAMETER, StringComparison.OrdinalIgnoreCase))
            {
                queryParameter   = new Connect.Model.ServiceDescriptor.Request.QueryParameter();
                isQueryParameter = true;
            }
            else if (localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_HEADER_PARAMETER, StringComparison.OrdinalIgnoreCase))
            {
                headerParameter   = new Connect.Model.ServiceDescriptor.Request.HeaderParameter();
                isHeaderParameter = true;
            }
        }
Пример #3
0
 public void AddHeaderParameter(Connect.Model.ServiceDescriptor.Request.HeaderParameter headerParameter)
 {
     this.headerParameters.Add(headerParameter.GetName(), headerParameter);
 }
        public IConnectionResponse Options(IConnectionRequest connectionRequest)
        {
            if (connectionRequest == null)
            {
                Log.Error(typeof(HttpConnectionWorker).Name, "Options", "Invalid Connection Request.");
                throw new ConnectionException(typeof(HttpConnectionWorker).Name, "Options", "Invalid Connection Request.");
            }

            /*
             * Request Parameters
             */
            StringBuilder url = new StringBuilder(connectionRequest.GetUrl());

            IEnumerator <String> queryParameters  = connectionRequest.GetQueryParameters();
            IEnumerator <String> headerParameters = connectionRequest.GetHeaderParameters();


            /*
             * Add Query Parameters
             */
            int count = 0;

            while (queryParameters.MoveNext())
            {
                String parameter = queryParameters.Current;
                Connect.Model.ServiceDescriptor.Request.QueryParameter queryParameter = connectionRequest.GetQueryParameter(parameter);

                if (count == 0)
                {
                    url.Append("?");
                    url.Append(parameter + "=" + queryParameter.GetValue());
                }
                else
                {
                    url.Append("&");
                    url.Append(parameter + "=" + queryParameter.GetValue());
                }
            }


            /*
             * Make Request
             */
            HttpClient          httpClient = new HttpClient();
            HttpResponseMessage httpResponse;


            /*
             * Add Header Parameters
             */
            while (headerParameters.MoveNext())
            {
                String header = headerParameters.Current;
                Connect.Model.ServiceDescriptor.Request.HeaderParameter headerParameter = connectionRequest.GetHeaderParameter(header);

                httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header, headerParameter.GetValue());
            }



            /* execute */

            try
            {
                Task <HttpResponseMessage> httpResponseMessage = null;// httpClient.GetAsync(url.ToString());
                httpResponseMessage.Wait();

                httpResponse = httpResponseMessage.Result;
            }
            catch (System.Exception exception)
            {
                Log.Error(typeof(HttpConnectionWorker).Name, "Options", "Exception caught while executing request, " + exception.Message);
                throw new ConnectionException(typeof(HttpConnectionWorker).Name, "Options", "Exception caught while executing request, " + exception.Message);
            }



            /* return response */
            if (!httpResponse.IsSuccessStatusCode)
            {
                return((IConnectionResponse) new ConnectionResponse(new ConnectionStatusCodes().GetStatusCode(httpResponse.StatusCode.ToString()), new ConnectionStatusCodes().GetStatusMessage(Convert.ToInt32(httpResponse.StatusCode.ToString()))));
            }


            Task <Stream> repsonseStreamAsync = httpResponse.Content.ReadAsStreamAsync();

            repsonseStreamAsync.Wait();

            Stream responseStream = repsonseStreamAsync.Result;

            return((IConnectionResponse) new ConnectionResponse(new ConnectionStatusCodes().GetStatusCode(httpResponse.StatusCode.ToString()), responseStream));
        }
        public IConnectionResponse Get(IConnectionRequest connectionRequest)
        {
            if (connectionRequest == null)
            {
                Log.Error(typeof(HttpConnectionWorker).Name, "Get", "Invalid Connection Request.");
                throw new ConnectionException(typeof(HttpConnectionWorker).Name, "Get", "Invalid Connection Request.");
            }

            /*if (connectionRequest.GetUrl().Contains("get_books"))
             * {
             *  String books = "<books><book><name>C</name><description>C Description</description><author>C Author</author><link>C Link</link></book><book><name>C Plus</name><description>C Plus Description</description><author>C Plus Author</author><link>C Plus Link</link></book><book><name>C Sharp</name><description>C Sharp Description</description><author>C Sharp Author</author><link>C Sharp Link</link></book><book><name>Java</name><description>Java Description</description><author>Java Author</author><link>Java Link</link></book><book><name>JavaScript</name><description>JavaScript Description</description><author>JavaScript Author</author><link>JavaScript Link</link></book><book><name>Swift</name><description>Swift Description</description><author>Swift Author</author><link>Swift Link</link></book><book><name>Objective C</name><description>Objective C Description</description><author>Objective C Author</author><link>Objective C Link</link></book></books>";
             *  Stream booksStream;
             *
             *  byte[] bytes = new byte[books.Length * sizeof(char)];
             *  System.Buffer.BlockCopy(books.ToCharArray(), 0, bytes, 0, bytes.Length);
             *
             *  try
             *  {
             *      booksStream = Utils.Utils.ToStream(bytes);
             *      return new ConnectionResponse(200, booksStream);
             *  }
             *  catch (SiminovException se)
             *  {
             *
             *  }
             * }
             * else
             * {
             *  String lessions = "<lessions><lession><name>C First Lession</name><description>C First Lession Description</description><link>C First Lession Link</link></lession><lession><name>C Second Lession</name><description>C Second Lession Description</description><link>C Second Lession Link</link></lession></lessions>";
             *  Stream lessionsStream;
             *
             *  byte[] bytes = new byte[lessions.Length * sizeof(char)];
             *  System.Buffer.BlockCopy(lessions.ToCharArray(), 0, bytes, 0, bytes.Length);
             *
             *  try
             *  {
             *      lessionsStream = Utils.Utils.ToStream(bytes);
             *      return new ConnectionResponse(200, lessionsStream);
             *  }
             *  catch (SiminovException se)
             *  {
             *
             *  }
             * }
             *
             * return new ConnectionResponse(200, "");*/


            /*
             * Request Parameters
             */
            StringBuilder url = new StringBuilder(connectionRequest.GetUrl());

            IEnumerator <String> queryParameters  = connectionRequest.GetQueryParameters();
            IEnumerator <String> headerParameters = connectionRequest.GetHeaderParameters();


            /*
             * Make Request
             */
            HttpClient          httpClient = new HttpClient();
            HttpResponseMessage httpResponse;

            /*
             * Add Query Parameters
             */
            int count = 0;

            while (queryParameters.MoveNext())
            {
                String parameter = queryParameters.Current;
                Connect.Model.ServiceDescriptor.Request.QueryParameter queryParameter = connectionRequest.GetQueryParameter(parameter);

                if (count == 0)
                {
                    url.Append("?");
                    url.Append(parameter + "=" + queryParameter.GetValue());
                }
                else
                {
                    url.Append("&");
                    url.Append(parameter + "=" + queryParameter.GetValue());
                }
            }

            /*
             * Add Header Parameters
             */
            while (headerParameters.MoveNext())
            {
                String header = headerParameters.Current;
                Connect.Model.ServiceDescriptor.Request.HeaderParameter headerParameter = connectionRequest.GetHeaderParameter(header);

                httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header, headerParameter.GetValue());
            }


            /* execute */

            try
            {
                Task <HttpResponseMessage> httpResponseMessage = httpClient.GetAsync(url.ToString());
                httpResponseMessage.Wait();

                httpResponse = httpResponseMessage.Result;
            }
            catch (System.Exception exception)
            {
                Log.Error(typeof(HttpConnectionWorker).Name, "Get", "Exception caught while executing request, " + exception.Message);
                throw new ConnectionException(typeof(HttpConnectionWorker).Name, "Get", "Exception caught while executing request, " + exception.Message);
            }


            /* return response */
            if (!httpResponse.IsSuccessStatusCode)
            {
                return((IConnectionResponse) new ConnectionResponse(new ConnectionStatusCodes().GetStatusCode(httpResponse.StatusCode.ToString()), new ConnectionStatusCodes().GetStatusMessage(Convert.ToInt32(httpResponse.StatusCode.ToString()))));
            }


            Task <Stream> repsonseStreamAsync = httpResponse.Content.ReadAsStreamAsync();

            repsonseStreamAsync.Wait();

            Stream responseStream = repsonseStreamAsync.Result;

            return((IConnectionResponse) new ConnectionResponse(new ConnectionStatusCodes().GetStatusCode(httpResponse.StatusCode.ToString()), responseStream));
        }
Пример #6
0
        /// <summary>
        /// It resolve service descriptor instance
        /// </summary>
        /// <param name="service">Service instance</param>
        /// <exception cref="Siminov.Connect.Exception.ServiceException">If any exception occur while resolving dynamic resources</exception>
        public static void Resolve(IService service)
        {
            /*
             * Resolve Service Descriptor Properties
             */
            ServiceDescriptor serviceDescriptor = service.GetServiceDescriptor();

            IEnumerator <String> resources = service.GetResources();

            while (resources.MoveNext())
            {
                String resourceName  = resources.Current;
                Object resourceValue = service.GetResource(resourceName);

                if (resourceValue is String)
                {
                    serviceDescriptor.AddProperty(resourceName, (String)resourceValue);
                }
            }


            IEnumerator <String>         serviceDescriptorProperties        = serviceDescriptor.GetProperties();
            IDictionary <String, String> changedServiceDescriptorProperties = new Dictionary <String, String>();

            while (serviceDescriptorProperties.MoveNext())
            {
                String serviceDescriptorProperty = serviceDescriptorProperties.Current;
                String serviceDescriptorValue    = serviceDescriptor.GetProperty(serviceDescriptorProperty);

                var serviceDescriptors = new List <IDescriptor>();
                serviceDescriptors.Add(serviceDescriptor);

                serviceDescriptorValue = ResourceUtils.Resolve(serviceDescriptorValue, serviceDescriptors.ToArray());

                changedServiceDescriptorProperties.Add(serviceDescriptorProperty, serviceDescriptorValue);
            }

            foreach (String changedServiceDescriptorProperty in changedServiceDescriptorProperties.Keys)
            {
                serviceDescriptor.AddProperty(changedServiceDescriptorProperty, changedServiceDescriptorProperties[changedServiceDescriptorProperty]);
            }


            /*
             * Resolve API Properties
             */
            Connect.Model.ServiceDescriptor.Request request   = serviceDescriptor.GetRequest(service.GetRequest());
            IEnumerator <String>         apiProperties        = request.GetProperties();
            IDictionary <String, String> changedApiProperties = new Dictionary <String, String>();

            while (apiProperties.MoveNext())
            {
                String apiProperty = apiProperties.Current;
                String apiValue    = request.GetProperty(apiProperty);

                var serviceDescriptors = new List <IDescriptor>();
                serviceDescriptors.Add(serviceDescriptor);

                apiValue = ResourceUtils.Resolve(apiValue, serviceDescriptors.ToArray());

                changedApiProperties.Add(apiProperty, apiValue);
            }

            foreach (String changedApiProperty in changedApiProperties.Keys)
            {
                request.AddProperty(changedApiProperty, changedApiProperties[changedApiProperty]);
            }

            /*
             * Resolve API Query Parameters
             */
            IEnumerator <Connect.Model.ServiceDescriptor.Request.QueryParameter> queryParameters = request.GetQueryParameters();

            while (queryParameters.MoveNext())
            {
                Connect.Model.ServiceDescriptor.Request.QueryParameter queryParameter = queryParameters.Current;

                String queryValue = queryParameter.GetValue();

                var serviceDescriptors = new List <IDescriptor>();
                serviceDescriptors.Add(serviceDescriptor);

                queryValue = ResourceUtils.Resolve(queryValue, serviceDescriptors.ToArray());

                queryParameter.SetValue(queryValue);
            }


            /*
             * Resolve API Query Parameters
             */
            IEnumerator <Connect.Model.ServiceDescriptor.Request.HeaderParameter> headerParameters = request.GetHeaderParameters();

            while (headerParameters.MoveNext())
            {
                Connect.Model.ServiceDescriptor.Request.HeaderParameter headerParameter = headerParameters.Current;

                String headerValue = headerParameter.GetValue();

                var serviceDescriptors = new List <IDescriptor>();
                serviceDescriptors.Add(serviceDescriptor);

                headerValue = ResourceUtils.Resolve(headerValue, serviceDescriptors.ToArray());

                headerParameter.SetValue(headerValue);
            }
        }
        public override void EndElement(String localName)
        {
		
		    if(localName.Equals(Constants.SERVICE_DESCRIPTOR_PROPERTY, StringComparison.OrdinalIgnoreCase)) 
            {
			    ProcessProperty();
		    } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST, StringComparison.OrdinalIgnoreCase)) 
            {
			    serviceDescriptor.AddRequest(request);
			
			    request = null;
			    isRequest = false;
		    } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_QUERY_PARAMETER, StringComparison.OrdinalIgnoreCase)) 
            {			
			    request.AddQueryParameter(queryParameter);

                queryParameter = null;
                isQueryParameter = false;
		    } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_HEADER_PARAMETER, StringComparison.OrdinalIgnoreCase)) 
            {			
			    request.AddHeaderParameter(headerParameter);

                headerParameter = null;
                isHeaderParameter = false;
		    } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_DATA_STREAM, StringComparison.OrdinalIgnoreCase)) 
            {
			    request.SetDataStream(tempValue.ToString());
		    }
	    }
        public override void StartElement(XmlReader reader, IDictionary<String, String> attributes)
        {
            String localName = reader.Name;   
            tempValue = new StringBuilder();

		    if(localName.Equals(Constants.SERVICE_DESCRIPTOR_PROPERTY, StringComparison.OrdinalIgnoreCase)) 
            {
                propertyName = attributes[Constants.SERVICE_DESCRIPTOR_PROPERTY_NAME];
            } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST, StringComparison.OrdinalIgnoreCase)) 
            {
			    request = new ServiceDescriptor.Request();
			    isRequest = true;
		    } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_QUERY_PARAMETER, StringComparison.OrdinalIgnoreCase)) 
            {
			    queryParameter = new Connect.Model.ServiceDescriptor.Request.QueryParameter();
                isQueryParameter = true;
		    } 
            else if(localName.Equals(Constants.SERVICE_DESCRIPTOR_REQUEST_HEADER_PARAMETER, StringComparison.OrdinalIgnoreCase)) 
            {
			    headerParameter = new Connect.Model.ServiceDescriptor.Request.HeaderParameter();
                isHeaderParameter = true;
		    }
	    }