import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import at.gv.egovernment.moa.spss.api.SPSSFactory; import at.gv.egovernment.moa.spss.api.SignatureCreationService; import at.gv.egovernment.moa.spss.api.xmlsign.*; import at.gv.egovernment.moa.spss.api.common.*; /** * @author Sven Aigner * * Dies ist ein einfaches Beispielprogramm für die Erstellung * einer digitalen Signatur mittel der API-Funktionen des * MOA-SPSS Servers */ public class APIClientExample { /** * Hauptfunktion des Beispielprogramms * @param args wird nicht ausgewertet * @throws Exception sollten Fehler auftreten werden die Fehler an die Java-VM weitergeleitet */ public static void main(String[] args) throws Exception{ // Serverfunktionshandler instanzieren SPSSFactory spf = SPSSFactory.getInstance(); // Signaturedaten in ein Contentobjekt einbinden byte []data = "Dies sind Testdaten".getBytes("UTF-8"); ByteArrayInputStream bis = new ByteArrayInputStream(data); Content cont = spf.createContent(bis,"http://uri.data.org"); // Beschreibungselement zu den Daten erstellen MetaInfo mi = spf.createMetaInfo("text/plain","Testdaten",null); // Transformationen erstellen CreateTransformsInfo cti = spf.createCreateTransformsInfo(null,mi); CreateTransformsInfoProfile ct = spf.createCreateTransformsInfoProfile(cti,null); // Datenobjekt aufbauen DataObjectInfo doi = spf.createDataObjectInfo(DataObjectInfo.STRUCTURE_DETACHED,false,cont,ct); List dataobjectinfolist = new ArrayList(); dataobjectinfolist.add(doi); // alles zusammenpacken zu einer SingleSignature SingleSignatureInfo ssi = spf.createSingleSignatureInfo(dataobjectinfolist,null,false); List singlesignatureinfolist = new ArrayList(); singlesignatureinfolist.add(ssi); // die Signatur in einen Request einbetten CreateXMLSignatureRequest cxsreq = spf.createCreateXMLSignatureRequest("PKCS12RSAKey1",singlesignatureinfolist); // Signatureerstellungsservice aufrufen SignatureCreationService scs = SignatureCreationService.getInstance(); // Response auswerten CreateXMLSignatureResponse cxsres = scs.createXMLSignature(cxsreq); List elements = cxsres.getResponseElements(); SignatureEnvironmentResponse ser = (SignatureEnvironmentResponse)elements.get(0); // Responsetyp lesen int response_type = ser.getResponseType(); if(response_type == SignatureEnvironmentResponse.ERROR_RESPONSE) { // Fehlerfall System.out.println("Bei der Erstellung der Signatur ist ein Fehler aufgetreten"); } else { // Signaturerstellung erfolgreich Element se = ser.getSignatureEnvironment(); System.out.println("Signaturerstellung erfolgreich"); displayTree(se); } } /** * Einfache Ausgabefunktion für einen DOM-Baum * @param input auszugebender Knoten */ public static void displayTree(Node input) { // Ausgabe eines Knotens System.out.println(input); // Alle Kindknoten ausgeben NodeList children = input.getChildNodes(); for(int counter=0;counter