Showing posts with label Tutorial. Show all posts
Showing posts with label Tutorial. Show all posts

Saturday, September 28, 2013

It's all about iOS 7

It is all about iOS 7. SO here is a list of resources you will surely enjoy:
  • Apple Design Goes Flat with iOS 7 - the title of the blog post is a little misleading as the author gives an overview on the deference, clarity, and depth themes of iOS 7. 
  • iOS 7 by Tutorials - book with a lot of tutorials on iOS 7 APIs (UIKit Dynamics, Motion Effects, Text Kit, Unite testing / CI in Xcode 5, and many more). The list of authors is impressive as well (Ray Wenderlich, Jeremy Olson, and many more). Haven't yet ordered the book, but it is on the top of my list.  
  • The Essential iOS 7 Developer's Guide - similar to the above resource, it provides 11 guides to iOS 7. Each tutorial is small and to the point, easy to read and go through, while also providing a little bit of code as well.
  • iOS 7 review - great, comprehensive, and more importantly a balanced review of iOS 7 written by Rene Ritchie of iMore. 

Friday, August 21, 2009

Invoke a Web Service from JSP

This tutorial is a small example on how to call a SOAP-based Web Service from a browser-based client (using HTML and JSP). As an application server, we will use GlassFish. When you download GlassFish, make sure you use the preview version for this tutorial.

The example takes a number as its input and computes the corresponding Fibonacci number. We will start with the Web Service:
package blog.webservice;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class FibonacciNumber {

@WebMethod
public int fibNum(int n) {
int first = 1, fib = 1;
for (int i = 3; i <= n; i++) {
int temp = first + fib;         
first = fib;         
fib = temp;         
}     
return fib;     
}
}

After compilation of the above code, you take the resulting class file and copy it to the blog/WEB-INF/classes/blog/webservice directory. Next step is to package the WEB-INF directory into a WAR file for deployment by executing the following command:
% jar cvf fib.war WEB-INF

The WAR is then copied to GLASSFISH_HOME/domains/domain1/autodeploy, where GLASSFISH_HOME points to the GlassFish install directory. If the deployment succeeds, a second file named fib.war_deployed appears in a few seconds in the autodeploy directory.
The good part about GlassFish is that you do not need to manually (using wsgen) generate the JAX-B artifacts that the service requires, because the current Metro web services stack release ships with GlassFish, automatically generating these artifacts. The WSDL file is also automatically generated and will be used on the client side as described in one of the sections below.

To generate the client-side artifacts (client.FibonacciNumber, client.FibonacciNumberService, etc), we will use wsimport on the wsdl file generated aytomatically by GlassFish:

wsimport -keep -p client http://localhost:8080/fib/FibonacciNumberService?wsdl

Next step is writing the client-side code, namely the HTML page, two JSP pages, and one xml configuration file.

The HTML page is simple and straightforward:
<html>
<body>
<form method = 'POST' action = 'fib.jsp'>
Input number for Fibonacci: <input type = 'text' name = 'inputNumber'><br/><hr/>
<input type = 'submit' value = ' Get Fibonacci '/>
</form>
</body>
</html>

The actual JSP that will invoke the FibonacciNumber web service is below:
<%@ page errorPage = 'errors.jsp' %>
<%@ page import = "client.FibonacciNumber" %>
<%@ page import = "client.FibonacciNumberService" %>
<html>
<body>
<%! private int fibNo, temp; %>
<%
String inputString = request.getParameter("inputNumber");
if (inputString != null) {
temp = Integer.parseInt(inputString.trim());
}

FibonacciNumberService service =  new FibonacciNumberService();
FibonacciNumber port = service.getFibonacciNumberPort();
fibNo = port.fibNum(temp);

%>
<p>fib(<%= temp %>) = <%= fibNo %></p>
<a href = 'index.html'>Try another number</a>
</body>
</html>

Of course, clients should not see such messages displayed in the browser. Consider this error page more for the developer.

The web.xml deployment document is:
<?xml version = '1.0' encoding = 'UTF-8'?>
<web-app xmlns = 'http://java.sun.com/xml/ns/javaee'
xmlns:xsi = 'http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation = 'http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd'
version = '2.5'>
<error-page>
<exception-type>java.lang.NumberFormatException</exception-type>
<location>/errors.jsp</location>
</error-page>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

Any input to the HTML that is not a number will be caught and an error message will be displayed through the errors.jsp page.

Once we have all the files, we package them into a WAR:
jar cvf fibClient.war *.html *.jsp WEB-INF

and deploy it the same way as we did with fib.war.

For testing, open the http://localhost:8080/fibClient/ URL in your favorite browser.