From d6440ed131c0e6aa12c1cdaef0c849b5c014f9ef Mon Sep 17 00:00:00 2001
From: gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>
Date: Mon, 29 Nov 2004 15:23:32 +0000
Subject: =?UTF-8?q?HTTP=20Client=20Beispiel=20=C3=BCberarbeitet.=20Konfigu?=
 =?UTF-8?q?ration=20nicht=20mehr=20hartkodiert,=20sondern=20=C3=BCber=20Pr?=
 =?UTF-8?q?operties-File.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@202 d688527b-c9ab-4aba-bd8d-4036d912da1d
---
 .../clients/webservice/conf/http.properties        |  43 ++++
 .../moa/spss/handbook/clients/webservice/HTTP.java | 230 ++++++++++++++-------
 2 files changed, 196 insertions(+), 77 deletions(-)
 create mode 100644 spss.handbook/clients/webservice/conf/http.properties

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
-- 
cgit v1.2.3