clock

Write WS client that uses artifacts generated with custom bindings file (JAX-B). Create web method for generating date palindromes.

 

 

 

 

 

Example Solution

File with customized bindings. The file name has to be passed as parameter to the wsimport command line.
wsimport -keep -b jaxb.xml -p com.fuzilaga.jws.calendrome.client http://localhost:8880/calendrome?wsdl

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <globalBindings>
    <javaType name="java.util.Calendar" xmlType="xs:dateTime"
      parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
      printMethod="javax.xml.bind.DatatypeConverter.printDate"
    />
  </globalBindings>
</bindings>

Service Implementation Bean

package com.fuzilaga.jws.calendrome;

import java.util.Calendar;
import java.util.Date;
import java.util.SortedSet;
import java.util.TreeSet;

import javax.jws.WebService;

@WebService(endpointInterface = "com.fuzilaga.jws.calendrome.CalendromeService")
public class CalendromeServiceImpl implements CalendromeService
{

	@Override
	public SortedSet<Date> getCalendromes(Date a, Date b)
	{
		SortedSet<Date> set = new TreeSet<Date>();
		Calendar ca = Calendar.getInstance();
		ca.setTime(a);
		Calendar cb = Calendar.getInstance();
		cb.setTime(b);
		StringBuilder builder = new StringBuilder();
		while (ca.getTimeInMillis() <= cb.getTimeInMillis())
		{
			String sa = String.format("%1$td%1$tm%1$tY", ca);
			builder.delete(0, builder.length());
			builder.append(sa);
			if (sa.equals(builder.reverse().toString()))
			{
				set.add(ca.getTime());
			}
			ca.add(Calendar.DATE, 1);
		}
		return set;
	}

}

Service Client

package com.fuzilaga.jws.calendrome;

import java.util.Calendar;
import java.util.List;

import com.fuzilaga.jws.calendrome.client.CalendromeService;
import com.fuzilaga.jws.calendrome.client.CalendromeServiceImplService;

public class CalendromeClient
{
	public static void main(String args[]) throws Exception
	{
		CalendromeServiceImplService service = new CalendromeServiceImplService();
		CalendromeService port = service.getCalendromeServiceImplPort();

		Calendar ca = Calendar.getInstance();
		ca.set(1, 0, 1);
		Calendar cb = Calendar.getInstance();
		cb.set(2100, 0, 1);

		List<Calendar> list = port.getCalendromes(ca, cb);

		for (Calendar calendrom : list)
		{
			System.out.println(String.format("%1$td.%1$tm.%1$tY", calendrom.getTime()));
		}
	}
}

The result output:
10.02.2001
20.02.2002
01.02.2010
11.02.2011
21.02.2012
02.02.2020
12.02.2021
22.02.2022
03.02.2030
13.02.2031
23.02.2032
04.02.2040
14.02.2041
24.02.2042
05.02.2050
15.02.2051
25.02.2052
06.02.2060
16.02.2061
26.02.2062
07.02.2070
17.02.2071
27.02.2072
08.02.2080
18.02.2081
28.02.2082
09.02.2090
19.02.2091
29.02.2092

NOTE: Full source and instructions on how to run locally can be found here.