JWS Task 3: SAAJ and Palindromes

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.