package at.gv.egovernment.moa.spss.server.service;
import org.apache.axis.AxisFault;
import org.w3c.dom.Element;
import at.gv.egovernment.moa.logging.Logger;
import at.gv.egovernment.moa.spss.MOAException;
import at.gv.egovernment.moa.spss.MOASystemException;
import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureRequest;
import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponse;
import at.gv.egovernment.moa.spss.api.xmlbind.VerifyCMSSignatureRequestParser;
import at.gv.egovernment.moa.spss.api.xmlbind.VerifyCMSSignatureResponseBuilder;
import at.gv.egovernment.moa.spss.api.xmlbind.VerifyXMLSignatureRequestParser;
import at.gv.egovernment.moa.spss.api.xmlbind.VerifyXMLSignatureResponseBuilder;
import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureRequest;
import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureResponse;
import at.gv.egovernment.moa.spss.server.invoke.CMSSignatureVerificationInvoker;
import at.gv.egovernment.moa.spss.server.invoke.XMLSignatureVerificationInvoker;
import at.gv.egovernment.moa.spss.server.transaction.TransactionContext;
import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager;
import at.gv.egovernment.moa.util.StreamUtils;
/**
* The service endpoint for the SignatureVerification
web service.
*
* @author Patrick Peck
* @version $Id$
*/
public class SignatureVerificationService {
/**
* Handle a VerifyCMSSignatureRequest
.
*
* @param request The VerifyCMSSignatureRequest
to work on
* (contained in the 0th element of the array).
* @return A VerifyCMSSignatureResponse
as the only element of
* the Element
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];
try {
// create a parser and builder for binding API objects to/from XML
VerifyCMSSignatureRequestParser requestParser =
new VerifyCMSSignatureRequestParser();
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();
// validate the request
reparsedReq = ServiceUtils.reparseRequest(context.getRequest());
// convert to API objects
requestObj = requestParser.parse(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 VerifyXMLSignatureRequest
.
*
* @param request The VerifyXMLSignatureRequest
to work on
* (contained in the 0th element of the array).
* @return A VerifyXMLSignatureResponse
as the only element of
* the Element
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];
try {
// create a parser and builder for binding API objects to/from XML
VerifyXMLSignatureRequestParser requestParser =
new VerifyXMLSignatureRequestParser();
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();
// 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));
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;
}
}