package at.gv.egovernment.moa.spss.server.webservice.binding; import java.io.IOException; import java.math.BigInteger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.transform.TransformerException; import at.gv.egiz.moasig.CreateXMLSignatureRequest; import at.gv.egiz.moasig.CreateXMLSignatureResponseType; import at.gv.egovernment.moa.spss.MOAApplicationException; import at.gv.egovernment.moa.spss.api.SPSSFactory; import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponse; import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponseElement; import at.gv.egovernment.moa.spss.api.xmlsign.ErrorResponse; import at.gv.egovernment.moa.spss.api.xmlsign.SignatureEnvironmentResponse; import at.gv.egovernment.moa.spss.server.webservice.XMLCreateSignatureBinding; import at.gv.egovernment.moaspss.util.DOMUtils; public class XMLCreateSignatureBindingImpl implements XMLCreateSignatureBinding { /** The factory to create API objects. */ private SPSSFactory factory; /** * Create a new CreateXMLSignatureRequestParser. */ public XMLCreateSignatureBindingImpl() { this.factory = SPSSFactory.getInstance(); } @Override public at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureRequest buildXMLRequest( CreateXMLSignatureRequest createXMLSignatureRequest) throws MOAApplicationException { String keyIdentifier = createXMLSignatureRequest.getKeyIdentifier(); TransformerUtils transformerUtils = new TransformerUtils(); List singleSignatureInfos = new ArrayList(); Iterator singleSignatureInfoIterator = createXMLSignatureRequest .getSingleSignatureInfo().iterator(); while (singleSignatureInfoIterator.hasNext()) { at.gv.egiz.moasig.CreateXMLSignatureRequestType.SingleSignatureInfo singleSignatureInfo = singleSignatureInfoIterator .next(); singleSignatureInfos.add(transformerUtils.buildSingleSignatureInfo(singleSignatureInfo)); } return factory.createCreateXMLSignatureRequest(keyIdentifier, singleSignatureInfos); } @Override public CreateXMLSignatureResponseType buildXMLResponse(CreateXMLSignatureResponse response) throws MOAApplicationException { CreateXMLSignatureResponseType createXMLSignatureResponseType = new CreateXMLSignatureResponseType(); List responseObjects = response.getResponseElements(); Iterator responseIterator = responseObjects.iterator(); while(responseIterator.hasNext()) { Object responseObject = responseIterator.next(); CreateXMLSignatureResponseElement responseElement = (CreateXMLSignatureResponseElement) responseObject; switch (responseElement.getResponseType()) { case CreateXMLSignatureResponseElement.SIGNATURE_ENVIRONMENT_RESPONSE : SignatureEnvironmentResponse envResponse = (SignatureEnvironmentResponse) responseElement; byte[] signature; try { signature = DOMUtils.serializeNode(envResponse.getSignatureEnvironment(), "UTF-8"); } catch (TransformerException e) { throw new MOAApplicationException("Failed to write xml signature to response", null, e); } catch (IOException e) { throw new MOAApplicationException("Failed to write xml signature to response", null, e); } createXMLSignatureResponseType.getSignatureEnvironmentOrErrorResponse().add(signature); break; case CreateXMLSignatureResponseElement.ERROR_RESPONSE : ErrorResponse errorResponse = (ErrorResponse) responseElement; at.gv.egiz.moasig.ErrorResponseType errorResponseType = new at.gv.egiz.moasig.ErrorResponseType(); errorResponseType.setErrorCode(BigInteger.valueOf(errorResponse.getErrorCode())); errorResponseType.setInfo(errorResponse.getInfo()); createXMLSignatureResponseType.getSignatureEnvironmentOrErrorResponse().add(errorResponseType); break; } } return createXMLSignatureResponseType; } }