package com.redhat.gss.wsrm;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.w3c.dom.Document;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.jboss.logging.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import javax.xml.namespace.QName;
@WebServlet("/drain")
public class DrainServlet extends HttpServlet
{
private static final QName wsrmIdentifier = new QName("http://schemas.xmlsoap.org/ws/2005/02/rm", "Identifier");
private static Logger log = Logger.getLogger(DrainServlet.class);
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
if(req.getContentType().contains("text/xml"))
{
try
{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse(req.getInputStream());
printDocument(doc);
// sendAck(doc, resp, builder);
}
catch(Exception e)
{
log.warn("Could not print XML document", e);
}
}
else
{
log.warn("Received non-XML message");
}
}
// public static void sendAck(Document doc, HttpServletResponse resp, DocumentBuilder)
// {
// Element identifierElement = findFirstDescendantElement(doc.getDocumentElement());
// String identifier = identifierElement.getNodeValue();
// }
// public static void findFirstDescendantElement(Element e, QName qname)
// {
// Element result = null;
// NodeList nl = e.getChildNodes();
// for(int i=0; i < nl.getLength(); i++)
// {
// Node n = nl.item(i);
// if(n instanceof Element)
// {
// Element child = (Element)n;
// if(qname.getNamespaceURI().equals(child.getNamespaceURI()) &&
// qname.getLocalName().equals(child.getLocalName()))
// {
// result = child;
// break;
// }
// else
// {
// result = findFirstDescendantElement(child, qname);
// if(result == null)
// {
// break;
// }
// }
// }
// }
// }
public static void printDocument(Document doc) throws Exception
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(new DOMSource(doc), new StreamResult(baos));
log.info(baos.toString());
}
}