package at.gv.egovernment.moa.spss.server.xmlbind; import java.io.IOException; import java.util.Date; import org.w3c.dom.Element; import at.gv.egovernment.moa.spss.MOAApplicationException; import at.gv.egovernment.moa.spss.api.xmlbind.RequestParserUtils; import at.gv.egovernment.moaspss.util.Base64Utils; import at.gv.egovernment.moaspss.util.Constants; import at.gv.egovernment.moaspss.util.DOMUtils; import at.gv.egovernment.moaspss.util.XPathUtils; public class VerifyPDFRequestParser { // // XPath expressions for selecting parts of the DOM message // private static final String MOA = Constants.MOA_PREFIX + ":"; private static final String DATE_TIME_XPATH = MOA + "DateTime"; private static final String PDF_SIGNATURE_XPATH = MOA + "PDFSignature"; private static final String TRUST_PROFILE_ID_XPATH = MOA + "TrustProfileID"; public VerifyPDFRequest parse(Element requestElem) throws MOAApplicationException { VerifyPDFRequest verifyPDFRequest = new VerifyPDFRequest(); Date dateTime = RequestParserUtils.parseDateTime(requestElem, DATE_TIME_XPATH); byte[] signedPDF = null; try { signedPDF = parsePDF(requestElem); } catch (IOException e) { throw new MOAApplicationException("Failed to extract signed pdf data", null, e); } String trustProfileID = XPathUtils.getElementValue(requestElem, TRUST_PROFILE_ID_XPATH, null); verifyPDFRequest.setDateTime(dateTime); verifyPDFRequest.setSignedPDF(signedPDF); verifyPDFRequest.setTrustProfileID(trustProfileID); return verifyPDFRequest; } /** * Parse the content contained in a CMSContentBaseType kind of * DOM element. * * @param contentElem * The CMSContentBaseType kind of element to parse. * @return A CMSDataObject API object containing the data from * the given DOM element. * @throws IOException */ private byte[] parsePDF(Element contentElem) throws IOException { Element base64ContentElem = (Element) XPathUtils.selectSingleNode(contentElem, PDF_SIGNATURE_XPATH); String base64Str = DOMUtils.getText(base64ContentElem); return Base64Utils.decode(base64Str, true); } }