Create Web Services using Axis Java2WSDL, WSDL2Java and Eclipse for all Servers manually – Part 2

With all the basic configurations done as specified in the last Article we continue to develop the Business logic.

  1. Create a class named Calculator.java, place four public methods add, subtract, multiply and delete and place the appropriate logics in it.
    package com.itechgenie.services.impl;
    public class Calculator {
    	public int add(int a, int b) {
    		return a+b  ;
    	}
    
    	public int subtract(int a, int b) {
    		return a-b ;
    	}
    
    	public int multiply(int a, int b) {
    		return a * b ;
    	}
    
    	public int divide(int a, int b) throws ArithmeticException {
    		return a /b ;
    	}
    }
  2. This is the class that has to be exposed as the Web Service and we write the funky TestRunner.java class to do all out operations like creating WSDL file, creating stub file etc.
  3. Generate WSDL file using Java2WSDL: Axis has a tool called Java2WSDL, which generates a WSDL file for a web service using a Java class. Java2WSDL file takes the following arguments.
    1. o – name for WSDL file -> calculator.wsdl
    2. n – target namespace -> mx:com.itechgenie.services.Calculator
    3. l – url of web service -> http://<host:port>/<Project-Name>/services/calculator

    Summing up the above arguments the following command line arguments is created.

    String java2wsdlArgs[] = {"-ocalculator.wsdl", "-nmx:com.itechgenie.services.Calculator", "-v", "-lhttp://localhost:8080/axis/services/calculator", "com.itechgenie.services.Calculator"} ;

    Read this Article on how to run the command line java tools from Eclipse.
    You can run the Java2WSDL as follows in the TestRunner class. Naah, don’t ask how, just put the following lines the main method and press CTRL + F11.

    try {
    	Java2WSDL.main(java2wsdlArgs) ;
    } catch (Exception e) {
    	e.printStackTrace() ;
    }

    The Java2WSDL class has the System.exit(0); method called from inside. So lines after the Java2WSDL will not be executed. To get the other arguments supported you can just run Java2WSDL.main(new String[0]) ;. This will display all the arguments supported by Java2WSDL Utility and this works for other utilities also.
    After running this Utility you will find the calculator.wsdl file created in the root folder of the Project.

  4. Generate Server side and Client side codes using WSDL2Java: WSDL2Java is another tools provided by the AXIS, which can generate server side and client side Java classes using a WSDL file. These classes are needed for deploying the web service and also for accessing the web service using a Java client. This tool expects the following argument which includes the WSDL file generated in the last step.
    1. o – output folder -> src
    2. p – package for generated classes -> mx:com.itechgenie.services. generated
    3. s – generate server side classes as well
    4. *.wsdl – WSDL file of any web service

    Summing up the above arguments the following command line arguments is created.

    String wsdl2javaArgs[] = {"-osrc", "-pcom.itechgenie.generated.service", "-s", "calculator.wsdl", "-v"} ;

    Read this Article on how to run the command line java tools from Eclipse.
    Now run the WSDL2Java utility as follows.

    try {
    	WSDL2Java.main(wsdl2javaArgs) ;
    } catch (Exception e) {
    	e.printStackTrace() ;
    }

    Once the above command is run, Just refresh the project in eclipse, you will find the following files created inside the “com.itechgenie.generated.service” package.

    1. Calculator.java
    2. CalculatorService.java
    3. CalculatorServiceLocator.java
    4. CalculatorSoapBindingImpl.java
    5. CalculatorSoapBindingStub.java
    6. deploy.wsdd
    7. undeploy.wsdd

    The above files can be used in both Server and Clients side as Skeleton (CalculatorSoapBindingImpl.java) and the Stub (CalculatorSoapBindingStub.java) respectively.

  5. Binding the business logic with the Skeleton: Take the Skeleton file and you will find the exact methods that were available in our Business logic class (Calculator.java.).
    Create a instance of the Business class and invoke the appropriate method from the skeleton as follows (Find the lines highlighted in yellow.).

    package com.itechgenie.generated.service;
    
    import com.itechgenie.services.Calculator;
    
    public class CalculatorSoapBindingImpl implements com.itechgenie.generated.service.Calculator{
    
    	Calculator calculatorImpl = new Calculator() ;
    
        public int add(int in0, int in1) throws java.rmi.RemoteException {
        	return calculatorImpl.add(in0, in1) ;
        }
    
        public int subtract(int in0, int in1) throws java.rmi.RemoteException {
        	return calculatorImpl.subtract(in0, in1) ;
        }
    
        public int divide(int in0, int in1) throws java.rmi.RemoteException {
        	return calculatorImpl.divide(in0, in1) ;
        }
    
        public int multiply(int in0, int in1) throws java.rmi.RemoteException {
        	return calculatorImpl.multiply(in0, in1) ;
        }
    
    }

    That’s it; we are now done with the development part of the Web Service. All we have to do is to configure to make the service up and running.

  6. Last configurations to make our service available: Open the server-config.wsdd file inside the WEB-INF folder. You will find the following lines.
      <!--  Your Service from the deploy.wsdd file - Starts here -->
    
      <!--  Your Service from the deploy.wsdd file - Ends here -->

    Keep the file aside and open the deploy.wsdd from the WSDL2Java generated files. Copy the <service> … </service> tag completely and paste in between the comments said above.

  7. Conclusion: You can follow the steps 6 to 11 and create as many services as you want and paste them in the server-config.wsdd.
    With this the configurations for the Web Service is over. Export the Project as a War and deploy it in Web Server and point to the URL http://<host:port>/<Project-Name>/services
  8. This URL should display all the services generated from steps 6 to 11 with the links the WSDL files for the above.

    Click here to download the sample project.

Create Web Services using Axis Java2WSDL, WSDL2Java and Eclipse for all Servers manually – Part 1

There a lot of Web Service implementations available in market. The most widely used among them is the Axis way of implementation. There are a lot of Examples available in the web to create expose, consume the Web services using the Axis packages. But it is not feasible to work get the Axis complete packages inside corporate offices all of a sudden and yes I faced the same situation.

After some investment of time I found some funky stuff in web to create a Web Service with just a couple of jars in hand and off-course with the help of Eclipse.

Prerequisites:

  1. Eclipse, any version should be ok, but I was using the Eclipse Indigo with Ant installed in it.
  2. The set of jars needed. Jars are included in the Project sample.
    1. axis.jar
    2. commons-discovery-0.2.jar
    3. commons-logging.jar
    4. jaxrpc.jar
    5. log4j-1.2.15.jar
    6. saaj.jar
    7. wsdl4j.jar
    8. The sample web.xml, server-config.wsdd (These will be used later in the development steps).

Steps to develop Web Services:

  1. Create a Dynamic Web Project “SampleWebService” in Eclipse.
  2. Place the above said jars in the WEB-INF/jars folder.
  3. Open the Web.xml file and copy the following contents into it somewhere between tags. These contents are available in the sample attached.
      <servlet>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
      </servlet-mapping>
      <servlet>
        <display-name>Axis Admin Servlet</display-name>
        <servlet-name>AdminServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/servlet/AdminServlet</url-pattern>
      </servlet-mapping>
  4. Copy the server-config.wsdd next to web.xml file. We will reuse this file once again after complete the business logic of the server.
  5. Now the basic configurations are complete, we have to develop the business logic for the Web Service. In my example I have taken the Old school Calculator sample.
    Click here to go to the next Part of this article.

Top things to look at before developing a Web Site – Part 2

  1. Web Hosting: Once the domain name is selected the hosting account has to be selected. There are different hosting types available. Most commonly used hosting is Shared web hosting. Even though the Free web hosting is used most of the users prefer the Shared hosting and VPS hosting. Beginners can start with a free web hosting account and go for the Shared and the VPS hosting types based on the budgets.
  2. Development tools: After all the above elicitationsare done the development process can be started. The below tools can be used to make the development faster.
    1. Search domain name here and check if it is already registered. If it’s already registered the site might display set of alternative domain names available.
    2. Set up a local environment and test your website. Use XAMPP, IIS, Tomcat to setup Local environments with PHP, .Net, Java languages respectively.
    3. Use Komposer, Amaya to develop the PHP type websites. Obviously only the Visual Studio is used to develop .Net type websites. I prefer using the Eclipse and its plugins to develop the PHP and Java type sites. They provide a very good interface to design, develop and test, integrating with the Local servers.
    4. Use FTP clients like Filezilla, Net2Ftp to upload the tested local files to the web servers.
    5. Many Open source tools that are alternative to the proprietary software are available Here and Here.
  3. CMS tools: Instead of developing a whole website from scratch, there are a lot of Content Management Systems available in the market to make the development time easier and faster. Some commonly used CMS tools are WordPress, Joomla, Drupal etc. The WordPress is most widely used CMS for blogging. Similarly select a tool to that suits the site type.
  4. Testing for Browser support: Once the development of the site is completed the testing phase comes in place. Even though the testing is one of the Development Life Cycle step, the Browser support check is a most important thing to deliver your website to your clients as you wish them to be. This is one of the important advantages when using the CMS tools. Because the development community takes care of all these things so that you don’t need to put your time in. The IE Tester is used to check test the website display in the Internet Explorer versions from IE6 to IE10 While writing this article. Alternatively there are a lot of online tools to do the same. The Browsershot.com takes the screen shots of the website in all the versions of the browsers including different operating system.
  5. Get noticed: After all the above said steps, it is very important to get your site to viewers to whom it is intended to be. This set is commonly known as Search Engine Optimization (SEO). The SEO plays a very important role in making your website popular. I Intent to write a separate article on SEO. But I am placing a simple step to start the SEO.
    1. Submit your site to popular Search engines like Google, Bing.
    2. Once the site is placed the search engine will index the site from there on. As your site’s content becomes unique and popular they will be shown in the search results and visitors will start pouring in.

Top things to look at before developing a Web Site – Part 1

  1. Content Type (Static or Dynamic): The First and foremost thing a Web developer must look at is the “Content type”. Take a justified side between static and dynamic content when you go for the web site. If the site contains only a 5 to 10 pages with just few contents that may not have new change then the web site will be a Static that does not need much of server side support. But if you go for a site with Dynamic contents what may change in time and needs customization then you are onto a Dynamic site which needs immense Server support. Most of the sites now days are dynamic contents which need the servers support.
  2. Development Language: The Language in which you are going to develop the site is very important after selecting the content type. The widely used Language or the scripting for the web developing is PHP. Other famous technologies .Net, Java, Python, Perl etc. Every language has its own pros and cons. The developing languages have to be selected as per the need and knowledge. Usually scripting languages are easier to learnt and develop faster for beginners.
  3.  Web Servers: The web servers are the next thing we should care about. All the Web servers support the static content sites with just the HTML contents in it. When we look for the Server side scripting the Web Servers play a major role in providing the support for them. Web servers can be selected based on the Language by which you wanted to develop the websites. Even though the web servers can support any of the language with a set of customization, it’s better to go for a Web server which can natively support your development Language.  Because usually the customization never comes with less cost. Here are the widely used Web servers in market.
    1. Apache – For PHP natively and with Java support
    2. IIS – For .Net natively and PHP and Java support
    3. Tomcat – For Java natively and PHP support
  4. Domain name: The domain name is the one which is going to show up your stuffs to the World. They play a very important role and they are the entry point that visitors use to view your website on the web. The domain name can be of any length, but my personal opinion is to keep it as simple as possible and less than 8 characters. Choose a domain name that is very relevant to your site content, short, simple, crisp and easy to remember. If you could not specify your theme in just a work keep an abbreviation of the theme as domain name.
  5. Selecting a TLD: A top-level domain (TLD) is one of the domains at the highest level in the hierarchical Domain Name System of the Internet. In other words, the domain names ends with the extensions like .com, .edu, .org, .web, .net etc which are knows as TLDs. Select a TLD which is related to your Site theme, locations and other factors.
    1. Examples: If your site is related to education, select TLD as .edu, If yours is a big Organization select .org, if the service you provide is country specific then select a country level TLD like .us, .ca, .in, .ph, co.in, .co.ca, co.in etc.
    2. Make sure you select a reasonable TLD and also consider the cost factors. Some TLDs are very costlier.
    3. If you could not find a specific TLD for your site theme just select the .com, which is most widely used.

Filezilla FTP client – 421 Sorry, cleartext sessions are not accepted on this server

Sometimes we get a error Message when using the FTP clients: 421 Sorry, cleartext sessions are not accepted on this server.

Problem: This error mean that the FTP provider has secured the access with Transport Layer Security (TLS) or its predecessor, Secure Sockets Layer (SSL).

Solution:

Change the protocol of the host to “ftpes://”

The configuration will be

Host: ftpes://hostname.com
port: 21

Dynamically adding HTML components using JavaScript

At times there will be requirements to dynamically add a scetion of HTML multiple times in UI. This can be achived by using JavaScript. One of the implementation for such a scenario is addressed in the following example.
Requirement:
In thie example, there was a need to add a row of three Text boxes, select box to be added dynamically to a page on a button click. Validation has to be done to the dynamically added rows.

Design & Usage:

The design of the sample goes like this.

There will be a container to hold the control items, like button to add the component, field to hold the counter. Following the control box an empty container to hold the dynamically added components. Another container just below this, to hold the contents that has to be created dynamically. The contents has to be formulated carefully with the layouts and identifications. To achive the easier identificaiton of the elements inside the components an auto generated ‘ID’ is added to all the elements on the go. To achive this a delimiter is added to all the elements. Here the delimiter used is “ADDIDHERE”. This will be replaced by the counter variable on the go.
Source:
View Sample page.
Download Sample.
Screenshot:

DynaComp

Simple methods to Create, Read and Delete Cookies using JavaScript

Usage:

1. createCookie(name,value,days) – Void function.

name – Name for the cookie to be created
value – Value of the cookie
days(INT – Non Madatory) – Number of days to keep the cookie in browser. If not specified the cookie will expire as soon as soon the browser is closed.

2. readCookie(name) – Returns the value of the cookie.

name – Name given at the time of creation

3. eraseCookie(name) – Void function.

Dependency – createCookie method should be in place.

function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i &lt; ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0)
return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}

Printing Complex Layouts in Adobe Flex – FlexPrintJob

I have come across a basic need for printing a complex layout in the Adobe Flex. After a long search i thought the following will be helpful to all if shared.

Requirements:

1. My layout has the following. Header (Fixed, to be shown in all page.), First Page Header (Displayed only in single page), DataGrid with data rolling out to more than one page, Fixed footer following the DataGrid and a Footer that come only in last page of the Printed output.
2. I am given only the outer most component object and list of all ids of the following components.
3. No server side support is available.

Problems:

1. My DataGrid is not accessible directly.
2. Complex layout and needed Paginationrn3. Fixed, floating header and footers.

Solution:

With reference to the Adobe Live docs, the solutions is almost near except to the complex structure.
rnI have created a Template that holds all the data to be iterated in the report. I contains the sections like Fixed Header, Floating Header, DataGrid, Fixed Footer, Floating Footer as follows.

1. PrintTemplate.mxml

<s:VGroup id="allPageHeader" width="100%" />
< s:VGroup id="firstPageHeader" width="100%" />
< mx:PrintDataGrid id="printDataGrid" width="100%" />
< s:VGroup id="allPageFooter" width="100%" />
< s:VGroup id="lastPagefooter" width="100%" />

2. PrintSample.mxml

protected function doPrint(outerGroup:DisplayObjectContainer, fixedHeaderIDs:ArrayCollection, floatHeaderIDs:ArrayCollection, dataGridId:String, floatFooterIDs:ArrayCollection , fixedFooterIDs:ArrayCollection):void{...}

Here we have to pass the list of IDs of the sections as we need to the doPrint method as follows.

doPrint(outerGroup, fixedHeaderIDs, floatHeaderIDs, dataGridId, fixedFooterIDs, floatFooterIDs);Completing the rendering the print object will be sent to printer and a popup will be shown.

Source Code: Printing in Adobe Flex

Update:

In the above example, if the Printout is taken with the printAsBitmap set to false, then there will be thick line under the header of the DataGrid ie, the PrintDataGrid. To solve this problem you have to use a Header Renderer and set a background color or Image for the header as follows.

<?xml version="1.0" encoding="utf-8"?>
< s:SparkSkin xmlns:fx="http:/s.adobe.com/mxml/2009" xmlns:s="library:/s.adobe.com/flex/spark" xmlns:mx="library:/s.adobe.com/flex/mx" > < s:Rect left="0" right="0" top="0"> < s:fill> < s:BitmapFill source="@Embed(''header.png'')"/> 
< /s:fill> < s:stroke> < s:SolidColorStroke color="grey" /> 
< /s:stroke> < /s:Rect>< /s:SparkSkin>

Save the file as SampleSkin and add this skin to the headerBackroundSkin property of PrintDataGrid in the PrintTemplate as follows.

<mx:PrintDataGrid id="printDataGrid" width="100%" headerBackgroundSkin="SampleSkin" />

This will resolve the issue and set a neat header to the DataGrid in the print.

Easier way to Earn through Yahoo Contributors Network (YCN)

Yahoo has become one of the biggest content producers on net. It all happened when Yahoo purchased Associated contents for $100 millon. Not long after, it was rebranded as Yahoo Contributor Network (YCN). Using YCN, anyone can publish just anything with the push of a button – articles, videos and photos – to associated content and yahoo partenr sites, and get paid for it. YCN opens new opportunity ti freelancers and business alike to find new audineces, earn revenue and promote their brands.

Steps Involved:

1. Registration
This all starts with a simple registration page which asks for personal information. Be sure to include all your websites, Facebook and twitter profiles(and any other relevant networks). YCN will use this information to determine what contributors get which assignments, including localized assignments such as community reports and business  reviews, linking to websites, blogs and online profiles helps extend your network both in and outside the YCN community – and this is vital for making some money out there.

2. Submitting contents
The next step comes the content submission. During this process you will create a title, description, tags, photos and supporting informations like keywords that given maximum possibility to get the search engines to you contents. Be specific to add your own images to your contents than adding the external images, its better avoiding images if not since YCN has its own image guidelines for image use else use Yahoo public gallery. Editors at YCN will manually review your first three submissions for publication.

3. Getting Paid
Earnings with YCN comes in two basic forms, up-front payments and performance payments. All payments are made via PayPal.
Up-front payments can be selected as an option when submitting contents and the review process can take about 10 days. Once accepted, the content is published and eligible for performance payments. Offer is made ranging from $2 to $15.
The Performance payments are based on every 1000 pages viewq your content receives. Payments starts from $1.50 per 1000 views.

4. Content Distribution
When it comes to content distribution there types of distribution are provided.
Exclusive means the yahoo owns the right to the content once it is published. The content cannot have been previously published nor can it be republished by you. This leads to better performance according to YCN, since the contents are not reproduced.
Non Exculsive means content producer is free to publish the content anywhere.
Display-Only means content may have been previoulsy published, can be republished by you and is completely under users control.

5. Getting Business
The content you publish is the commodity. It is shared across a network and you can benefit by including your business or product within this content, references to your industry etc. This takes your product to the people who have not even heard about thus getting in your products and comapny to higher heights.

Internet Explorer 9 to let Users Block “Tracking”

The Next version of Internet Explorer will let users turn on “tracking protection”, a new mechanism that will block specified users, Microsoft says.
The IE 9 announcement came as the U.S Federal Trade commision proposed that consumers be allowed to subscribe to a “do not track” system similar to “do not call” (in short DND) list that blocks telemarketers.
In IE 9, users can turn the feature on and then choose a list of sites to block. Anyone-Including individuals, companies, and consumers-protection groups-can make lists, and users can subscribe to as many as they please. List authors can update lists; the updates will automatically push out to subscribers, as IE 9 will check for updates once a week. The features will not block Flash cookies.
Some users may be surprised by the result, however: Sites that users block for tracking them will also be prohibited from displaying certain content. Websites will be able to detect when visitors are using the list; the sites will therefore know that some page elements may be blocked for the visitors.
The new tracking protection feature is available from the Internet Explorer 9 Release candidate.

The Next version of Internet Explorer will let users turn on “tracking protection”, a new mechanism that will block specified users, Microsoft says.

The IE 9 announcement came as the U.S Federal Trade commission proposed that consumers be allowed to subscribe to a “do not track” system similar to “do not call” (in short DND) list that blocks telemarketers.

In IE 9, users can turn the feature on and then choose a list of sites to block. Anyone-Including individuals, companies, and consumers-protection groups-can make lists, and users can subscribe to as many as they please. List authors can update lists; the updates will automatically push out to subscribers, as IE 9 will check for updates once a week. The features will not block Flash cookies.

Some users may be surprised by the result, however: Sites that users block for tracking them will also be prohibited from displaying certain content. Websites will be able to detect when visitors are using the list; the sites will therefore know that some page elements may be blocked for the visitors.

The new tracking protection feature is available from the Internet Explorer 9 Release candidate.