JWS Task 6: JAX-B and Calendromes

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.