//$Header: /cvsroot-fuse/mec-as2/39/mendelson/comm/as2/cem/messages/TrustRequest.java,v 1.1 2012/04/18 14:10:22 heller Exp $ package de.mendelson.comm.as2.cem.messages; import de.mendelson.util.XPathHelper; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; /* * Copyright (C) mendelson-e-commerce GmbH Berlin Germany * * This software is subject to the license agreement set forth in the license. * Please read and agree to all terms before using this software. * Other product and brand names are trademarks of their respective owners. */ /** * Represents a trust request structure * @author S.Heller * @version $Revision: 1.1 $ */ public class TrustRequest extends CEMStructure { private boolean certUsageEncryption = false; private boolean certUsageSignature = false; private boolean certUsageSSL = false; private Date respondByDate = null; private String responseURL = null; private EndEntity endEntity = null; public TrustRequest() { } /**Returns this request as XML*/ @Override public String toXML() { if (this.endEntity == null) { throw new RuntimeException("TrustRequest: endEntity not set."); } if (this.responseURL == null) { throw new RuntimeException("TrustRequest: responseURL not set."); } StringBuilder builder = new StringBuilder(); builder.append("\t<TrustRequest>\n"); if (this.certUsageEncryption) { builder.append("\t\t<CertUsage>"); builder.append("keyEncipherment"); builder.append("</CertUsage>\n"); } if (this.certUsageSSL) { builder.append("\t\t<CertUsage>"); builder.append("tlsServer"); builder.append("</CertUsage>\n"); } if (this.certUsageSignature) { builder.append("\t\t<CertUsage>"); builder.append("digitalSignature"); builder.append("</CertUsage>\n"); } if( this.respondByDate != null ){ builder.append("\t\t<RespondByDate>"); builder.append(this.toXMLDate(this.respondByDate)); builder.append("</RespondByDate>\n"); } builder.append("\t\t<ResponseURL>"); builder.append(this.responseURL); builder.append("</ResponseURL>\n"); builder.append(this.endEntity.toXML()); builder.append("\t</TrustRequest>\n"); return (builder.toString()); } /**parses the trust requests from an inbound request and returns them*/ public static List<TrustRequest> parse(byte[] data) throws Exception { List<TrustRequest> requestList = new ArrayList<TrustRequest>(); ByteArrayInputStream inStream = new ByteArrayInputStream(data); XPathHelper helper = new XPathHelper(inStream); helper.addNamespace("x", "urn:ietf:params:xml:ns:ediintcertificateexchange"); helper.addNamespace("ds", "http://www.w3.org/2000/09/xmldsig#"); int requestCount = helper.getNodeCount("//x:TrustRequest"); for (int i = 0; i < requestCount; i++) { TrustRequest request = new TrustRequest(); String anchor = "//x:TrustRequest[" + (i + 1) + "]"; request.setResponseURL(helper.getValue(anchor + "/x:ResponseURL")); //respond by date is conditional for encryption and signature. But mainly it will be submitted if( helper.getNodeCount( anchor + "/x:RespondByDate") == 1){ request.setRespondByDate( CEMStructure.parseXMLDate( helper.getValue(anchor + "/x:RespondByDate"))); } int usageCount = helper.getNodeCount(anchor + "/x:CertUsage"); for (int ii = 0; ii < usageCount; ii++) { String usageAnchor = anchor + "/x:CertUsage[" + (ii + 1) + "]"; String usage = helper.getValue(usageAnchor); if (usage.equals("keyEncipherment")) { request.setCertUsageEncryption(true); } else if (usage.equals("digitalSignature")) { request.setCertUsageSignature(true); } else if (usage.equals("tlsServer")) { request.setCertUsageSSL(true); } } request.setEndEntity(EndEntity.parse(data, anchor)); requestList.add(request); } inStream.close(); return (requestList); } /** * @return the certUsageEncryption */ public boolean isCertUsageEncryption() { return certUsageEncryption; } /** * @param certUsageEncryption the certUsageEncryption to set */ public void setCertUsageEncryption(boolean certUsageEncryption) { this.certUsageEncryption = certUsageEncryption; } /** * @return the certUsageSignature */ public boolean isCertUsageSignature() { return certUsageSignature; } /** * @param certUsageSignature the certUsageSignature to set */ public void setCertUsageSignature(boolean certUsageSignature) { this.certUsageSignature = certUsageSignature; } /** * @return the certUsageSSL */ public boolean isCertUsageSSL() { return certUsageSSL; } /** * @param certUsageSSL the certUsageSSL to set */ public void setCertUsageSSL(boolean certUsageSSL) { this.certUsageSSL = certUsageSSL; } /** * @return the respondByDate */ public Date getRespondByDate() { return respondByDate; } /** * @param respondByDate the respondByDate to set */ public void setRespondByDate(Date respondByDate) { this.respondByDate = respondByDate; } /** * @return the responseURL */ public String getResponseURL() { return responseURL; } /** * @param responseURL the responseURL to set */ public void setResponseURL(String responseURL) { this.responseURL = responseURL; } /** * @return the endEntity */ public EndEntity getEndEntity() { return endEntity; } /** * @param endEntity the endEntity to set */ public void setEndEntity(EndEntity endEntity) { this.endEntity = endEntity; } }