diff options
| author | gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2004-11-29 15:23:32 +0000 | 
|---|---|---|
| committer | gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2004-11-29 15:23:32 +0000 | 
| commit | d6440ed131c0e6aa12c1cdaef0c849b5c014f9ef (patch) | |
| tree | 9651b2beff422580ede85d70376cbd561e10c28c /spss.handbook/clients/webservice | |
| parent | c727d30fd667905bea07b4f0d67de04e593a217d (diff) | |
| download | moa-id-spss-d6440ed131c0e6aa12c1cdaef0c849b5c014f9ef.tar.gz moa-id-spss-d6440ed131c0e6aa12c1cdaef0c849b5c014f9ef.tar.bz2 moa-id-spss-d6440ed131c0e6aa12c1cdaef0c849b5c014f9ef.zip | |
HTTP Client Beispiel überarbeitet. Konfiguration nicht mehr hartkodiert,
sondern über Properties-File.
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@202 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss.handbook/clients/webservice')
| -rw-r--r-- | spss.handbook/clients/webservice/conf/http.properties | 43 | ||||
| -rw-r--r-- | spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java | 230 | 
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 | 
