palindrome
Write WS client that creates request message and analyses response message using SAAJ (The SOAP with Attachments API for Java).
Create web method for finding all palindromes in a given string.

 

 

 

Example Solution

Service Implementation Bean

package com.fuzilaga.jws.palindrome;

import java.util.SortedSet;
import java.util.TreeSet;
import javax.jws.WebService;

@WebService(endpointInterface = "com.fuzilaga.jws.palindrome.PalindromeService")
public class PalindromeServiceImpl implements PalindromeService
{

	public SortedSet<String> getPalindromes(String str)
	{
		SortedSet<String> set = new TreeSet<String>();

		for (int i = 0; i < str.length(); i++)
		{
			for (int j = i + 1; j <= str.length(); j++)
			{
				String newStr = str.substring(i, j);
				StringBuilder sb = new StringBuilder(newStr);
				sb = sb.reverse();
				if (newStr.equals(sb.toString()))
				{
					set.add(newStr);
				}
			}
		}

		return set;
	}

	public static void main(String args[])
	{
		SortedSet<String> set =new PalindromeServiceImpl().getPalindromes("koortsmeetsysteemstrook");
		for(String s : set)
		{
			System.out.println(s);
		}

	}
}

Service Client

package com.fuzilaga.jws.palindrome;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage;

import org.w3c.dom.NodeList;

public class PalindromeClient
{
	public static void main(String args[]) throws Exception
	{
		// create msg
		MessageFactory msgFactory = MessageFactory.newInstance();
		SOAPMessage msg = msgFactory.createMessage();
		Name operationName = msg.getSOAPPart().getEnvelope().createName("getPalindromes", "pal", "http://palindrome.jws.fuzilaga.com/");
		SOAPElement operation = msg.getSOAPBody().addBodyElement(operationName);
		Name argName = msg.getSOAPPart().getEnvelope().createName("arg0");
		SOAPElement arg0 = operation.addChildElement(argName);
		arg0.addTextNode("koortsmeetsysteemstrook");

		// output msg
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		msg.writeTo(baos);
		System.out.println("Request = " + new String(baos.toByteArray()));

		// get connection
		URL url = new URL("http://localhost:8880/palindrome");
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoInput(true);
		conn.setDoOutput(true);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("accept", "text/xml");
		conn.setRequestProperty("Content-Type", "text/xml");

		// send msg
		DataOutputStream writer = new DataOutputStream(conn.getOutputStream());
		msg.writeTo(writer);
		writer.flush();
		writer.close();

		// read msg
		System.out.println("Result:");
		SOAPMessage response = msgFactory.createMessage(null, conn.getInputStream());
		NodeList list = response.getSOAPBody().getFirstChild().getChildNodes();
		for (int i = 0; i < list.getLength(); i++)
		{
			System.out.println(list.item(i).getTextContent());
		}
	}
}

The result list contains:
e
ee
eetsystee
etsyste
k
koortsmeetsysteemstrook
m
meetsysteem
o
oo
oortsmeetsysteemstroo
ortsmeetsysteemstro
r
rtsmeetsysteemstr
s
smeetsysteems
sys
t
tsmeetsysteemst
tsyst
y

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