/* * Created on 25.11.2003 * * (c) Stabsstelle IKT-Strategie des Bundes */ package at.gv.egovernment.moa.spss.slinterface.servlets; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.w3c.dom.Document; import at.gv.egovernment.moa.spss.slinterface.Constants; import at.gv.egovernment.moa.spss.slinterface.Utils; import at.gv.egovernment.moa.spss.slinterface.moainvoker.MOAInvoker; /** * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at) */ public class ReturnServlet extends HttpServlet { private static Logger logger_ = Logger.getLogger(Constants.LH_SERVLETS_); /** * Default constructor. */ public ReturnServlet() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { // Get session HttpSession session = request.getSession(false); if (session == null) { String message = "No session available."; logger_.error(message); throw new ServletException(message); } // Get original SL request from session SLRequest slRequest = (SLRequest) session.getAttribute("slRequest"); if (slRequest == null) { String message = "Session object \"slRequest\" not available."; logger_.error(message); throw new ServletException(message); } // Get SL response from session Document slResponseDoc = (Document) session.getAttribute("slResponseDoc"); if (slResponseDoc == null) { String message = "Session object \"slResponseDoc\" not available."; logger_.error(message); throw new ServletException(message); } URLConnection dataURLConn; try { // Open connection to DataURL URL dataURL = new URL(slRequest.dataUrl_); dataURLConn = dataURL.openConnection(); dataURLConn.setDoOutput(true); OutputStream dataURLOS = dataURLConn.getOutputStream(); MOAInvoker.serializeDocument(slResponseDoc, dataURLOS); dataURLOS.flush(); } catch (Exception e) { String message = "Sending SL XML response to DataURL failed."; logger_.error(message, e); throw new ServletException(message, e); } // Forward response from DataURL to client forwardResponse(dataURLConn, response); session.invalidate(); } /* ---------------------------------------------------------------------------------------------------- */ private void forwardResponse(URLConnection dataURLConn, ServletResponse response) throws ServletException { // Make sure that content type of DataURL response is text/html String dataURLContentType = dataURLConn.getContentType(); if (dataURLContentType == null || !dataURLContentType.startsWith("text/html")) { String message = "Unsupported content type of DataURL response: \"" + dataURLContentType + "\"."; logger_.error(message); throw new ServletException(message); } try { InputStream dataURLIS = dataURLConn.getInputStream(); byte[] dataURLResponse = Utils.readFromInputStream(dataURLIS); response.setContentType("text/html"); OutputStream responseOS = response.getOutputStream(); responseOS.write(dataURLResponse); responseOS.flush(); } catch (Exception e) { String message = "Forwarding DataURL response to client failed."; logger_.error(message, e); throw new ServletException(message, e); } } }