aboutsummaryrefslogtreecommitdiff
path: root/spss.server/doc/moa_spss/examples/testclient
diff options
context:
space:
mode:
Diffstat (limited to 'spss.server/doc/moa_spss/examples/testclient')
-rw-r--r--spss.server/doc/moa_spss/examples/testclient/APIClientExample.java100
-rw-r--r--spss.server/doc/moa_spss/examples/testclient/HTTPClientExample.java120
-rw-r--r--spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleClientAuth.java139
-rw-r--r--spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleServerAuth.java143
-rw-r--r--spss.server/doc/moa_spss/examples/testclient/client.keystorebin0 -> 1974 bytes
-rw-r--r--spss.server/doc/moa_spss/examples/testclient/example_request.xml19
6 files changed, 521 insertions, 0 deletions
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<children.getLength();counter++)
+ displayTree(children.item(counter));
+ }
+}
diff --git a/spss.server/doc/moa_spss/examples/testclient/HTTPClientExample.java b/spss.server/doc/moa_spss/examples/testclient/HTTPClientExample.java
new file mode 100644
index 000000000..f70f33d12
--- /dev/null
+++ b/spss.server/doc/moa_spss/examples/testclient/HTTPClientExample.java
@@ -0,0 +1,120 @@
+import java.io.FileInputStream;
+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;
+
+/**
+ * @author Sven
+ *
+ * Dies ist eine Beispielklasse die den Zugriff auf MOA-SPSS mittels AXIS erklärt
+ */
+public class HTTPClientExample {
+
+ // SOAP Konstanten
+ // CreationServer
+ private static final QName SERVICE_QNAME = new QName("SignatureCreation");
+ private static final String ENDPOINT = "http://localhost:8080/moa-spss/services/SignatureCreation";
+ /*private static final String ENDPOINT =
+ "http://localhost:8080/moa-spss/services/SignatureVerification";*/
+ /*
+ 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 SECURE_ENDPOINT =
+ "https://localhost:8443/moa-spss/services/SignatureVerification";
+ */
+
+ /**
+ * 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.
+ *
+ * @param args wird nicht verwendet
+ */
+ public static void main(String[] args) {
+
+ try {
+ // 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(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();
+ }
+
+ }
+}
diff --git a/spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleClientAuth.java b/spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleClientAuth.java
new file mode 100644
index 000000000..0a17e7fcd
--- /dev/null
+++ b/spss.server/doc/moa_spss/examples/testclient/HTTPSClientExampleClientAuth.java
@@ -0,0 +1,139 @@
+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. <br>
+ * 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. <br>
+ * 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
--- /dev/null
+++ b/spss.server/doc/moa_spss/examples/testclient/client.keystore
Binary files 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 @@
+<?xml version="1.0" encoding="UTF-8"?><CreateXMLSignatureRequest
+ xmlns="http://reference.e-government.gv.at/namespace/moa/20020822#"
+ xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>
+ <SingleSignatureInfo SecurityLayerConformity="false">
+ <DataObjectInfo Structure="enveloping" ChildOfManifest="false">
+ <DataObject>
+ <XMLContent xml:space="preserve">Testdaten</XMLContent>
+ </DataObject>
+ <CreateTransformsInfoProfile>
+ <CreateTransformsInfo>
+ <FinalDataMetaInfo>
+ <MimeType>text/plain</MimeType>
+ </FinalDataMetaInfo>
+ </CreateTransformsInfo>
+ </CreateTransformsInfoProfile>
+ </DataObjectInfo>
+ </SingleSignatureInfo>
+</CreateXMLSignatureRequest> \ No newline at end of file