aboutsummaryrefslogtreecommitdiff
path: root/spss.handbook/clients/webservice
diff options
context:
space:
mode:
Diffstat (limited to 'spss.handbook/clients/webservice')
-rw-r--r--spss.handbook/clients/webservice/conf/http.properties43
-rw-r--r--spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java230
2 files changed, 196 insertions, 77 deletions
diff --git a/spss.handbook/clients/webservice/conf/http.properties b/spss.handbook/clients/webservice/conf/http.properties
new file mode 100644
index 000000000..5e97b24f6
--- /dev/null
+++ b/spss.handbook/clients/webservice/conf/http.properties
@@ -0,0 +1,43 @@
+###
+# Properties für den HTTP Client
+###
+
+#
+# Signieren
+#
+
+# Name des Webservices, fix "SignatureCreation"
+signServiceQName = SignatureCreation
+
+# Zugangspunkt des Webservices
+signServiceEndPoint = http://localhost:8080/moa-spss/services/SignatureCreation
+
+# Name des zu sendenden Signaturerstellungsrequests (entweder absolute
+# oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum
+# Arbeitsverzeichnis der Java VM interpretiert)
+signRequest = clients/webservice/resources/requests/CreateXMLSignatureRequest.Simple.xml
+#signRequest=clients/webservice/resources/requests/CreateXMLSignatureRequest.Refs.xml
+#signRequest=clients/webservice/resources/requests/CreateXMLSignatureRequest.Transforms.xml
+#signRequest=clients/webservice/resources/requests/CreateXMLSignatureRequest.Supplements.xml
+
+
+#
+# Verifizieren
+#
+
+# Name des Webservices, fix "SignatureVerification"
+verifyServiceQName = SignatureVerification
+
+# Zugangspunkt des Webservices
+verifyServiceEndPoint = http://localhost:8080/moa-spss/services/SignatureVerification
+
+# Name des zu sendenden Signaturprüfrequests (entweder absolute
+# oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum
+# Arbeitsverzeichnis der Java VM interpretiert)
+verifyRequest=clients/webservice/resources/requests/VerifyCMSSignatureRequest.Simple.xml
+#verifyRequest=clients/webservice/resources/requests/VerifyCMSSignatureRequest.Extended.xml
+#verifyRequest=clients/webservice/resources/requests/VerifyXMLSignatureRequest.Simple.xml
+#verifyRequest=clients/webservice/resources/requests/VerifyXMLSignatureRequest.Enveloped.xml
+#verifyRequest=clients/webservice/resources/requests/VerifyXMLSignatureRequest.Supplements.xml
+#verifyRequest=clients/webservice/resources/requests/VerifyXMLSignatureRequest.SigManifest.xml
+#verifyRequest=clients/webservice/resources/requests/VerifyXMLSignatureRequest.XMLDSigManifest.xml
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 8f8b42403..46378fbe8 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
@@ -2,6 +2,7 @@ package at.gv.egovernment.moa.spss.handbook.clients.webservice;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.util.Properties;
import java.util.Vector;
import javax.xml.namespace.QName;
@@ -22,27 +23,7 @@ import org.w3c.dom.Document;
*/
public class HTTP
{
- // Zugangspunkt für Signaturerstellung (SS)
-// private static final QName SERVICE_QNAME_ = new QName("SignatureCreation");
-// private static final String ENDPOINT_ = "http://localhost:8080/moa-spss/services/SignatureCreation";
-
- // Zugangspunkt für Signaturprüfung (SP)
- private static final QName SERVICE_QNAME_ = new QName("SignatureVerification");
- private static final String ENDPOINT_ ="http://localhost:8080/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";
+ protected Properties props_;
/**
* Methode main.
@@ -50,71 +31,166 @@ public class HTTP
* 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 erfolgt ungesichert über HTTP.
*
- * @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 Property-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>
+ * </ul>
+ * </li>
+ * </ul>
*/
public static void main(String[] args)
{
try
{
- // 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 xmlRequest = 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(xmlRequest.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 Body Element 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
+ HTTP httpClient = new HTTP(args);
+
+ // Ausführen der Serviceabfrage
+ httpClient.execute(args[0]);
}
catch (Exception e)
{
e.printStackTrace();
}
}
+
+ /**
+ * Prüft, ob das Beispiel korrekt verwendet wird.
+ *
+ * @param args Die Aufrufparameter für das Beispiel.
+ *
+ * @param exampleName Der Name dieses Beispiels, der im Hilfetext gedruckt wird.
+ */
+ protected static void checkArgs(String[] args, String exampleName)
+ {
+ if (args == null || args.length != 2 || (!"sign".equals(args[0]) && !"verify".equals(args[0])))
+ {
+ System.out.println("Verwendung: " + exampleName + " \"sign\"|\"verify\" Properties-Datei");
+ }
+ }
+
+ protected HTTP(String[] args) throws Exception
+ {
+ props_ = new Properties();
+ props_.load(new FileInputStream(args[1]));
+ }
+
+ /**
+ * Führt die Abfrage beim MOA-Service aus.
+ *
+ * @param mode Steuert, ob eine Signatur erstellt ("sign") oder geprüft ("verify") werden soll.
+ *
+ * @throws Exception wenn dabei etwas schiegeht.
+ */
+ protected void execute(String mode) throws Exception
+ {
+ // Datei mit Request einlesen
+ FileInputStream inputStream = new FileInputStream(getProperty(mode + "Request"));
+
+ // Parser/DOMBuilder instanzieren
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ // XML Datei in einen DOM-Baum umwandeln
+ Document xmlRequest = builder.parse(inputStream);
+
+ // AXIS-Server instanzieren
+ Service service = ServiceFactory.newInstance().createService(new QName(getProperty(mode + "ServiceQName")));
+
+ // Call öffnen
+ Call call = service.createCall();
+
+ // Neues BodyElement anlegen und mit dem DOM-Baum füllen
+ SOAPBodyElement body = new SOAPBodyElement(xmlRequest.getDocumentElement());
+ SOAPBodyElement[] params = new SOAPBodyElement[]
+ {
+ body
+ };
+
+ // Call mit Endpoint verknüpfen
+ call.setTargetEndpointAddress(getProperty(mode + "ServiceEndPoint"));
+
+ // Call auslösen und die Antworten speichern
+ System.out.println("Calling ...");
+ Vector responses = (Vector) call.invoke(params);
+
+ // Erstes Body Element 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 = getProperty(mode + "Request").substring(0, getProperty(mode + "Request").lastIndexOf('.'))
+ + ".response.xml";
+ XMLSerializer fileSerializer = new XMLSerializer(new FileOutputStream(responseFile), format);
+ fileSerializer.serialize(root_response);
+ }
+
+ /**
+ * Prüft ob die Property mit dem angegebenen Namen in den Konfigurations-Properties enthalten ist.
+ *
+ * @param propName Name der zu untersuchenden Property.
+ *
+ * @return den Wert der gesuchten Property.
+ *
+ * @throws Exception wenn die gesuchte Property nicht vorhanden ist.
+ */
+ protected String getProperty(String propName) throws Exception
+ {
+ String propValue = props_.getProperty(propName);
+ if ((propValue == null) || "".equals(propValue.trim()))
+ {
+ throw new Exception("Property named \"" + propName + "\" does not exist.");
+ }
+ return propValue;
+ }
} \ No newline at end of file