Monday, January 20, 2014

RESTful web services with jetty and jersey

Recently I was thinking if there is a way to start a web server in java just as easy as it is in node.js, if you don't know node.js you can check this link nodejs.org, so in node you just write a few lines and you have a server like this:


I thought that with something like this you can easily test your code without the burden of deploy it, and also saving some resources. 

So I start looking if there is something similar in java and I found several projects to start a web server or a minimal server, but I decided to go with jetty www.eclipse.org/jetty, so I'm going to show you how to run some restful web services using jetty. 

Also I'm going to use jersey jersey.java.net which simplifies the development of RESTful Web services and their clients in Java.

So you can download the jars from these projects or configure them through maven to your project to start using them, in these links www.eclipse.org/jetty , jersey.java.net you can check the instructions to do it.

So to create a web server with jetty is as easy as the following code:


If you run the code and check the http://localhost:8080/hello url you can see that your servlet is running, so basically in the code you create a Server object and set the port the Servlets and the servlets to run and that's it.

With jetty you can do much more than this, but for the purpose of this blog I will no go further, you can check the jetty documentation.

The following would be to create and deploy the RESTful web services, now we will use jersey to this.

The first thing to do is to create the services that we will deploy, for the example I will create two services one using JSON and other using XML, I will create two objects used to transfer the data.



In the classes above you can see two classes Employee with a nested class Address and Student, the only thing to notice from these classes are the annotations @XmlRootElement and @XmlAttribute, these annotations are used to do the parsing from object to the protocol used (XML, JSON) and from protocol to object.

The following would be to create the classes for the services.




The classes above use the standard Java EE specification for RESTful web services they use the @Path annotation at the top level to set the service path and each method use the @GET, @POST annotations to describe the type of service and the @Produces annotation to set the type of protocol to use.

The method getStudent of the class XMLStudentSvc has also the @Path("/student/{name}")  this specifies a path for this method, also note that it receives a parameter named "name" through the path and this parameter will be mapped to the parameter of the method.
For more about how define RESTful web services check the specification https://jcp.org/en/jsr/detail?id=311

Another thing to notice is that both classes are in a package called "rest", so the following to do would be to deploy these services in jetty as long as the jersey configuration.

This is the class for the server:



See in the class above all what it needs to configure jersey, a ServletHolder object is created to set the parameters, note that is indicated the package where the services are located and jersey will automatically deploy them. The ServletHolder object is passed to a ServletContextHandler object, and that's it with this the services should be up and running.

The last thing to do is to create a client for our services, for the client I will use jersey to help.

This is the client for the JSON service:


The client will call two methods, the first will be to the GET method and it uses the url with the path specified for this method ("http://localhost:9999/employee/getEmployee"), this method returns a response in JSON, then this response is unmarshal to a object with the call to "response.getEntity(Employee.class)".

If the JSON response is needed instead of the actual object all what is need to do is change the type to String in the unmarshal "response.getEntity(Employee.class)".

The other method specified in this client is the POST method this call doesn't return a thing,  it uses the url with the path specified for this method ("http://localhost:9999/employee/postEmployee") and it sends back the same object the client is receiving, you should see an output in the server since the service method is printing the object it is receiving.

This is the client for the XML service:


It is almost the same as the JSON client, the only difference is that a parameter is include in the url "http://localhost:9999/xmlServices/student/James", because the service is expecting it.

After running these examples I notice how easy and fast is to run the services and the few resources that required, I'm using at most 30Mb of memory.

174 comments:

  1. Hi, Your posts really helped me a lot in learning new things
    Specially the node.js, I was not aware of this....

    ReplyDelete
  2. In case someone arriving here is using Jersey 2.6 instead of 1.x which is used in the above examples, here is the Servlet Handler changes. Note that Moxy is now the default JSON processor and is loaded dynamically. No need to specify the POJO init parameter. Just make sure jersey.media.moxy and its dependencies are in the classpath and it will be loaded and used.

    ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
    jerseyServlet.setInitOrder(1);
    jerseyServlet.setInitParameter("jersey.config.server.provider.packages","rest");

    ReplyDelete
  3. I follow the example and got:
    Exception in thread "main" java.lang.SecurityException: class "javax.servlet.ServletRegistration$Dynamic"'s signer information does not match signer information of other classes in the same package

    ReplyDelete
    Replies
    1. Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Front end developer Node js Training in Chennai . learn from or Javascript Online Training from India. Nowadays JavaScript has tons of job opportunities on various vertical industry. JavaScript Training in Chennai

      Delete
  4. I built the restful web service based on this tutorial and I found it very easy to use and understand.

    I had some problems migrating the tutorial from Jersey 1.x to 2.x but finally I got the web server up and running. Now, the problem is that it does not respond to requests from client (or browser). Does anyone know why?

    Here is my code:

    Provider package:

    package org.eclipse.eatop.jetty.helloworld.rest;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;


    @Path("/xmlServices")
    public class XMLProjectService {
    @GET
    @Produces(MediaType.TEXT_XML)
    public String getProject()
    {
    return "" + " hello world " ;
    }
    }
    Jetty embedded server:

    public Object execute(ExecutionEvent event) throws ExecutionException {
    Server server = new Server(8080);
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    server.setHandler(context);
    ServletHolder sh = new ServletHolder(new ServletContainer());
    sh.setInitOrder(1);
    sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.eclipse.eatop.jetty.helloworld.rest");
    context.addServlet(sh, "/*");

    try {
    server.start();
    } catch (Exception e) {
    System.out.println("Unable to start jetty web server");
    e.printStackTrace();
    }
    return null;
    }
    Client:

    public class Test {
    public static void main(String[] args) {
    Client client = ClientBuilder.newClient();
    WebTarget target = client.target(getBaseURI()).path("xmlServices");
    System.out.println(target.request("text/xml").get());
    }
    private static URI getBaseURI() {
    return UriBuilder.fromUri("http://localhost:8080/").build();
    }
    }

    The result I get is: InboundJaxrsResponse{ClientResponse{method=GET, uri=http://localhost:8080/xmlServices, status=404, reason=Not Found}}

    ReplyDelete
  5. you didn't setinitParameteres properly as what article mentioned :-

    sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
    sh.setInitParameter("com.sun.jersey.config.property.packages", "rest");//Set the package where the services reside
    sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");

    ReplyDelete
  6. Thanks for informative post which is very useful. I appreciate the blog author and like the articles of these blog.
    Web Development Company in Indore

    ReplyDelete
    Replies
    1. An important building block of SEO is to develop your website which can be easily understandable for both Online Visitors (most important) and search engine robots. In the current digital age, seo is important for your online success means to generate leads.

      SEO Services in IndiaSEO Company in India SEO Company in India SEO Services in India

      SEO Company in India SEO Services in India

      Delete
  7. Nice post. Gave me inspiration to write a few on my own since newer version don't quite work with this setup:
    http://ironicprogrammer.blogspot.se/2015/05/rest-with-jersey-and-jetty-part-3.html

    ReplyDelete
  8. Hi,

    I have tried to run the server and then access the link http://localhost:9999/employee/getEmployee.

    but it throws below error.

    2015-06-16 07:19:54.879:INFO:oejs.Server:jetty-8.1.14.v20131031
    2015-06-16 07:19:54.983:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:9999
    Jun 16, 2015 7:20:02 AM com.sun.jersey.api.core.PackagesResourceConfig init
    INFO: Scanning for root resource and provider classes in the packages:
    com.package.rest
    2015-06-16 07:20:02.744:WARN:/:unavailable
    java.lang.reflect.InvocationTargetException

    Any Hep..!!

    ReplyDelete
  9. Hi

    guys

    i see your post . i am very interested your post so i am very happy .
    website designing company in india

    ReplyDelete
  10. very informative post, Loved reading this post. Hostgator Review

    ReplyDelete
  11. Thanks for information on web services. for more information SEO Services Company in Chandigarh

    ReplyDelete

  12. Its a very good post, you said many useful information here .
    java servlet programming
    hardware and networking course

    ReplyDelete
  13. This is nice information,, Thanks for sharing this information,, Its very useful to me
    mobile app development

    ReplyDelete
  14. How did you get javax.servlet? I'm struggling to work it out, and a lot of answers online seem to boil down to 'use Eclipse EE', which is, of course, no use to me.

    ReplyDelete
  15. Nice Website...
    Hey JOIN now fblikesbot.com and Increase Facebook Likes your profile and websites.
    Increase Facebook Likes and check your website worth worth my websites
    its may be very beneficial for you also really

    ReplyDelete
  16. http://www.javaproficiency.com/2015/03/jersey-tutorial-for-beginners.html

    ReplyDelete
  17. Thanks for sharing excellent information. Your site is very cool . I am impressed by the details that you have on this site.Website Designing Bangalore | Web Design Company Bangalore

    ReplyDelete
  18. Thanks for this article, very useful. I have managed to update the jersey examples to jersey 2 and get a response from the server, but I still have 2 problems:
    a) how can I inject dependencies into my jersey resources? they get instanciated with the default ctor but in my case I need to pass in a dao object, so I get a NPE when I do a request
    b) how can I make jersey's logging less verbose? Ideally I want to send it through java.util.logging but I've tried adding jetty-logging.properties and also in the code with Log.setLog(...) but nothing seems to work. thanks,
    Martin

    ReplyDelete
  19. Thank you for taking the time to this information very useful!
    SEO services pakistan

    ReplyDelete
  20. Hi,
    I used the above examples to get example of JSON and XML Clients. Had a bit of trouble with the JSON client but eventually solved it by including jackson jar. In this case I don't think the com.sun.jersey.api.json.POJOMappingFeature needs to be set in the server code.
    I am using jackson-all-1.9.0.jar, jersey-bundle-1.19.jar, servlet-api-3.0.jar and jetty-8.1.2.

    I will probably move on now and try and get a similar example working with the latest version of Jersey.

    ReplyDelete
  21. Nice Information you have written here. Really Great Stuff. I keep it bookmark for our future purpose.

    We are also Web development Company in India who provide the services in Android App Development in Nagpur , SEO Company in Nagpur , Ecommerce Website Development in Nagpur. Visit Us today

    AceZed IT Solution

    ReplyDelete
  22. Nice Information you have written here. Really Great Stuff. I keep it bookmark for our future purpose. Our Best Presence in Content Marketing Find our Content Writing Services in Nagpur & Content Writing Company in Nagpur .
    AceZed IT Solution

    ReplyDelete
  23. It will very helpful as user point of view. Please keep sharing for the beneficial knowledge of users.

    Web Design services in Lucknow

    ReplyDelete
  24. Accuratesolutionltd führt mobile app Entwicklungsunternehmen. Wir entwickeln Apps für Handys, Tablets , iPads und iPhones . Dies ist aufgrund der zunehmenden Nutzung von Internet und Mobilgeräte in Deutschland .

    ReplyDelete
  25. Grateful to check out your website, I seem to be ahead to more excellent content and I believe we all really like to thank for so many excellent content, weblog to discuss with us Nimble Social CRM

    ReplyDelete
  26. Nice post, I bookmark your blog because I found very good information on your blog, Thanks for sharing more information Dynamic Web Development Services.

    ReplyDelete
  27. Hi, Am having this error.

    "java.lang.UnsupportedClassVersionError: org/eclipse/jetty/server/HandlerContainer : Unsupported major.minor version 52.0"

    Please can someone tell which JDK to use.

    Thanks.

    ReplyDelete
  28. Nice post, I bookmark your blog because I found very good information on your blog, Thanks for sharing more information Dynamic Web Development Company.

    ReplyDelete
  29. I just like the title of your post code like a boss. Logo Designs Company

    ReplyDelete
  30. A simple question, What is a website? In its bare form a website is a single domain that consists of different web pages. We should all know that by now, but surprisingly what we don’t all know, is the benefits a website can provide for your business and its shocking to witness how many business don’t actually have a website or online presence!
    A1 Digital Solutions

    ReplyDelete
  31. If quality web design company means,it should providing a quality services in all the development.

    Web Design Company in Delhi | Website Designing Company in Delhi

    ReplyDelete
  32. The blog was absolutely fantastic! Lot of great information which can be helpful in some or the other way. Keep updating the blog, looking forward for more contents...Great job, keep it up..
    Web Development Bangalore | Web Designing Company Bangalore

    ReplyDelete
  33. Programming is combination of intelligent and creative work. Programmers can do anything with code. The entire Programming tutorials that you mention here on this blog are awesome. Beginners Heap also provides latest tutorials of Programming from beginning to advance level.
    Be with us to learn programming in new and creative way.

    ReplyDelete
  34. Hi, is it possible to obtain the pom.xml ?

    So i have a strange error

    2016-08-09 20:08:15.593:INFO::main: Logging initialized @214ms
    2016-08-09 20:08:15.780:INFO:oejs.Server:main: jetty-9.3.11.v20160721
    2016-08-09 20:08:15.852:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@5594a1b5{/,null,AVAILABLE}
    2016-08-09 20:08:15.877:INFO:oejs.AbstractConnector:main: Started ServerConnector@2812cbfa{HTTP/1.1,[http/1.1]}{0.0.0.0:9999}
    2016-08-09 20:08:15.877:INFO:oejs.Server:main: Started @502ms
    2016-08-09 20:08:22.544:WARN:oejs.ServletHandler:qtp1469821799-17: Error for /employee/getEmployee
    java.lang.NoSuchMethodError: com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithExceptionPEA(Ljava/lang/String;)Ljava/security/PrivilegedExceptionAction;
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:707)
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:205)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640)
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:496)
    at org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:788)
    at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:773)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:578)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:224)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle(Server.java:524)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
    at java.lang.Thread.run(Thread.java:745)

    ReplyDelete
    Replies
    1. [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ TestRest ---
      [INFO] TestRest:TestRest:jar:1.0-SNAPSHOT
      [INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
      [INFO] +- org.eclipse.jetty:jetty-server:jar:9.3.11.v20160721:compile
      [INFO] | +- org.eclipse.jetty:jetty-http:jar:9.3.11.v20160721:compile
      [INFO] | | \- org.eclipse.jetty:jetty-util:jar:9.3.11.v20160721:compile
      [INFO] | \- org.eclipse.jetty:jetty-io:jar:9.3.11.v20160721:compile
      [INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.3.11.v20160721:compile
      [INFO] | \- org.eclipse.jetty:jetty-security:jar:9.3.11.v20160721:compile
      [INFO] +- com.sun.jersey:jersey-servlet:jar:1.17.1:compile
      [INFO] | \- com.sun.jersey:jersey-server:jar:1.17.1:compile
      [INFO] | \- asm:asm:jar:3.1:compile
      [INFO] +- org.glassfish.jersey.core:jersey-client:jar:2.23.1:compile
      [INFO] | +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
      [INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.23.1:compile
      [INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile
      [INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.23.1:compile
      [INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
      [INFO] | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b34:compile
      [INFO] | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b34:compile
      [INFO] | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b34:compile
      [INFO] | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b34:compile
      [INFO] | \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b34:compile
      [INFO] | \- org.javassist:javassist:jar:3.18.1-GA:compile
      [INFO] \- com.sun.jersey:jersey-client:jar:1.17:compile
      [INFO] \- com.sun.jersey:jersey-core:jar:1.17:compile

      Delete
  35. This comment has been removed by the author.

    ReplyDelete
  36. Great Work. This post is worth everyone’s attention. web design company in chennai

    ReplyDelete
  37. This comment has been removed by the author.

    ReplyDelete
  38. This is a wonderfully written and helpful article, And this was a long guide. So I appreciate you taking the time to check it out!
    Website Design Company Nagpur

    ReplyDelete
  39. Great Work. This post is worth everyone’s attention.http://www.aqtsoft.com/

    ReplyDelete
  40. Informative article, just what I was looking for.seo services chennai

    ReplyDelete
  41. I am reading your post from the beginning, it was so interesting to read & I feel thanks to you for posting such a good blog, keep updates regularly.

    web hosting company in lucknow | Website designing Company in Lucknow | Domain Registration Service in lucknow | it Company in lucknow

    ReplyDelete
  42. Thanks for your post? But can I ask one question: what is the relationship between Jetty and Jersey? Thanks a lot

    ReplyDelete
  43. Can truly relate and retain this outstanding post. Very well written. web design company Chennai

    ReplyDelete
  44. helpdesk management system is a wonderful way to get help for external resources. The team offered by us are amazing in help desk management and offer the best to satisfy the clients.

    ReplyDelete
  45. Great post! I am actually getting ready to across this information, It's very helpful for this blog.Also great with all of the valuable information you have Keep up the good work you are doing well.
    Embedded Training in Chennai

    ReplyDelete


  46. Hai Author, Very Good informative blog post,
    Thanks for Sharing

    ReplyDelete
  47. He has done a great job with such a quality write up. Moving on, I trust MakeWhale when it comes to the best 3D printed products.

    printing services in delhi

    ReplyDelete
  48. Very nice tutorial and nice blog about web services...thanks

    ReplyDelete
  49. Nice post. Thanks for sharing this useful post.
    Software Company in Lucknow provide various services like web designing, development, app development, digital marketing service.

    ReplyDelete
  50. Thank you for taking the time and sharing this information with us. It was indeed very helpful and insightful while being straight forward and to the point.
    www.mcdonaldsgutscheine.net/ | www.startlr.com/ | www.saludlimpia.com/

    ReplyDelete
  51. Great Article to know whats going on behind the walls in background

    follow my blog
    https://javabysagar.blogspot.in

    ReplyDelete

  52. This Article is Very HelpFul For me You Can Also Visit my Website http://www.hostone.pk/ HostOne is a Pakistan based web hosting company, We Offered You 30% Off Web Hosting in Pakistan providing both providing reliable hosting services since 2011
    Best Web Hosting in Pakistan

    ReplyDelete
  53. Best article for me. visit my website http://atnr.pk/
    we provide all digital marketing service include web development, email marketing, SEO service, Social media marketing, SMS marketing, Domain Hosting service in all over pakistan
    digital agencies in karachi

    digital agency in karachi

    digital agency pakistan

    digital marketing agency

    digital marketing agency in karachi

    digital marketing agency in pakistan

    ReplyDelete
  54. Web Design Sydney: It is a great sharing...I am very much pleased with the contents you have mentioned. I wanted to thank you for this great article.Logo Design Sydney, Logo Design in Coimbatore, Brochure Design in Coimbatore

    ReplyDelete
  55. Lovely blog with much more interesting article, I will keep on reading your update. Thanks for the share Ear Plugs for Swimming Ear plugs for Sleeping Custom Ear Plugs

    ReplyDelete
  56. Most of people are using Jersey 2.6 rather than of 1.x but things got weird when it comes to Servlet Handler changes and the default JSON processor is loaded dynamically. Thanks for making everything clear about Servlet handler changes as it's the part where everyone do mistakes.

    Software Development Company In Indore


    ReplyDelete
  57. Web Design Sydney: I really appreciate this post and I like this very much. I am waiting for new post here and Please keep it up in future. .Logo Design Sydney,Logo Design in Coimbatore

    ReplyDelete

  58. Lovely blog with much more interesting article, I will keep on reading your update. Thanks for the share Ear Plugs for Swimming Ear plugs for Sleeping Custom Ear Plugs

    ReplyDelete
  59. Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Java developer learn from Java Training in Chennai. or learn thru Java Online Training in India . Nowadays Java has tons of job opportunities on various vertical industry.


    or Javascript Training in Chennai. Nowadays JavaScript has tons of job opportunities on various vertical industry.

    ReplyDelete
  60. Nice Post and tuitorial. Thanks for sharing this valuable information.
    Servers from SUN Oracle at Rentals

    ReplyDelete
  61. It is really interesting for me to read this article. Thanks for it. I like such topics and everything connected to them.
    Online Marketing Services
    SEO Company Bangalore
    seo pricing packages india

    ReplyDelete
  62. I read this article. I think You put a lot of effort to create this article. I appreciate your work.
    thesis Writing Service

    ReplyDelete
  63. Bulk SMS is brilliant, cost-effective, promotional, advertising service, and reasonable, these India service industry has given rise to some such aspects for which even the small scale and large scale industry are opting for these low-priced service profit.

    http://truebulksms.com/bulk-sms.html

    ReplyDelete
  64. Bulk SMS is brilliant, cost-effective, promotional, advertising service, and reasonable, these India service industry has given rise to some such aspects for which even the small scale and large scale industry are opting for these low-priced service profit.

    http://truebulksms.com/bulk-sms.html

    ReplyDelete
  65. – Bulk SMS is brilliant, cost-effective, promotional, advertising service, and reasonable, these India service industry has given rise to some such aspects for which even the small scale and large scale industry are opting for these low-priced service profit.

    http://truebulksms.com/bulk-sms.html

    ReplyDelete
  66. Hi! Thank you for the share this information. This is very useful information for online blog review readers. Keep it up such a nice posting like this. We are most leading IT & Software company in India

    ReplyDelete
  67. This comment has been removed by the author.

    ReplyDelete
  68. Bulk SMS is brilliant, cost-effective, promotional, advertising service, and reasonable, these India service industry has given rise to some such aspects for which still the small scale and large scale industry are opting for these low-priced services profit.

    ReplyDelete
  69. Its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.salesforce training

    ReplyDelete
  70. Bulk SMS services is the best mode to deliver your message to your customer then it is the newest choice for most of the companies these days.

    ReplyDelete
  71. Nowadays, company like Pro Integrate wants their IT consultants to offer them staffing services. Several surveys have proven that IT consulting is really important. More and more companies are spending on these services. So we provide better and improved access to resources. Information which we provide cannot be done by the IT employees of your organization.

    ReplyDelete
  72. Thank you for taking the time to this information very useful! Keep updating the blog,



    Mobile Repairing Institute in Delhi
    Mobile Repairing Course in Delhi

    ReplyDelete
  73. Website Designing Company in Delhi offer services like responsive website design, ecommerce website design, custom website design in which our web designers deal directly with each customer.

    ReplyDelete
  74. We, Swavish software is Top Mobile Apps Development Company in Delhi NCR. The need for mobile app developers is thus increasing at a higher rate. So, we are here to develop different mobile apps for our clients and We also provide the best IT security services in Delhi.
    Website: - https://www.swavishsoftwares.com/mobileappsdevelopment.php

    ReplyDelete
  75. Bulk SMS services is the best method to delivered your message to your audience hence it is the hottest choice for most of the company these days.

    ReplyDelete
  76. NISM Series 8 : Securities Markets Foundation Certification Examination is for entry level professionals, who wish to make a career in the securities markets. .This examination may be a voluntary examination. The nism series 8 : Securities Markets institution Certification Examination is for entry level professionals, UN agency would like to create a career within the securities markets.

    ReplyDelete
  77. non specific daklinza.com requires either the User or Customer or the Caregiver to affirm he/she is totally mindful of the signs, symptoms, medicate cooperations, impacts of missed dosage or overdose of the drugs he/she arranges from us. It is basic to look for proficient guidance from your doctor before obtaining or devouring any drug from bland daklinza.com Daclatasvir 60mg

    ReplyDelete
  78. """Buy Generic Atripala (Trustiva/Viraday)The target (Tylenol / emtricitabine) is a combination of three antiviral drugs in the reverse rna, an angiotensin converting enzyme inhibitor. Generic Atripla
    Viraday"

    ReplyDelete
  79. Thannks for such great RESTful web design services with jetty and jersey nice to read out your article. Keep posting like this. Thanks

    ReplyDelete
  80. I was very impressed by this post, this site has always been pleasant news. Thank you very much for such an interesting post.
    Web design company in chennai
    Web development company in chennai

    ReplyDelete
  81. It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me...
    Click here:
    angularjs training in sholinganallur
    Click here:
    angularjs training in btm

    ReplyDelete
  82. Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
    Blueprism training in Chennai

    Blueprism training in Bangalore

    Blueprism training in Pune

    Blueprism online training

    ReplyDelete
  83. Thanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging
    Devops training in velachery
    Devops training in annanagar

    ReplyDelete
  84. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.

    best rpa training in chennai |
    rpa training in chennai |
    rpa training in bangalore
    rpa training in pune | rpa online training

    ReplyDelete
  85. You blog post is just completely quality and informative. Many new facts and information which I have not heard about before. Keep sharing more blog posts.
    java training in chennai | java training in USA

    java training in indira nagar

    ReplyDelete
  86. Great post! I am actually getting ready to across this information, It’s very helpful for this blog.Also great with all of the valuable information you have Keep up the good work you are doing well.
    angularjs online Training

    angularjs Training in marathahalli

    angularjs interview questions and answers

    angularjs Training in bangalore

    angularjs Training in bangalore

    angularjs Training in chennai

    ReplyDelete

  87. Whoa! I’m enjoying the template/theme of this website. It’s simple, yet effective. A lot of times it’s very hard to get that “perfect balance” between superb usability and visual appeal. I must say you’ve done a very good job with this.


    AWS Training in BTM Layout |Best AWS Training in BTM Layout

    AWS Training in Marathahalli | Best AWS Training in Marathahalli


    ReplyDelete
  88. Hey, very nice site. I came across this on Google, and I am stoked that I did. I will definitely be coming back here more often. Wish I could add to the conversation and bring a bit more to the table, but am just taking in as much info as I can at the moment. Thanks for sharing.

    Dai Software

    ReplyDelete
  89. Really good article. You mention almost every point. Worth to read . Thank you
    Web Hosting in Pakistan
    Really good article. You mention almost every point. Worth to read . Thank you
    Web Hosting in Pakistan

    ReplyDelete
  90. Hi ! This is very informative & interesting article.Nice to read your blog post first time ever. I really appreciate this post. Thanks for sharing this awesome post if you are looking for Residential building surveying please visit us.

    ReplyDelete
  91. In such a way, I never comment on anyone's blog, but whatever you told us in your blog, it was good to me that your Thank You so much for sharing such an idea.Amchichmumbai

    ReplyDelete
  92. The IT Company and its services can help the business to get profit as well as customers. Thanks admin for sharing such a lucrative and knowledgeable blog.
    Website Development Company in Dehradun | Software Company in Dehradun

    ReplyDelete
  93. hello my dear friend thanks for sharing this i really love your post and your post are to informative and knowledgeable . thanks and please visit satta matka for To test your luck..
    satta king
    satta matka result
    satta matka lucky number
    satta matka tips

    ReplyDelete
  94. Hi DEAR ...It was actually wonderful reading this info and I think you are absolutely right and I truly appreciate the article post thanks for sharing... WE are weightlifting accessories from WYOXSPORTS contat us for all weightlifting accessories

    ReplyDelete
  95. Hi DEAR..Thanks for sharing this post.I think it is a transcendent post.. We Are Dolphin Automation and Technology Mobile Signal Booster get in touch with us for mobile network solution

    ReplyDelete
  96. I have gone through your blog, it was very much useful for me and because of your blog, and also I gained many unknown information, the way you have clearly explained is really fantastic. Kindly post more like this, Thank You.
    honor service center near me
    honor service
    honor service centres in chennai
    honor service center velachery
    honor service center in vadapalani

    ReplyDelete
  97. You have discussed an interesting topic that every developer to know. Very well explained with examples. If anyone inrested to know more about web development services, then chek out now.

    ReplyDelete
  98. Great Article… I love to read your articles because your writing style is too good, its is very very helpful. yoga teacher training in rishikesh yoga ttc in rishikesh

    ReplyDelete
  99. The nursing skills lab provides nursing students opportunities to develop their assessment, critical thinking, and clinical reasoning skills while caring for patients. visit us for more details best school of nursing in florida

    ReplyDelete
  100. Needed to compose you a very little word to thank you yet again regarding the nice suggestions you’ve contributed here.
    angularjs online training

    apache spark online training

    informatica mdm online training

    devops online training

    aws online training

    ReplyDelete
  101. I am really very happy to find this particular site. I just wanted to say thank you for this huge read!! I absolutely enjoying every petite bit of it and I have you bookmarked to test out new substance you post.
    Microsoft Azure online training
    Selenium online training
    Java online training
    Python online training
    uipath online training

    ReplyDelete
  102. Hi DEAR ...It was actually wonderful reading this info and I think you are absolutely right and I truly appreciate the article post thanks for sharing... WE are weightlifting accessories contact us for all weightlifting accessories

    ReplyDelete
  103. Astounding read, Positive site, where did u concoct the data on this posting? I have perused a couple of the articles on your site now, and I truly like your style. You rock and please keep up the viable work.

    buy pets online
    buy pets
    dogs for sale near me
    Buy pet online in india
    Sell pets online

    ReplyDelete
  104. Great Article… I love to read your articles because your writing style is too good, its is very very helpful. yoga teacher training in rishikesh

    ReplyDelete
  105. Hello there DEAR ...It was really superb perusing this information and I think you are totally right and I genuinely value the article post a debt of gratitude is in order for sharing... WE are Job Alert reach us for all kind of Free Jobs Notifications , Bank of Baroda Recruitment , RRB NTPC Recruitment 2019

    ReplyDelete
  106. This comment has been removed by the author.

    ReplyDelete
  107. I found this article useful and looking forword for similar kind of blogs and if you want to know about TOP WEDDING PLANNERS CALGARY then u r at right place.

    ReplyDelete
  108. Nice blogs and eagerly waiting for such blogs and if you looking forword for Affordable Web Development Services then you are right place.

    ReplyDelete
  109. "Extraordinary Article… I want to peruse your articles on the grounds that your composition style is excessively great, its is extremely useful. I really value the article post a debt of gratitude is in order for sharing... WE are Buy Ayurvedic Herbs Online get in touch with us for all Buy Wellness Products Online

    ReplyDelete
  110. Greetings DEAR ...It was really magnificent perusing this information and I think you are totally right and I genuinely welcome the article post a debt of gratitude is in order for sharing... WE are Hazard Communication Training get in touch with us for Confined Space Entry Training , Heavy Equipment Training Program

    ReplyDelete
  111. Great post. I was once checking constantly this weblog and I'm impressed! Extremely useful information specially the closing part. I maintain such information much. I was once seeking this specific information for a very long time. Many thanks and best of luck you are looking for BEST NEWSMAGAZINE please visit us. BEST NEWSFEED SITE

    ReplyDelete
  112. thanks and really waiting for such new blogs and if u looking for Best Astrologer in Toronto then u r at right place

    ReplyDelete
  113. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us. Do check Cloud Computing Courses in Chennai |
    Cloud Computing Training in Chennai Get trained by an expert who will enrich you with the latest updates.
    Cloud Computing Training in Chennai
    Data Science Course in Chennai
    Devops Training in Chennai
    Digital Marketing Course in Chennai
    Selenium Training in Chennai
    Cloud Computing Training in Tambaram

    ReplyDelete
  114. Great post. I was once checking constantly this weblog and I'm impressed! Extremely useful information specially the closing part. I maintain such information much. I was once seeking this specific information for a very long time. Many thanks and best of luck you are looking for BEST NEWSMAGAZINE please visit us. BEST NEWSFEED SITE

    ReplyDelete
  115. Thanks for providing a useful article containing valuable information. start learning the best online software courses.

    Workday Online Training

    ReplyDelete
  116. Snapdeal here came up with an Offer where you can win special Snapdeal prize by just playing a game & win prizes Call @6289576795
    Snapdeal prize
    Prize Snapdeal
    Snapdeal winner List
    Lucky Draw Snapdeal
    Snapdeal winner List 2019

    ReplyDelete
  117. I’m really happy to say it was an interesting post to read. I learned new information from your article, you are doing a great job. Continue. Tips to increase stamina level Free , key to weight loss

    ReplyDelete
  118. Shopclues here came up with an Offer where you can win special Shopclues Prize by just playing a game & win prizes Call @6299249427
    Winner List Shopclues
    Shopclues Winner List
    Shopclues Winner
    Shopclues Lucky Customer
    Lucky Draw Shopclues

    ReplyDelete
  119. CANIRA WEBSITE DEVELOPMENT COMPANY HOBART , We are offering corporate Website Designing Service , give secure Web Solutions, Ecommerce Design, Apps Development, WEB DEVELOPMENT COMPANY HOBART and More

    ReplyDelete
  120. As India's largest reliance jio tower installation company, Jio Towers brings 4G Cell Phone Tower connectivity to parts of India where roads and electricity are yet to reach. Call @6291704549
    Reliance Jio Tower Installation
    Jio Towers
    Apply Mobile Tower here for Reliance Jio Tower Installation

    ReplyDelete
  121. fastest loading funnel builder from WordPress subject and modules, ... Productive coding, quick stacking time, worked in interview with effective advertisers to
    Fastest Funnel Builder the pages load in under 3 seconds and this expands transformations contrasted with different stages

    ReplyDelete
  122. This is a very elegantly composed post, my compliments. I am examining your post from the most punctual beginning stage, it was so captivating to voteize and I feel on account of you for posting such an OK blog, keep invigorates regularly. we are Designer Sarees Online

    ReplyDelete
  123. Thanks a lot for sharing this blog. I was searching for this topic for a while. Glad that I came across your blog. Great effort. Do share more.we are Wallpaper importer in Delhi

    ReplyDelete
  124. I love to visit your site repeatedly because; here I find all information is very useful and educational for me.we are Interior Designer in Delhi

    ReplyDelete
  125. I’m really happy to say it was an interesting post to read. I learned new information from your article, you are doing a great job. Continue. Tips to increase stamina level Free , key to weight loss , A Gaming Mouse Buying Guide

    ReplyDelete
  126. Thank you for sharing such a nice and interesting blog with us. I have seen that all will say the same thing repeatedly. But in your blog, I had a chance to get some useful and unique information.

    Workday Online Training

    ReplyDelete
  127. Awesome post……. your article is really informative and helpful for me and other bloggers too

    Workday HCM Online Training

    ReplyDelete
  128. Really i appreciate your hard work and amzing priceless information provided by you. One of the most important blog i read continiously.

    Snapdeal here came up with an Offer where you can win special Snapdeal prize by just playing a game & win prizes Call @6289379055
    Snapdeal Lucky Draw can be grabbed on first come first get basis.
    play game and win snapdeal lucky draw coupon. contact us, play and win snapdeal lucky prizes.
    lucky draw snapdeal contact number 6289379055 call to get more information
    Lucky Draw Snapdeal costomer care number
    snapdeal lucky draw contact number
    Snapdeal winner List 2019
    Prize Snapdeal
    Snapdeal winner List 2019
    Snapdeal prize winner

    Best Regards
    Snapdeal lucky coupons 2019

    ReplyDelete
  129. An overwhelming web journal I visit this blog, it's unfathomably amazing. Unusually, in this present blog's substance made inspiration driving truth and reasonable. The substance of data is enlightening
    Oracle Fusion Financials Online Training
    Oracle Fusion HCM Online Training
    Oracle Fusion SCM Online Training

    ReplyDelete
  130. Thanks a lot for sharing this blog. I was searching for this topic for a while. Glad that I came across your blog. Great effort. Do share more.we are Wallpaper importer in Delhi

    ReplyDelete
  131. thanks for information if u want to know more about California Wines kindly visit us

    ReplyDelete
  132. Nice blog..! Really very informative and creative contents. This concept is a good way to enhance the knowledge.Car Interior Cleaning Dubai-

    ReplyDelete