package org.argeo.support.odk.servlet; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import javax.jcr.Repository; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** Receives a form submission. */ public class OdkSubmissionServlet extends HttpServlet { private static final long serialVersionUID = 7834401404691302385L; private final static Log log = LogFactory.getLog(OdkSubmissionServlet.class); private final static String XML_SUBMISSION_FILE = "xml_submission_file"; private Repository repository; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { for (Part part : req.getParts()) { if (log.isDebugEnabled()) log.debug("Part: " + part.getName() + ", " + part.getContentType()); } Part xmlSubmissionPart = req.getPart(XML_SUBMISSION_FILE); if (xmlSubmissionPart == null) throw new ServletException("No " + XML_SUBMISSION_FILE + " part"); try (InputStream in = xmlSubmissionPart.getInputStream();) { // pretty print Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); StreamResult result = new StreamResult(new StringWriter()); StreamSource source = new StreamSource(in); transformer.transform(source, result); String xmlString = result.getWriter().toString(); System.out.println(xmlString); } catch (TransformerException e) { e.printStackTrace(); } resp.setContentType("text/xml; charset=utf-8"); resp.setHeader("X-OpenRosa-Version", "1.0"); resp.setDateHeader("Date", System.currentTimeMillis()); resp.setIntHeader("X-OpenRosa-Accept-Content-Length", 1024 * 1024); resp.setStatus(201); resp.getWriter().write("" + "Form Received!" + ""); } public void setRepository(Repository repository) { this.repository = repository; } }