diff options
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java')
-rw-r--r-- | moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java | 424 |
1 files changed, 210 insertions, 214 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java index e4d93a7..55cc5c6 100644 --- a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java @@ -21,21 +21,21 @@ * that you distribute must include a readable copy of the "NOTICE" text file. */ - package at.gv.egovernment.moa.spss.server.service; +import java.util.List; + +import org.apache.axis.AxisFault; +import org.w3c.dom.Element; + import at.gv.egiz.asic.api.ASiC; import at.gv.egiz.asic.api.ASiCFactory; -import at.gv.egiz.asic.api.ASiCFormat; import at.gv.egiz.asic.api.ASiCVerificationResult; import at.gv.egiz.asic.impl.ASiCMOAVerifier; import at.gv.egiz.asic.xmlbind.VerifyASICSignatureRequestParser; import at.gv.egiz.asic.xmlbind.VerifyASICSignatureResponseBuilder; import at.gv.egiz.asic.xmlbind.VerifyASiCRequest; import at.gv.egovernment.moa.spss.MOAApplicationException; -import org.apache.axis.AxisFault; -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.cmsverify.VerifyCMSSignatureRequest; @@ -54,192 +54,189 @@ import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager; import at.gv.egovernment.moaspss.logging.Logger; import at.gv.egovernment.moaspss.util.StreamUtils; -import java.io.FileInputStream; -import java.util.List; - /** * The service endpoint for the <code>SignatureVerification</code> web service. - * + * * @author Patrick Peck * @version $Id$ */ public class SignatureVerificationService { - /** - * Handle a <code>VerifyPDFSignatureRequest</code>. - * - * @param request The <code>VerifyPDFSignatureRequest</code> to work on - * (contained in the 0th element of the array). - * @return A <code>VerifyPDFSignatureResponse</code> as the only element of - * the <code>Element</code> array. - * @throws AxisFault An error occurred during handling of the message. - */ - public Element[] VerifyPDFSignatureRequest(Element[] request) - throws AxisFault { - CMSSignatureVerificationInvoker invoker = - CMSSignatureVerificationInvoker.getInstance(); - Element[] response = new Element[1]; - - try { - - // create a parser and builder for binding API objects to/from XML - VerifyCMSSignatureRequestParser requestParser = - new VerifyCMSSignatureRequestParser(); - VerifyPDFSignatureResponseBuilder responseBuilder = - new VerifyPDFSignatureResponseBuilder(); - Element reparsedReq; - VerifyCMSSignatureRequest requestObj; - VerifyCMSSignatureResponse responseObj; - // create a parser and builder for binding API objects to/from XML - /*VerifyPDFRequestParser requestParser = - new VerifyPDFRequestParser(); - VerifyPDFResponseBuilder responseBuilder = - new VerifyPDFResponseBuilder(); - Element reparsedReq; - VerifyPDFRequest requestObj; - VerifyPDFResponse 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 - requestObj = requestParser.parsePDF(reparsedReq); - - // invoke the core logic - responseObj = invoker.verifyCMSSignature(requestObj); - - // map back to XML - response[0] = responseBuilder.build(responseObj).getDocumentElement(); - - // save response in transaction - context.setResponse(response[0]); - - - } catch (MOAException e) { - AxisFault fault = AxisFault.makeFault(e); - fault.setFaultDetail(new Element[] { e.toErrorResponse()}); - Logger.debug("Anfrage zur Signaturpruefung 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 Signaturpruefung wurde nicht erfolgreich beendet:" - + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); - throw fault; - } - - return response; - } - - - /** - * Handle a <code>VerifyPDFSignatureRequest</code>. - * - * @param request The <code>VerifyPDFSignatureRequest</code> to work on - * (contained in the 0th element of the array). - * @return A <code>VerifyPDFSignatureResponse</code> as the only element of - * the <code>Element</code> array. - * @throws AxisFault An error occurred during handling of the message. - */ - public Element[] VerifyASICSignatureRequest(Element[] request) - throws AxisFault { - CMSSignatureVerificationInvoker invoker = - CMSSignatureVerificationInvoker.getInstance(); - Element[] response = new Element[1]; - - try { - - // create a parser and builder for binding API objects to/from XML - VerifyASICSignatureRequestParser requestParser = - new VerifyASICSignatureRequestParser(); - VerifyASICSignatureResponseBuilder responseBuilder = - new VerifyASICSignatureResponseBuilder(); - Element reparsedReq; - VerifyASiCRequest requestObj; - VerifyCMSSignatureResponse responseObj; - // create a parser and builder for binding API objects to/from XML - - //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 - requestObj = requestParser.parseASIC(reparsedReq); - - if(requestObj.getFormat() == null) { - throw new MOAApplicationException("asic.0006", null); - } - - ASiC aSiC = ASiCFactory.parseASiC(requestObj.getAsicInput(), - requestObj.getFormat()); - - Logger.debug("Got ASiC " + aSiC); - - // invoke the core logic - ASiCMOAVerifier v = new ASiCMOAVerifier(); - List<ASiCVerificationResult> results = v.verify(aSiC, - requestObj.getTrustProfile(), requestObj.getDate()); - - // map back to XML - response[0] = responseBuilder.build(results).getDocumentElement(); - - // save response in transaction - context.setResponse(response[0]); - - } catch (MOAException e) { - AxisFault fault = AxisFault.makeFault(e); - fault.setFaultDetail(new Element[] { e.toErrorResponse()}); - Logger.debug("Anfrage zur Signaturpruefung 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 Signaturpruefung wurde nicht erfolgreich beendet:" - + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); - throw fault; - } - - return response; + /** + * Handle a <code>VerifyPDFSignatureRequest</code>. + * + * @param request The <code>VerifyPDFSignatureRequest</code> to work on + * (contained in the 0th element of the array). + * @return A <code>VerifyPDFSignatureResponse</code> as the only element of the + * <code>Element</code> array. + * @throws AxisFault An error occurred during handling of the message. + */ + public Element[] VerifyPDFSignatureRequest(Element[] request) + throws AxisFault { + final CMSSignatureVerificationInvoker invoker = + CMSSignatureVerificationInvoker.getInstance(); + final Element[] response = new Element[1]; + + try { + + // create a parser and builder for binding API objects to/from XML + final VerifyCMSSignatureRequestParser requestParser = + new VerifyCMSSignatureRequestParser(); + final VerifyPDFSignatureResponseBuilder responseBuilder = + new VerifyPDFSignatureResponseBuilder(); + Element reparsedReq; + VerifyCMSSignatureRequest requestObj; + VerifyCMSSignatureResponse responseObj; + // create a parser and builder for binding API objects to/from XML + /* + * VerifyPDFRequestParser requestParser = new VerifyPDFRequestParser(); + * VerifyPDFResponseBuilder responseBuilder = new VerifyPDFResponseBuilder(); + * Element reparsedReq; VerifyPDFRequest requestObj; VerifyPDFResponse + * responseObj; + */ + + // since Axis (1.1 ff) has problem with namespaces we take the raw request + // stored by the Axishandler. + final TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); + // validate the request + reparsedReq = ServiceUtils.reparseRequest(request[0]);// context.getRequest()); + + // convert to API objects + requestObj = requestParser.parsePDF(reparsedReq); + + // invoke the core logic + responseObj = invoker.verifyCMSSignature(requestObj); + + // map back to XML + response[0] = responseBuilder.build(responseObj).getDocumentElement(); + + // save response in transaction + context.setResponse(response[0]); + + } catch (final MOAException e) { + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + throw fault; + } catch (final Throwable t) { + final MOASystemException e = new MOASystemException("2900", null, t); + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + throw fault; } - + + return response; + } + + /** + * Handle a <code>VerifyPDFSignatureRequest</code>. + * + * @param request The <code>VerifyPDFSignatureRequest</code> to work on + * (contained in the 0th element of the array). + * @return A <code>VerifyPDFSignatureResponse</code> as the only element of the + * <code>Element</code> array. + * @throws AxisFault An error occurred during handling of the message. + */ + public Element[] VerifyASICSignatureRequest(Element[] request) + throws AxisFault { + final CMSSignatureVerificationInvoker invoker = + CMSSignatureVerificationInvoker.getInstance(); + final Element[] response = new Element[1]; + + try { + + // create a parser and builder for binding API objects to/from XML + final VerifyASICSignatureRequestParser requestParser = + new VerifyASICSignatureRequestParser(); + final VerifyASICSignatureResponseBuilder responseBuilder = + new VerifyASICSignatureResponseBuilder(); + Element reparsedReq; + VerifyASiCRequest requestObj; + final VerifyCMSSignatureResponse responseObj; + // create a parser and builder for binding API objects to/from XML + + // since Axis (1.1 ff) has problem with namespaces we take the raw request + // stored by the Axishandler. + final TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); + // validate the request + reparsedReq = ServiceUtils.reparseRequest(request[0]);// context.getRequest()); + + // convert to API objects + requestObj = requestParser.parseASIC(reparsedReq); + + if (requestObj.getFormat() == null) { + throw new MOAApplicationException("asic.0006", null); + } + + final ASiC aSiC = ASiCFactory.parseASiC(requestObj.getAsicInput(), + requestObj.getFormat()); + + Logger.debug("Got ASiC " + aSiC); + + // invoke the core logic + final ASiCMOAVerifier v = new ASiCMOAVerifier(); + final List<ASiCVerificationResult> results = v.verify(aSiC, + requestObj.getTrustProfile(), requestObj.getDate()); + + // map back to XML + response[0] = responseBuilder.build(results).getDocumentElement(); + + // save response in transaction + context.setResponse(response[0]); + + } catch (final MOAException e) { + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + throw fault; + } catch (final Throwable t) { + final MOASystemException e = new MOASystemException("2900", null, t); + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + throw fault; + } + + return response; + } + /** * Handle a <code>VerifyCMSSignatureRequest</code>. - * + * * @param request The <code>VerifyCMSSignatureRequest</code> to work on - * (contained in the 0th element of the array). - * @return A <code>VerifyCMSSignatureResponse</code> as the only element of - * the <code>Element</code> array. + * (contained in the 0th element of the array). + * @return A <code>VerifyCMSSignatureResponse</code> as the only element of the + * <code>Element</code> array. * @throws AxisFault An error occurred during handling of the message. */ public Element[] VerifyCMSSignatureRequest(Element[] request) - throws AxisFault { - CMSSignatureVerificationInvoker invoker = - CMSSignatureVerificationInvoker.getInstance(); - Element[] response = new Element[1]; - + throws AxisFault { + final CMSSignatureVerificationInvoker invoker = + CMSSignatureVerificationInvoker.getInstance(); + final Element[] response = new Element[1]; + try { - + // create a parser and builder for binding API objects to/from XML - VerifyCMSSignatureRequestParser requestParser = - new VerifyCMSSignatureRequestParser(); - VerifyCMSSignatureResponseBuilder responseBuilder = - new VerifyCMSSignatureResponseBuilder(); + final VerifyCMSSignatureRequestParser requestParser = + new VerifyCMSSignatureRequestParser(); + final VerifyCMSSignatureResponseBuilder responseBuilder = + new VerifyCMSSignatureResponseBuilder(); Element reparsedReq; VerifyCMSSignatureRequest requestObj; VerifyCMSSignatureResponse responseObj; - //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler. - TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); + // since Axis (1.1 ff) has problem with namespaces we take the raw request + // stored by the Axishandler. + final TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); // validate the request - reparsedReq = ServiceUtils.reparseRequest(request[0]);//context.getRequest()); - + reparsedReq = ServiceUtils.reparseRequest(request[0]);// context.getRequest()); + // convert to API objects requestObj = requestParser.parse(reparsedReq); @@ -251,20 +248,19 @@ public class SignatureVerificationService { // save response in transaction context.setResponse(response[0]); - - - } catch (MOAException e) { - AxisFault fault = AxisFault.makeFault(e); - fault.setFaultDetail(new Element[] { e.toErrorResponse()}); - Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" - + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + + } catch (final MOAException e) { + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung 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 Signaturpruefung wurde nicht erfolgreich beendet:" - + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + } catch (final Throwable t) { + final MOASystemException e = new MOASystemException("2900", null, t); + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } @@ -273,60 +269,60 @@ public class SignatureVerificationService { /** * Handle a <code>VerifyXMLSignatureRequest</code>. - * + * * @param request The <code>VerifyXMLSignatureRequest</code> to work on - * (contained in the 0th element of the array). - * @return A <code>VerifyXMLSignatureResponse</code> as the only element of - * the <code>Element</code> array. + * (contained in the 0th element of the array). + * @return A <code>VerifyXMLSignatureResponse</code> as the only element of the + * <code>Element</code> array. * @throws AxisFault An error occurred during handling of the message. */ public Element[] VerifyXMLSignatureRequest(Element[] request) - throws AxisFault { - XMLSignatureVerificationInvoker invoker = - XMLSignatureVerificationInvoker.getInstance(); - Element[] response = new Element[1]; + throws AxisFault { + final XMLSignatureVerificationInvoker invoker = + XMLSignatureVerificationInvoker.getInstance(); + final Element[] response = new Element[1]; try { - - // create a parser and builder for binding API objects to/from XML - VerifyXMLSignatureRequestParser requestParser = - new VerifyXMLSignatureRequestParser(); - VerifyXMLSignatureResponseBuilder responseBuilder = - new VerifyXMLSignatureResponseBuilder(); + + // create a parser and builder for binding API objects to/from XML + final VerifyXMLSignatureRequestParser requestParser = + new VerifyXMLSignatureRequestParser(); + final VerifyXMLSignatureResponseBuilder responseBuilder = + new VerifyXMLSignatureResponseBuilder(); Element reparsedReq; VerifyXMLSignatureRequest requestObj; VerifyXMLSignatureResponse responseObj; - //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler. - TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); + // since Axis (1.1 ff) has problem with namespaces we take the raw request + // stored by the Axishandler. + final TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); // validate the request reparsedReq = ServiceUtils.reparseRequest(context.getRequest()); - + // convert to API objects requestObj = requestParser.parse(reparsedReq); - + // invoke the core logic responseObj = invoker.verifyXMLSignature(requestObj); // map back to XML response[0] = responseBuilder.build(responseObj).getDocumentElement(); - + // save response in transaction context.setResponse(response[0]); - - } catch (MOAException e) { - AxisFault fault = AxisFault.makeFault(e); - fault.setFaultDetail(new Element[] { e.toErrorResponse()}); - Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" - + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + } catch (final MOAException e) { + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung 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 Signaturpruefung wurde nicht erfolgreich beendet:" - + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + } catch (final Throwable t) { + final MOASystemException e = new MOASystemException("2900", null, t); + final AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse() }); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); throw fault; } |