diff options
Diffstat (limited to 'spss.handbook/clients/webservice/src/at/gv')
3 files changed, 175 insertions, 234 deletions
diff --git a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java index 46378fbe8..ce38a0932 100644 --- a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java +++ b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java @@ -91,7 +91,7 @@ public class HTTP /** * Prüft, ob das Beispiel korrekt verwendet wird. * - * @param args Die Aufrufparameter für das Beispiel. + * @param args Die Aufrufparameter für das Beispiel. Siehe {@link HTTP#main(String[])}. * * @param exampleName Der Name dieses Beispiels, der im Hilfetext gedruckt wird. */ @@ -103,6 +103,14 @@ public class HTTP } } + /** + * Erzeugt den MOA Client. Es erfolgt die Auswertung der übergebenen Aufrufparameter. + * + * @param args Die Aufrufparameter für das Beispiel. Siehe {@link HTTP#main(String[])}. + * + * @throws Exception wenn der MOA Client mit den übergebenen Aufrufparametern nicht korrekt erzeugt + * werden konnte. + */ protected HTTP(String[] args) throws Exception { props_ = new Properties(); diff --git a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java index ad7ecb6b6..484dfc313 100644 --- a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java +++ b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java @@ -1,163 +1,122 @@ package at.gv.egovernment.moa.spss.handbook.clients.webservice; -import java.io.FileInputStream; -import java.io.FileOutputStream; -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.OutputFormat; -import org.apache.xml.serialize.XMLSerializer; -import org.w3c.dom.Document; - -import com.sun.net.ssl.internal.ssl.Provider; /** * Diese Klasse implementiert einen einfachen Client für das MOA SP/SS Webservice mittels Apache Axis. Die * Verbindung erfolgt gesichert über SSL, und zwar sowohl mit Server- und Clientauthentisierung. */ -public class HTTPSClientAuth +public class HTTPSClientAuth extends HTTPSServerAuth { - // Zugangspunkt für Signaturerstellung (SS) - private static final QName SERVICE_QNAME_ = new QName("SignatureCreation"); - private static final String SECURE_ENDPOINT_ = "https://localhost:8443/moa-spss/services/SignatureCreation"; - - // Zugangspunkt für Signaturprüfung (SP) -// private static final QName SERVICE_QNAME_ = new QName("SignatureVerification"); -// private static final String SECURE_ENDPOINT_ = "https://localhost:8443/moa-spss/services/SignatureVerification"; - - // Datei mit dem zu sendenden XML-Request - private static final String XML_REQUEST_FILENAME_ = - "clients/webservice/resources/requests/CreateXMLSignatureRequest.Simple.xml"; -// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Refs.xml"; -// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Transforms.xml"; -// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Supplements.xml"; -// "clients/webservice/resources/requests/VerifyCMSSignatureRequest.Simple.xml"; -// "clients/webservice/resources/requests/VerifyCMSSignatureRequest.Extended.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Simple.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Enveloped.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Supplements.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.SigManifest.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.XMLDSigManifest.xml"; - - // SSL Konstanten - public static final String HANDLER = "java.protocol.handler.pkgs"; - + // JSSE Konstanten public static final String KEYSTORE = "javax.net.ssl.keyStore"; public static final String KEYSTOREPASSWORD = "javax.net.ssl.keyStorePassword"; public static final String KEYSTORETYPE = "javax.net.ssl.keyStoreType"; - public static final String TRUSTSTORE = "javax.net.ssl.trustStore"; - public static final String TRUSTSTOREPASSWORD = "javax.net.ssl.trustStorePassword"; - public static final String TRUSTSTORETYPE = "javax.net.ssl.trustStoreType"; - /** * 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. + * passiert über das AXIS-Framework. Die Verbindung erfolgt gesichert über SSL, und zwar sowohl mit + * Server- und Clientauthentisierung. * - * @param args Wird nicht verwendet. + * @param args <ul> + * <li> + * args[0] enthält entweder die Bezeichnung "sign" oder "verify" zur Kennzeichnung, + * ob ein Signaturerstellungsrequest, oder ein Signaturprüfrequest gesendet werden soll. + * </li> + * <li> + * args[1] enthält einen Verweis auf eine Property-Datei, die die nähere Konfiguration + * für dieses Beispiel enthält. Der Verweis ist enthält entweder eine absolute oder eine + * relative Pfadangabe, wobei eine relative Angabe als relativ zum Arbeitsverzeichnis der + * Java VM interpretiert wird. Folgende Properties müssen in der Properties-Datei vorhanden + * sein: + * <ul> + * <li> + * <code>signServiceQName</code>: Name des Webservices, fix "SignatureCreation" + * </li> + * <li> + * <code>signServiceEndPoint</code>: Zugangspunkt des Webservices (URL) + * </li> + * <li> + * <code>signRequest</code>: Name des zu sendenden Signaturerstellungsrequests (entweder + * absolute oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum + * Arbeitsverzeichnis der Java VM interpretiert) + * </li> + * <li> + * <code>verifyServiceQName</code>: Name des Webservices, fix "SignatureVerification" + * </li> + * <li> + * <code>verifyServiceEndPoint</code>: Zugangspunkt des Webservices (URL) + * </li> + * <li> + * <code>verifyRequest</code>: Name des zu sendenden Signaturprüfrequests (entweder + * absolute oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum + * Arbeitsverzeichnis der Java VM interpretiert) + * </li> + * <li> + * <code>ssl.truststore.type</code>: Typ des JSSE-Truststores (entweder "JKS" für einen + * Java Key Store oder "PKCS12" für eine PKCS#12-Datei). + * </li> + * <li><code>ssl.truststore.type</code>: Relativer oder absoluter Pfad zum JSSE-Truststore. + * Ein relativer Pfad wird relativ zum Arbeitsverzeichnis der Java VM interpretiert). + * </li> + * <li><code>ssl.truststore.pwd</code>: Passwort für den JSSE-Truststore. + * </li> + * <li> + * <code>ssl.keystore.type</code>: Typ des JSSE-Keystores (entweder "JKS" für einen + * Java Key Store oder "PKCS12" für eine PKCS#12-Datei). + * </li> + * <li><code>ssl.keystore.type</code>: Relativer oder absoluter Pfad zum JSSE-Keystore. + * Ein relativer Pfad wird relativ zum Arbeitsverzeichnis der Java VM interpretiert). + * </li> + * <li><code>ssl.keystore.pwd</code>: Passwort für den JSSE-Keystore. + * </li> + * </ul> + * </li> + * </ul> */ public static void main(String[] args) { try { - configureSSL(); - - // Datei mit Request einlesen - FileInputStream inputStream = new FileInputStream(XML_REQUEST_FILENAME_); - - // 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 ..."); - - // XML-Formatierung konfiguieren - OutputFormat format = new OutputFormat((Document) root_response); - format.setLineSeparator("\n"); - format.setIndenting(false); - format.setPreserveSpace(true); - format.setOmitXMLDeclaration(false); - format.setEncoding("UTF-8"); - - // Ausgabe der Webservice-Antwort auf die Konsole - XMLSerializer conSerializer = new XMLSerializer(System.out, format); - conSerializer.serialize(root_response); - - // Ausgabe der Webservice-Antwort in Datei - String responseFile = XML_REQUEST_FILENAME_.substring(0, XML_REQUEST_FILENAME_.lastIndexOf('.')) - + ".response.xml"; - XMLSerializer fileSerializer = new XMLSerializer(new FileOutputStream(responseFile), format); - fileSerializer.serialize(root_response); + // Prüfen, ob Beispiel korrekt verwendet wird + checkArgs(args, "HTTP"); + + // Initialisieren des Clients + HTTPSClientAuth httpClient = new HTTPSClientAuth(args); + + // Ausführen der Serviceabfrage + httpClient.execute(args[0]); } catch (Exception e) { e.printStackTrace(); } } - + + /** + * Erzeugt den MOA Client. Es erfolgt die Auswertung der übergebenen Aufrufparameter. + * + * @param args Die Aufrufparameter für das Beispiel. Siehe {@link HTTPSClientAuth#main(String[])}. + * + * @throws Exception wenn der MOA Client mit den übergebenen Aufrufparametern nicht korrekt erzeugt + * werden konnte. + */ + protected HTTPSClientAuth(String[] args) throws Exception + { + super(args); + } + /** * Konfiguriert JSSE für eine SSL-Verbindung mit Client- und Serverauthentisierung. */ - private static void configureSSL() + protected void configureSSL() throws Exception { - // Aktivieren Sie die nächste Zeile für detailliertes Logging des SSL-Verbindungsaufbaus - // System.setProperty("javax.net.debug", "all"); + super.configureSSL(); - Security.addProvider(new Provider()); - System.setProperty(HANDLER, "com.sun.net.ssl.internal.www.protocol"); - // Konfiguriere Key-Store (enthält privaten Schlüssel und Zertifikat des Clients) - System.setProperty(KEYSTORETYPE, "PKCS12"); - System.setProperty(KEYSTORE, - "clients/webservice/resources/sslKeys/customer1/moa-ssl-kunde1(pwd=kunde1).p12"); -// "clients/webservice/resources/sslKeys/customer2/moa-ssl-kunde2(pwd=kunde2).p12"); - System.setProperty(KEYSTOREPASSWORD, "kunde1"); -// System.setProperty(KEYSTOREPASSWORD, "kunde2"); - - // Konfiguriere Trust-Store (enthält SSL-Zertifikat des MOA Services, dem vertraut wird) - System.setProperty(TRUSTSTORETYPE, "JKS"); - System.setProperty(TRUSTSTORE, - "clients/webservice/resources/sslKeys/customer1/trustedServers(pwd=servers).keystore"); -// "clients/webservice/resources/sslKeys/customer2/trustedServers(pwd=servers).keystore"); - System.setProperty(TRUSTSTOREPASSWORD, "servers"); + System.setProperty(KEYSTORETYPE, getProperty("ssl.keystore.type")); + System.setProperty(KEYSTORE, getProperty("ssl.keystore.loc")); + System.setProperty(KEYSTOREPASSWORD, getProperty("ssl.keystore.pwd")); } }
\ No newline at end of file diff --git a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java index c9f67148f..35bff1c57 100644 --- a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java +++ b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java @@ -1,21 +1,6 @@ package at.gv.egovernment.moa.spss.handbook.clients.webservice; -import java.io.FileInputStream; -import java.io.FileOutputStream; 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.OutputFormat; -import org.apache.xml.serialize.XMLSerializer; -import org.w3c.dom.Document; import com.sun.net.ssl.internal.ssl.Provider; @@ -23,33 +8,10 @@ import com.sun.net.ssl.internal.ssl.Provider; * Diese Klasse implementiert einen einfachen Client für das MOA SP/SS Webservice mittels Apache Axis. Die * Verbindung erfolgt gesichert über SSL, und zwar nur mit Serverauthentisierung. */ -public class HTTPSServerAuth +public class HTTPSServerAuth extends HTTP { - // Zugangspunkt für Signaturerstellung (SS) - private static final QName SERVICE_QNAME_ = new QName("SignatureCreation"); - private static final String SECURE_ENDPOINT_ = "https://localhost:8443/moa-spss/services/SignatureCreation"; - - // Zugangspunkt für Signaturprüfung (SP) -// private static final QName SERVICE_QNAME_ = new QName("SignatureVerification"); -// private static final String SECURE_ENDPOINT_ = "https://localhost:8443/moa-spss/services/SignatureVerification"; - - // Datei mit dem zu sendenden XML-Request - private static final String XML_REQUEST_FILENAME_ = - "clients/webservice/resources/requests/CreateXMLSignatureRequest.Simple.xml"; -// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Refs.xml"; -// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Transforms.xml"; -// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Supplements.xml"; -// "clients/webservice/resources/requests/VerifyCMSSignatureRequest.Simple.xml"; -// "clients/webservice/resources/requests/VerifyCMSSignatureRequest.Extended.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Simple.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Enveloped.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Supplements.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.SigManifest.xml"; -// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.XMLDSigManifest.xml"; - - // SSL Konstanten + // JSSE 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"; public static final String TRUSTSTORETYPE = "javax.net.ssl.trustStoreType"; @@ -58,94 +20,106 @@ public class HTTPSServerAuth * 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. + * passiert über das AXIS-Framework. Die Verbindung erfolgt gesichert über SSL, und zwar nur mit + * Serverauthentisierung. * - * @param args Wird nicht verwendet. + * @param args <ul> + * <li> + * args[0] enthält entweder die Bezeichnung "sign" oder "verify" zur Kennzeichnung, + * ob ein Signaturerstellungsrequest, oder ein Signaturprüfrequest gesendet werden soll. + * </li> + * <li> + * args[1] enthält einen Verweis auf eine Property-Datei, die die nähere Konfiguration + * für dieses Beispiel enthält. Der Verweis ist enthält entweder eine absolute oder eine + * relative Pfadangabe, wobei eine relative Angabe als relativ zum Arbeitsverzeichnis der + * Java VM interpretiert wird. Folgende Properties müssen in der Properties-Datei vorhanden + * sein: + * <ul> + * <li> + * <code>signServiceQName</code>: Name des Webservices, fix "SignatureCreation" + * </li> + * <li> + * <code>signServiceEndPoint</code>: Zugangspunkt des Webservices (URL) + * </li> + * <li> + * <code>signRequest</code>: Name des zu sendenden Signaturerstellungsrequests (entweder + * absolute oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum + * Arbeitsverzeichnis der Java VM interpretiert) + * </li> + * <li> + * <code>verifyServiceQName</code>: Name des Webservices, fix "SignatureVerification" + * </li> + * <li> + * <code>verifyServiceEndPoint</code>: Zugangspunkt des Webservices (URL) + * </li> + * <li> + * <code>verifyRequest</code>: Name des zu sendenden Signaturprüfrequests (entweder + * absolute oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum + * Arbeitsverzeichnis der Java VM interpretiert) + * </li> + * <li> + * <code>ssl.truststore.type</code>: Typ des JSSE-Truststores (entweder "JKS" für einen + * Java Key Store oder "PKCS12" für eine PKCS#12-Datei). + * </li> + * <li><code>ssl.truststore.type</code>: Relativer oder absoluter Pfad zum JSSE-Truststore. + * Ein relativer Pfad wird relativ zum Arbeitsverzeichnis der Java VM interpretiert). + * </li> + * <li><code>ssl.truststore.pwd</code>: Passwort für den JSSE-Truststore. + * </li> + * </ul> + * </li> + * </ul> */ public static void main(String[] args) { try { - configureSSL(); - - // Datei mit Request einlesen - FileInputStream inputStream = new FileInputStream(XML_REQUEST_FILENAME_); - - // 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 ..."); - - // XML-Formatierung konfiguieren - OutputFormat format = new OutputFormat((Document) root_response); - format.setLineSeparator("\n"); - format.setIndenting(false); - format.setPreserveSpace(true); - format.setOmitXMLDeclaration(false); - format.setEncoding("UTF-8"); - - // Ausgabe der Webservice-Antwort auf die Konsole - XMLSerializer conSerializer = new XMLSerializer(System.out, format); - conSerializer.serialize(root_response); - - // Ausgabe der Webservice-Antwort in Datei - String responseFile = XML_REQUEST_FILENAME_.substring(0, XML_REQUEST_FILENAME_.lastIndexOf('.')) - + ".response.xml"; - XMLSerializer fileSerializer = new XMLSerializer(new FileOutputStream(responseFile), format); - fileSerializer.serialize(root_response); + // Prüfen, ob Beispiel korrekt verwendet wird + checkArgs(args, "HTTP"); + + // Initialisieren des Clients + HTTPSServerAuth httpClient = new HTTPSServerAuth(args); + + // Ausführen der Serviceabfrage + httpClient.execute(args[0]); } catch (Exception e) { e.printStackTrace(); } } - + + /** + * Erzeugt den MOA Client. Es erfolgt die Auswertung der übergebenen Aufrufparameter. + * + * @param args Die Aufrufparameter für das Beispiel. Siehe {@link HTTPSServerAuth#main(String[])}. + * + * @throws Exception wenn der MOA Client mit den übergebenen Aufrufparametern nicht korrekt erzeugt + * werden konnte. + */ + protected HTTPSServerAuth(String[] args) throws Exception + { + super(args); + configureSSL(); + } + /** * Konfiguriert JSSE für eine SSL-Verbindung mit Serverauthentisierung. + * + * @throws Exception wenn die Konfiguration von JSSE fehlschlägt. */ - private static void configureSSL() + protected void configureSSL() throws Exception { // Aktivieren Sie die nächste Zeile für detailliertes Logging des SSL-Verbindungsaufbaus // System.setProperty("javax.net.debug", "all"); + // Setzen des korrekten Protokoll-Handlers für https Security.addProvider(new Provider()); System.setProperty(HANDLER, "com.sun.net.ssl.internal.www.protocol"); // Konfiguriere Trust-Store (enthält SSL-Zertifikat des MOA Services, dem vertraut wird) - System.setProperty(TRUSTSTORETYPE, "JKS"); - System.setProperty(TRUSTSTORE, - "clients/webservice/resources/sslKeys/customer1/trustedServers(pwd=servers).keystore"); -// "clients/webservice/resources/sslKeys/customer2/trustedServers(pwd=servers).keystore"); - System.setProperty(TRUSTSTOREPASSWORD, "servers"); + System.setProperty(TRUSTSTORETYPE, getProperty("ssl.truststore.type")); + System.setProperty(TRUSTSTORE, getProperty("ssl.truststore.loc")); + System.setProperty(TRUSTSTOREPASSWORD, getProperty("ssl.truststore.pwd")); } }
\ No newline at end of file |