From ece7d18cf35374bf4e26d041799cda8f791c89f8 Mon Sep 17 00:00:00 2001 From: gregor Date: Mon, 7 Jul 2003 10:58:37 +0000 Subject: Initial commit git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@2 d688527b-c9ab-4aba-bd8d-4036d912da1d --- .../examples/testclient/APIClientExample.java | 100 ++++++++++++++ .../examples/testclient/HTTPClientExample.java | 120 +++++++++++++++++ .../testclient/HTTPSClientExampleClientAuth.java | 139 ++++++++++++++++++++ .../testclient/HTTPSClientExampleServerAuth.java | 143 +++++++++++++++++++++ .../moa_spss/examples/testclient/client.keystore | Bin 0 -> 1974 bytes .../examples/testclient/example_request.xml | 19 +++ 6 files changed, 521 insertions(+) create mode 100644 spss.server/doc/moa_spss/examples/testclient/APIClientExample.java create mode 100644 spss.server/doc/moa_spss/examples/testclient/HTTPClientExample.java create mode 100644 spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleClientAuth.java create mode 100644 spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleServerAuth.java create mode 100644 spss.server/doc/moa_spss/examples/testclient/client.keystore create mode 100644 spss.server/doc/moa_spss/examples/testclient/example_request.xml (limited to 'spss.server/doc/moa_spss/examples/testclient') diff --git a/spss.server/doc/moa_spss/examples/testclient/APIClientExample.java b/spss.server/doc/moa_spss/examples/testclient/APIClientExample.java new file mode 100644 index 000000000..10324f221 --- /dev/null +++ b/spss.server/doc/moa_spss/examples/testclient/APIClientExample.java @@ -0,0 +1,100 @@ +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 + * Die Datenübertragung erfolgt über eine sichere Verbindung (Clientauthentisierung) + */ +public class HTTPSClientExampleClientAuth { + + // SOAP Konstanten + // CreationServer + private static final QName SERVICE_QNAME = new QName("SignatureCreation"); + private static final String ENDPOINT = "http://localhost:8080/moa-spss/services/SignatureCreation"; + // Secure Endpoint + private static final String SECURE_ENDPOINT = "https://localhost:8443/moa-spss/services/SignatureCreation"; + + /* + VerificationService + wenn Sie diese Werte für ENDPOINT und SERVICE verwenden können Sie eine + Signaturprüfung anstatt einer Signaturerstellung durchführen (entweder mit + ENDPOINT für eine nicht sichere Verbindung bzw. SECURE_ENDPOINT für eine + sichere Verbindung) + + private static final QName SERVICE_QNAME = new QName("SignatureVerification"); + private static final String ENDPOINT = + "http://localhost:8080/moa-spss/services/SignatureVerification"; + private static final String SECURE_ENDPOINT = + "https://localhost:8443/moa-spss/services/SignatureVerification"; + */ + public static final String HANDLER = "java.protocol.handler.pkgs"; + public static final String KEYSTORE = "javax.net.ssl.keyStore"; + public static final String KEYSTOREPASSWORD = "javax.net.ssl.keyStorePassword"; + public static final String TRUSTSTORE = "javax.net.ssl.trustStore"; + public static final String TRUSTSTOREPASSWORD = "javax.net.ssl.trustStorePassword"; + + + /** + * Methode main. + * + * Enthält den Beispielcode der nötig ist um von Java aus auf MOA-SPSS zugreifen zu können. + * Der Zugriff passiert über das AXIS-Framework. Die Verbindung ist eine SSL Verbindung mit Clientauthentisierung. + * + * @param args wird nicht verwendet + */ + + public static void main(String[] args) { + + try { + /* + Einrichten der SSL Verbindungseigenschaften + + Die Verbindung wird über SSL hergestellt, als TrustStore und als Keystore + wird ein JavaKeyStore verwendet der die notwendigen Daten enthält + */ + + Security.addProvider(new Provider()); + System.setProperty(HANDLER,"com.sun.net.ssl.internal.www.protocol"); + System.setProperty(KEYSTORE, "client.keystore"); + System.setProperty(KEYSTOREPASSWORD, "changeit"); + System.setProperty(TRUSTSTORE, "client.keystore"); + System.setProperty(TRUSTSTOREPASSWORD, "changeit"); + + // Datei mit Request einlesen + FileInputStream inputStream = new FileInputStream("example_request.xml"); + + // Parser/DOMBuilder instanzieren + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + + // XML Datei in einen DOM-Baum umwandeln + Document root_request = builder.parse(inputStream); + + // AXIS-Server instanzieren + Service service = ServiceFactory.newInstance().createService(SERVICE_QNAME); + + // Call öffnen + Call call = service.createCall(); + + // Neues BodyElement anlegen und mit dem DOM-Baum füllen + SOAPBodyElement body = new SOAPBodyElement(root_request.getDocumentElement()); + SOAPBodyElement[] params = new SOAPBodyElement[] {body}; + + // Call mit Endpoint verknüpfen + call.setTargetEndpointAddress(SECURE_ENDPOINT); + + // Call auslösen und die Antworten speichern + System.out.println("Calling ..."); + Vector responses = (Vector) call.invoke(params); + + // erstes BodyElement auslesen + SOAPBodyElement response = (SOAPBodyElement) responses.get(0); + + // aus der Response den DOM-Baum lesen + Document root_response = response.getAsDocument(); + System.out.println("Return ..."); + + // Ausgabe auf System.out zum Testen + OutputFormat format = new OutputFormat((Document)root_response); + + format.setLineSeparator("\n"); + format.setIndenting(false); + format.setPreserveSpace(true); + format.setOmitXMLDeclaration(false); + format.setEncoding("UTF-8"); + + XMLSerializer serializer = new XMLSerializer (System.out, format); + serializer.asDOMSerializer(); + serializer.serialize(root_response); + + // Antwort verarbeiten + // ... + // ... + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} \ No newline at end of file diff --git a/spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleServerAuth.java b/spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleServerAuth.java new file mode 100644 index 000000000..26e0df9f1 --- /dev/null +++ b/spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleServerAuth.java @@ -0,0 +1,143 @@ +import java.io.FileInputStream; +import java.security.Security; +import java.util.Vector; + +import javax.xml.namespace.QName; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.rpc.Call; +import javax.xml.rpc.Service; +import javax.xml.rpc.ServiceFactory; + +import org.apache.axis.message.SOAPBodyElement; +import org.apache.xml.serialize.LineSeparator; +import org.apache.xml.serialize.OutputFormat; +import org.apache.xml.serialize.XMLSerializer; +import org.w3c.dom.Document; + +import com.sun.net.ssl.internal.ssl.Provider; + +/** + * @author Sven + * + * Dies ist eine Beispielklasse die den Zugriff auf MOA-SPSS mittels AXIS erklärt.
+ * Die Datenübertragung erfolgt über eine sichere Verbindung (Serverauthentisierung) + */ +public class HTTPSClientExampleServerAuth { + + // SOAP Konstanten + // CreationServer + private static final QName SERVICE_QNAME = new QName("SignatureCreation"); + private static final String ENDPOINT = "http://localhost:8080/moa-spss/services/SignatureCreation"; + // Secure Endpoint + private static final String SECURE_ENDPOINT = "https://localhost:8443/moa-spss/services/SignatureCreation"; + + /* + Secure Endpoint + dieser Endpoint kann alternativ zum ersten ENDPOINT verwendet werden + um eine sichere Verbindung zum Server herzustellen + private static final String SECURE_ENDPOINT = + "https://localhost:8443/moa-spss/services/SignatureCreation"; + */ + + /* + VerificationService + wenn Sie diese Werte für ENDPOINT und SERVICE verwenden können Sie eine + Signaturprüfung anstatt einer Signaturerstellung durchführen (entweder mit + ENDPOINT für eine nicht sichere Verbindung bzw. SECURE_ENDPOINT für eine + sichere Verbindung) + + private static final QName SERVICE_QNAME = new QName("SignatureVerification"); + private static final String ENDPOINT = + "http://localhost:8080/moa-spss/services/SignatureVerification"; + private static final String SECURE_ENDPOINT = + "https://localhost:8443/moa-spss/services/SignatureVerification"; + */ + + // SSL Konstanten + public static final String HANDLER = "java.protocol.handler.pkgs"; + public static final String TRUSTSTORE = "javax.net.ssl.trustStore"; + public static final String TRUSTSTOREPASSWORD = "javax.net.ssl.trustStorePassword"; + + /** + * Methode main. + * + * Enthält den Beispielcode der nötig ist um von Java aus auf MOA-SPSS zugreifen zu können. + * Der Zugriff passiert über das AXIS-Framework. Die Verbindung ist eine SSL Verbindung mit Serverauthentisierung. + * + * @param args wird nicht verwendet + */ + public static void main(String[] args) { + + try { + /* + Einrichten der SSL Verbindungseigenschaften + + Die Verbindung wird über SSL hergestellt, als TrustStore wird + ein JavaKeyStore verwendet der die notwendigen Daten enthält + */ + + Security.addProvider(new Provider()); + System.setProperty(HANDLER,"com.sun.net.ssl.internal.www.protocol"); + System.setProperty(TRUSTSTORE, "client.keystore"); + System.setProperty(TRUSTSTOREPASSWORD, "changeit"); + + // Datei mit Request einlesen + FileInputStream inputStream = new FileInputStream("example_request.xml"); + + // Parser/DOMBuilder instanzieren + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + + // XML Datei in einen DOM-Baum umwandeln + Document root_request = builder.parse(inputStream); + + // AXIS-Server instanzieren + Service service = ServiceFactory.newInstance().createService(SERVICE_QNAME); + + // Call öffnen + Call call = service.createCall(); + + // Neues BodyElement anlegen und mit dem DOM-Baum füllen + SOAPBodyElement body = new SOAPBodyElement(root_request.getDocumentElement()); + SOAPBodyElement[] params = new SOAPBodyElement[] {body}; + + // Call mit Endpoint verknüpfen + call.setTargetEndpointAddress(SECURE_ENDPOINT); + + // Call auslösen und die Antworten speichern + System.out.println("Calling ..."); + Vector responses = (Vector) call.invoke(params); + + // erstes BodyElement auslesen + SOAPBodyElement response = (SOAPBodyElement) responses.get(0); + + // aus der Response den DOM-Baum lesen + Document root_response = response.getAsDocument(); + System.out.println("Return ..."); + + // Ausgabe auf System.out zum Testen + OutputFormat format = new OutputFormat((Document)root_response); + + format.setLineSeparator("\n"); + format.setIndenting(false); + format.setPreserveSpace(true); + format.setOmitXMLDeclaration(false); + format.setEncoding("UTF-8"); + + XMLSerializer serializer = new XMLSerializer (System.out, format); + serializer.asDOMSerializer(); + serializer.serialize(root_response); + + // Antwort verarbeiten + // ... + // ... + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} \ No newline at end of file diff --git a/spss.server/doc/moa_spss/examples/testclient/client.keystore b/spss.server/doc/moa_spss/examples/testclient/client.keystore new file mode 100644 index 000000000..bdb6a5d14 Binary files /dev/null and b/spss.server/doc/moa_spss/examples/testclient/client.keystore differ diff --git a/spss.server/doc/moa_spss/examples/testclient/example_request.xml b/spss.server/doc/moa_spss/examples/testclient/example_request.xml new file mode 100644 index 000000000..6b8166d06 --- /dev/null +++ b/spss.server/doc/moa_spss/examples/testclient/example_request.xml @@ -0,0 +1,19 @@ + + PKCS12RSAKey1 + + + + Testdaten + + + + + text/plain + + + + + + \ No newline at end of file -- cgit v1.2.3