/* * Copyright 2003 Federal Chancellery Austria * MOA-SPSS has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.gv.egovernment.moa.spss.server.service; import java.util.Collections; import javax.xml.namespace.QName; import org.apache.axis.AxisFault; import org.apache.axis.i18n.Messages; import org.w3c.dom.Element; import at.gv.egovernment.moa.spss.MOAException; import at.gv.egovernment.moa.spss.MOASystemException; import at.gv.egovernment.moa.spss.api.cmssign.CreateCMSSignatureRequest; import at.gv.egovernment.moa.spss.api.cmssign.CreateCMSSignatureResponse; import at.gv.egovernment.moa.spss.api.xmlbind.CreateCMSSignatureRequestParser; import at.gv.egovernment.moa.spss.api.xmlbind.CreateCMSSignatureResponseBuilder; import at.gv.egovernment.moa.spss.api.xmlbind.CreateXMLSignatureRequestParser; import at.gv.egovernment.moa.spss.api.xmlbind.CreateXMLSignatureResponseBuilder; import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureRequest; import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponse; import at.gv.egovernment.moa.spss.server.invoke.CMSSignatureCreationInvoker; import at.gv.egovernment.moa.spss.server.invoke.PDFASInvoker; import at.gv.egovernment.moa.spss.server.invoke.XMLSignatureCreationInvoker; import at.gv.egovernment.moa.spss.server.transaction.TransactionContext; import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager; import at.gv.egovernment.moa.spss.server.xmlbind.CreatePDFRequest; import at.gv.egovernment.moa.spss.server.xmlbind.CreatePDFRespone; import at.gv.egovernment.moa.spss.server.xmlbind.CreatePDFSignatureRequestParser; import at.gv.egovernment.moa.spss.server.xmlbind.CreatePDFSignatureResponseBuilder; import at.gv.egovernment.moaspss.logging.Logger; import at.gv.egovernment.moaspss.util.Constants; import at.gv.egovernment.moaspss.util.StreamUtils; /** * The service endpoint for the SignatureCreation web service. * * @author Patrick Peck * @version $Id$ */ public class SignatureCreationService { /** * Handle a CreatePDFSignatureRequest. * * @param request The CreatePDFSignatureRequest to work on * (contained in the 0th element of the array). * @return A CreatePDFSignatureResponse as the only element of * the Element array. * @throws AxisFault An error occurred during handling of the message. */ public Element[] CreatePDFSignatureRequest(Element[] request) throws AxisFault { Logger.trace("---- Entering SignatureCreationService"); //PDFSignatureCreationInvoker invoker = // PDFSignatureCreationInvoker.getInstance(); Element[] response = new Element[1]; // check that we have a CreateXMLSignatureRequest; if not, create an // AxisFault, just like the org.apache.axis.providers.java.MsgProvider if (!Constants.MOA_SPSS_CREATE_PDF_REQUEST.equals(request[0].getLocalName()) || !Constants.MOA_NS_URI.equals(request[0].getNamespaceURI())) { QName qname = new QName(request[0].getNamespaceURI(), request[0].getLocalName()); throw new AxisFault( Messages.getMessage("noOperationForQName", qname.toString())); // TODO GK Operation name does not make it into the error repsonse } // handle the request try { // create a parser and builder for binding API objects to/from XML CreatePDFSignatureRequestParser requestParser = new CreatePDFSignatureRequestParser(); CreatePDFSignatureResponseBuilder responseBuilder = new CreatePDFSignatureResponseBuilder(); Element reparsedReq; CreatePDFRequest requestObj; CreatePDFRespone responseObj = null; //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler. TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); // validate the request reparsedReq = ServiceUtils.reparseRequest(request[0]);//context.getRequest()); // convert to API objects Logger.trace(">>> preparsing Request"); requestObj = requestParser.parse(reparsedReq); Logger.trace("<<< preparsed Request"); Logger.trace(">>> creating Signature"); // invoke the core logic //responseObj = PDFASInvoker.getInstance().createPDFSignature(requestObj, context.getTransactionID()); Logger.trace("<<< created Signature"); Logger.trace(">>> building Response"); // map back to XML response[0] = responseBuilder.build(responseObj).getDocumentElement(); Logger.trace("<<< built Response"); // save response in transaction context.setResponse(response[0]); Logger.trace("---- Leaving SignatureCreationService"); } catch (MOAException e) { AxisFault fault = AxisFault.makeFault(e); fault.setFaultDetail(new Element[] { e.toErrorResponse()}); Logger.debug("Anfrage zur Signaturerstellung wurde nicht erfolgreich beendet:" + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } catch (Throwable t) { MOASystemException e = new MOASystemException("2900", null, t); AxisFault fault = AxisFault.makeFault(e); fault.setFaultDetail(new Element[] { e.toErrorResponse()}); Logger.debug("Anfrage zur Signaturerstellung wurde nicht erfolgreich beendet:" + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } return response; } /** * Handle a CreateXMLSignatureRequest. * * @param request The CreateXMLSignatureRequest to work on * (contained in the 0th element of the array). * @return A CreateXMLSignatureResponse as the only element of * the Element array. * @throws AxisFault An error occurred during handling of the message. */ public Element[] CreateCMSSignatureRequest(Element[] request) throws AxisFault { Logger.trace("---- Entering SignatureCreationService"); CMSSignatureCreationInvoker invoker = CMSSignatureCreationInvoker.getInstance(); Element[] response = new Element[1]; // check that we have a CreateXMLSignatureRequest; if not, create an // AxisFault, just like the org.apache.axis.providers.java.MsgProvider if (!Constants.MOA_SPSS_CREATE_CMS_REQUEST.equals(request[0].getLocalName()) || !Constants.MOA_NS_URI.equals(request[0].getNamespaceURI())) { QName qname = new QName(request[0].getNamespaceURI(), request[0].getLocalName()); throw new AxisFault( Messages.getMessage("noOperationForQName", qname.toString())); // TODO GK Operation name does not make it into the error repsonse } // handle the request try { // create a parser and builder for binding API objects to/from XML CreateCMSSignatureRequestParser requestParser = new CreateCMSSignatureRequestParser(); CreateCMSSignatureResponseBuilder responseBuilder = new CreateCMSSignatureResponseBuilder(); Element reparsedReq; CreateCMSSignatureRequest requestObj; CreateCMSSignatureResponse responseObj; //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler. TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); // validate the request reparsedReq = ServiceUtils.reparseRequest(request[0]);//context.getRequest()); // convert to API objects Logger.trace(">>> preparsing Request"); requestObj = requestParser.parse(reparsedReq); Logger.trace("<<< preparsed Request"); Logger.trace(">>> creating Signature"); // invoke the core logic responseObj = invoker.createCMSSignature(requestObj, Collections.EMPTY_SET); Logger.trace("<<< created Signature"); Logger.trace(">>> building Response"); // map back to XML response[0] = responseBuilder.build(responseObj).getDocumentElement(); Logger.trace("<<< built Response"); // save response in transaction context.setResponse(response[0]); Logger.trace("---- Leaving SignatureCreationService"); } catch (MOAException e) { AxisFault fault = AxisFault.makeFault(e); fault.setFaultDetail(new Element[] { e.toErrorResponse()}); Logger.debug("Anfrage zur Signaturerstellung wurde nicht erfolgreich beendet:" + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } catch (Throwable t) { MOASystemException e = new MOASystemException("2900", null, t); AxisFault fault = AxisFault.makeFault(e); fault.setFaultDetail(new Element[] { e.toErrorResponse()}); Logger.debug("Anfrage zur Signaturerstellung wurde nicht erfolgreich beendet:" + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } return response; } /** * Handle a CreateXMLSignatureRequest. * * @param request The CreateXMLSignatureRequest to work on * (contained in the 0th element of the array). * @return A CreateXMLSignatureResponse as the only element of * the Element array. * @throws AxisFault An error occurred during handling of the message. */ public Element[] CreateXMLSignatureRequest(Element[] request) throws AxisFault { Logger.trace("---- Entering SignatureCreationService"); XMLSignatureCreationInvoker invoker = XMLSignatureCreationInvoker.getInstance(); Element[] response = new Element[1]; // check that we have a CreateXMLSignatureRequest; if not, create an // AxisFault, just like the org.apache.axis.providers.java.MsgProvider if (!Constants.MOA_SPSS_CREATE_XML_REQUEST.equals(request[0].getLocalName()) || !Constants.MOA_NS_URI.equals(request[0].getNamespaceURI())) { QName qname = new QName(request[0].getNamespaceURI(), request[0].getLocalName()); throw new AxisFault( Messages.getMessage("noOperationForQName", qname.toString())); // TODO GK Operation name does not make it into the error repsonse } // handle the request try { // create a parser and builder for binding API objects to/from XML CreateXMLSignatureRequestParser requestParser = new CreateXMLSignatureRequestParser(); CreateXMLSignatureResponseBuilder responseBuilder = new CreateXMLSignatureResponseBuilder(); Element reparsedReq; CreateXMLSignatureRequest requestObj; CreateXMLSignatureResponse responseObj; //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler. TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); // validate the request reparsedReq = ServiceUtils.reparseRequest(request[0]);//context.getRequest()); // convert to API objects Logger.trace(">>> preparsing Request"); requestObj = requestParser.parse(reparsedReq); Logger.trace("<<< preparsed Request"); Logger.trace(">>> creating Signature"); // invoke the core logic responseObj = invoker.createXMLSignature(requestObj, Collections.EMPTY_SET); Logger.trace("<<< created Signature"); Logger.trace(">>> building Response"); // map back to XML response[0] = responseBuilder.build(responseObj).getDocumentElement(); Logger.trace("<<< built Response"); // save response in transaction context.setResponse(response[0]); Logger.trace("---- Leaving SignatureCreationService"); } catch (MOAException e) { AxisFault fault = AxisFault.makeFault(e); fault.setFaultDetail(new Element[] { e.toErrorResponse()}); Logger.debug("Anfrage zur Signaturerstellung wurde nicht erfolgreich beendet:" + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } catch (Throwable t) { MOASystemException e = new MOASystemException("2900", null, t); AxisFault fault = AxisFault.makeFault(e); fault.setFaultDetail(new Element[] { e.toErrorResponse()}); Logger.debug("Anfrage zur Signaturerstellung wurde nicht erfolgreich beendet:" + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } return response; } }