Using Clockwork with Codenvy

Use Codenvy Factory to instantly start working with a sample Clockwork API project:


This tutorial will explain the details of integrating the Clockwork API into Codenvy. Clockwork API provides your application the ability to send SMS to any numbers. The explanation has been done with a very basic Java servlet project that makes use of the Clockwork API to explain some basic features provided by the API.

Register With Clockwork

Before proceeding to the creation of the Java project, please register at https://app3.clockworksms.com/signup with your email id and a mobile number that will receive a activation code to generate the API key which will be used for the integration:
clockwork-signup

On registering the application, you can see your keys at https://app3.clockworksms.com/Keys:
clockwork-apikey

You can get more information about the Clockwork API at
http://www.clockworksms.com/doc/

Create a Project

Now, login to your Codenvy workspace and create a WAR project named as ‘ClockworkSample’. This will have the following structure:
clockwork-structure

Create pom.xml File

To make use of the Clockwork API through HttpClient as a servlet, please update the pom.xml to include the HttpClient and Java EE Web API jars and the servletapi jar into your project as Maven dependencies:

<dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.2.5</version>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>6.0</version>
    </dependency>
  </dependencies>
  <repositories>
     <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
     </repository>
  </repositories>

This will include these jars in your project as follows:
clockwork-dependencies

Create Java Class

Now create a Java servlet class named ClockworkServlet.java that will talk to the Clockwork API with the Http request URL to send a SMS to a number and then get a Http response back with the response header and the response body which will be then displayed on the browser through a JSP. The response body will contain the message Id if the delivery has been successful. All this is done inside the method doGet() in the sample source Java class.

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        StringBuffer sb = null;
        try {
            String getURL = "https://api.clockworksms.com/http/send.aspx?key=aaaaaaaaaaaaaaaaaaabbbbbbbbb&to=441234567890&content=Hello+World";

            HttpGet req = new HttpGet(getURL);
            req.addHeader("X-Originating-Ip", "80.254.147.148");
            HttpResponse res = client.execute(req);
            HttpEntity entity = res.getEntity();
            String responseString = new BasicResponseHandler().handleResponse(res);
            if (entity != null) {
                EntityUtils.consume(entity);
            }

            sb = new StringBuffer("<br/>Simple GET request to url : "+ getURL +"<br/><br/>");
            sb.append("*** Request headers ***").append("<br/>");
            Header[] requestHeaders = req.getAllHeaders();
            for (Header header : requestHeaders) {
                sb.append(header.toString()).append("<br/>");
            }
            sb.append("***********************").append("<br/><br/>");

            sb.append("*** Response headers ***").append("<br/>");
            sb.append(res.getStatusLine()).append("<br/>");
            Header[] headers = res.getAllHeaders();
            for (Header header : headers) {
                sb.append(header.toString()).append("<br/>");
            }
            sb.append("***********************").append("<br/><br/>");

            sb.append("*** Response Body ***").append("<br/>");
            sb.append(responseString).append("<br/>");

        } catch (Exception ex) {
            sb = new StringBuffer(ex.toString());
        }

        request.setAttribute("data", sb.toString());
        RequestDispatcher rd = request.getRequestDispatcher("/success.jsp");
        rd.forward(request, response);
   }

Create index.jsp File

Your Codenvy project will have an index.jsp which will invoke the Servlet class -

<%
   	response.sendRedirect("/hello");
%>

Create success.jsp File

Your Codenvy project will have a success.jsp which will be invoked from the ClockworkServlet class to display the response on the browser -

<html>
  <body>
    <div>
      <p>Data : <br/><%=request.getAttribute("data") %></p>
      <br/>
    </div>
 </body>
</html>

Create web.xml File

The servlet mapping ‘/hello’ is defined in the web.xml as follows –

<web-app>
  <display-name>Clockwork Servlet App</display-name>
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.codenvy.ClockworkServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

Now you build and run your Codenvy project and the Http response with the message Id will be displayed in the browser:

clockwork-output