diff options
Diffstat (limited to 'spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java')
-rw-r--r-- | spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java | 110 |
1 files changed, 77 insertions, 33 deletions
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java index 4632c80f5..77c1b9c0e 100644 --- a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java +++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java @@ -37,12 +37,17 @@ import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadException; +import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.Document; import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import at.gv.egovernment.moa.spss.slinterface.Constants; +import at.gv.egovernment.moa.spss.slinterface.moainvoker.MOAInvoker; +import at.gv.egovernment.moa.spss.slinterface.transformers.MOA2SL; +import at.gv.egovernment.moa.spss.slinterface.transformers.SL2MOA; /** * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at) @@ -67,19 +72,19 @@ public class SL2MOAFilter implements Filter slRequest_ = new SLRequest(); // Initialize stylesheet transform SL2MOA - ServletContext context = config_.getServletContext(); - Transformer sl2MoaTransformer = (Transformer) context.getAttribute(Constants.WSCP_SL2MOA_TRANSFORMER_); - if (sl2MoaTransformer == null) - { - initTransformer(context, Constants.IP_SL2MOA_STYLESHEET_); - } +// ServletContext context = config_.getServletContext(); +// Transformer sl2MoaTransformer = (Transformer) context.getAttribute(Constants.WSCP_SL2MOA_TRANSFORMER_); +// if (sl2MoaTransformer == null) +// { +// initTransformer(context, Constants.IP_SL2MOA_STYLESHEET_); +// } // Initialize stylesheet transform MOA2SL - Transformer moa2SlTransformer = (Transformer) context.getAttribute(Constants.WSCP_MOA2SL_TRANSFORMER_); - if (moa2SlTransformer == null) - { - initTransformer(context, Constants.IP_MOA2SL_STYLESHEET_); - } +// Transformer moa2SlTransformer = (Transformer) context.getAttribute(Constants.WSCP_MOA2SL_TRANSFORMER_); +// if (moa2SlTransformer == null) +// { +// initTransformer(context, Constants.IP_MOA2SL_STYLESHEET_); +// } } @@ -103,22 +108,29 @@ public class SL2MOAFilter implements Filter Document slXMLRequestDoc = parseSlXmlRequest(slXmlRequestCAR); // Transform SL request into a MOA SPSS request - Transformer sl2MoaTransformer = - (Transformer) config_.getServletContext().getAttribute(Constants.WSCP_SL2MOA_TRANSFORMER_); - DOMSource slXMLRequestDS = new DOMSource(slXMLRequestDoc); +// Transformer sl2MoaTransformer = +// (Transformer) config_.getServletContext().getAttribute(Constants.WSCP_SL2MOA_TRANSFORMER_); +// DOMSource slXMLRequestDS = new DOMSource(slXMLRequestDoc); +// ByteArrayOutputStream moaRequestBOS = new ByteArrayOutputStream(); +// StreamResult moaRequestResult = new StreamResult(moaRequestBOS); +// try +// { +// sl2MoaTransformer.transform(slXMLRequestDS, moaRequestResult); +// } +// catch (TransformerException e) +// { +// String message = "Transforming SL XML request into MOA XML request failed."; +// logger_.error(message, e); +// throw new ServletException(message, e); +// } +// logger_.debug("MOA XML Request:\n" + moaRequestBOS.toString()); +// ByteArrayInputStream moaRequestIS = new ByteArrayInputStream(moaRequestBOS.toByteArray()); + Properties initProps = (Properties)config_.getServletContext().getAttribute(Constants.WSCP_INIT_PROPS_); + String trustProfileId = initProps.getProperty(Constants.IP_SP_TRUSTPROFILEID_); + Document moaXMLRequestDoc = SL2MOA.toMoaVerifyXMLSignatureRequest(slXMLRequestDoc, trustProfileId); ByteArrayOutputStream moaRequestBOS = new ByteArrayOutputStream(); - StreamResult moaRequestResult = new StreamResult(moaRequestBOS); - try - { - sl2MoaTransformer.transform(slXMLRequestDS, moaRequestResult); - } - catch (TransformerException e) - { - String message = "Transforming SL XML request into MOA XML request failed."; - logger_.error(message, e); - throw new ServletException(message, e); - } - logger_.debug("MOA XML Request:\n" + moaRequestBOS.toString()); + MOAInvoker.serializeDocument(moaXMLRequestDoc, moaRequestBOS); + logger_.debug("SL request transformed into MOA request:\n" + moaRequestBOS); ByteArrayInputStream moaRequestIS = new ByteArrayInputStream(moaRequestBOS.toByteArray()); // Invoke MOA SPSS @@ -130,22 +142,40 @@ public class SL2MOAFilter implements Filter response.setContentType("text/xml"); // Transform MOA response into a SL response and send SL response back to client - Transformer moa2SlTransformer = - (Transformer) config_.getServletContext().getAttribute(Constants.WSCP_MOA2SL_TRANSFORMER_); +// Transformer moa2SlTransformer = +// (Transformer) config_.getServletContext().getAttribute(Constants.WSCP_MOA2SL_TRANSFORMER_); +// ServletOutputStream moaResponseSOS = (ServletOutputStream) responseWrapper.getOutputStream(); +// ByteArrayInputStream moaResponseBIS = new ByteArrayInputStream(moaResponseSOS.toByteArray()); +// StreamSource moaResponseSource = new StreamSource(moaResponseBIS); +// StreamResult slResponseResult = new StreamResult(response.getOutputStream()); +// try +// { +// moa2SlTransformer.transform(moaResponseSource, slResponseResult); +// } +// catch (TransformerException e) +// { +// String message = "Transforming MOA XML response into SL XML response failed."; +// logger_.error(message, e); +// throw new ServletException(message, e); +// } + DOMParser xmlParser = (DOMParser) config_.getServletContext().getAttribute(Constants.WSCP_XMLPARSER_); ServletOutputStream moaResponseSOS = (ServletOutputStream) responseWrapper.getOutputStream(); ByteArrayInputStream moaResponseBIS = new ByteArrayInputStream(moaResponseSOS.toByteArray()); - StreamSource moaResponseSource = new StreamSource(moaResponseBIS); - StreamResult slResponseResult = new StreamResult(response.getOutputStream()); + InputSource responseSource = new InputSource(moaResponseBIS); try { - moa2SlTransformer.transform(moaResponseSource, slResponseResult); + xmlParser.parse(responseSource); + Document moaResponseDoc = xmlParser.getDocument(); + Document slResponseDoc = MOA2SL.toSlVerifyXMLSignatureResponse(moaResponseDoc); + MOAInvoker.serializeDocument(slResponseDoc, response.getOutputStream()); } - catch (TransformerException e) + catch (SAXException e) { String message = "Transforming MOA XML response into SL XML response failed."; logger_.error(message, e); throw new ServletException(message, e); - } + } + } /* ---------------------------------------------------------------------------------------------------- */ @@ -197,6 +227,7 @@ public class SL2MOAFilter implements Filter } context.setAttribute(contextAttrName, transformer); } + /* ---------------------------------------------------------------------------------------------------- */ /** @@ -298,6 +329,19 @@ public class SL2MOAFilter implements Filter logger_.error(message, e); throw new ServletException(message, e); } + if (logger_.getEffectiveLevel().isGreaterOrEqual(Level.DEBUG)) + { + ByteArrayOutputStream debugOutputStream = new ByteArrayOutputStream(); + try + { + MOAInvoker.serializeDocument(slXmlRequestDoc, debugOutputStream); + logger_.debug("XML-Request received:\n" + debugOutputStream); + } + catch (IOException e) + { + // No debug output if this fails + } + } // Check if namespace is correct String namespaceURI = slXmlRequestDoc.getDocumentElement().getNamespaceURI(); |