diff options
| author | tlenz <thomas.lenz@egiz.gv.at> | 2017-06-27 10:38:31 +0200 | 
|---|---|---|
| committer | tlenz <thomas.lenz@egiz.gv.at> | 2017-06-27 10:38:31 +0200 | 
| commit | d69e3b6fb1dec68c0142eda193d1302f5a1ea383 (patch) | |
| tree | faa7d6422210f3320503ddf3d3b24152e049e80c /release-infos/handbook/clients/webservice/src | |
| parent | 997b70350b176d8e01ede2653785346555b6aca0 (diff) | |
| parent | 25f28669519773054184d6695114f38c5da4e177 (diff) | |
| download | moa-sig-d69e3b6fb1dec68c0142eda193d1302f5a1ea383.tar.gz moa-sig-d69e3b6fb1dec68c0142eda193d1302f5a1ea383.tar.bz2 moa-sig-d69e3b6fb1dec68c0142eda193d1302f5a1ea383.zip | |
lokal merge
Merge branch 'nightlybuild' of https://gitlab.iaik.tugraz.at/egiz/moa-sig into nightlybuild
Diffstat (limited to 'release-infos/handbook/clients/webservice/src')
3 files changed, 524 insertions, 0 deletions
| diff --git a/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java b/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java new file mode 100644 index 0000000..0ed47e4 --- /dev/null +++ b/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java @@ -0,0 +1,229 @@ +/* + * Copyright 2003 Federal Chancellery Austria + + * MOA-SPSS has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + + +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; +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; + +/** + * Diese Klasse implementiert einen einfachen Client f�r das MOA SP/SS Webservice mittels Apache Axis. Die + * Verbindung erfolgt ungesichert über HTTP. + */ +public class HTTP +{ +  protected Properties props_; + +  /** +   * 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 erfolgt ungesichert über HTTP. +   *  +   * @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 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 +    { +      // 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. Siehe {@link HTTP#main(String[])}. +   *  +   * @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"); +    } +  } +   +  /** +   * 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(); +    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 diff --git a/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java b/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java new file mode 100644 index 0000000..33a94ff --- /dev/null +++ b/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java @@ -0,0 +1,146 @@ +/* + * Copyright 2003 Federal Chancellery Austria + * MOA-SPSS has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + + +package at.gv.egovernment.moa.spss.handbook.clients.webservice; + + +/** + * 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 extends HTTPSServerAuth +{ +  // 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"; + +  /** +   * Methode main. +   *  +   * Enthaelt den Beispielcode der  noetig ist um von Java aus auf MOA-SPSS zugreifen zu koennen. Der Zugriff +   * passiert ueber das AXIS-Framework. Die Verbindung erfolgt gesichert ueber SSL, und zwar sowohl mit  +   * Server- und Clientauthentisierung. +   *  +   * @param args <ul> +   *             <li> +   *             args[0] enthaelt entweder die Bezeichnung "sign" oder "verify" zur Kennzeichnung, +   *             ob ein Signaturerstellungsrequest, oder ein Signaturprüefrequest gesendet werden soll. +   *             </li> +   *             <li> +   *             args[1] enthaelt einen Verweis auf eine Property-Datei, die die n�here Konfiguration +   *             fuer dieses Beispiel enthaelt. Der Verweis enthaelt entweder eine absolute oder eine +   *             relative Pfadangabe, wobei eine relative Angabe als relativ zum Arbeitsverzeichnis der +   *             Java VM interpretiert wird. Folgende Properties muessen 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 Signaturpruefrequests (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" fuer einen +   *             Java Key Store oder "PKCS12" fuer 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" fuer einen +   *             Java Key Store oder "PKCS12" fuer 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 +    { +      // 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 uebergebenen Aufrufparameter. +   *  +   * @param args Die Aufrufparameter fuer 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 fuer eine SSL-Verbindung mit Client- und Serverauthentisierung. +   */ +  protected void configureSSL() throws Exception +  { +    super.configureSSL(); +     +    // Konfiguriere Key-Store (enth�lt privaten Schl�ssel und Zertifikat des Clients) +    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/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java b/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java new file mode 100644 index 0000000..d725648 --- /dev/null +++ b/release-infos/handbook/clients/webservice/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSServerAuth.java @@ -0,0 +1,149 @@ +/* + * Copyright 2003 Federal Chancellery Austria + * MOA-SPSS has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + + +package at.gv.egovernment.moa.spss.handbook.clients.webservice; + +import java.security.Security; + +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 ueber SSL, und zwar nur mit Serverauthentisierung. + */ +public class HTTPSServerAuth extends HTTP +{ +  // 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"; + +  /** +   * Methode main. +   *  +   * Enthaelt den Beispielcode der noetig ist um von Java aus auf MOA-SPSS zugreifen zu koennen. Der Zugriff +   * passiert ueber das AXIS-Framework. Die Verbindung erfolgt gesichert ueber SSL, und zwar nur mit  +   * Serverauthentisierung. +   *  +   * @param args <ul> +   *             <li> +   *             args[0] enthaelt entweder die Bezeichnung "sign" oder "verify" zur Kennzeichnung, +   *             ob ein Signaturerstellungsrequest, oder ein Signaturpruefrequest gesendet werden soll. +   *             </li> +   *             <li> +   *             args[1] enthaelt einen Verweis auf eine Property-Datei, die die naehere Konfiguration +   *             fuer dieses Beispiel enthaelt. Der Verweis enthaelt entweder eine absolute oder eine +   *             relative Pfadangabe, wobei eine relative Angabe als relativ zum Arbeitsverzeichnis der +   *             Java VM interpretiert wird. Folgende Properties muessen 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 Signaturpruefrequests (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" fuer einen +   *             Java Key Store oder "PKCS12" fuer 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 fuer den JSSE-Truststore. +   *             </li> +   *             </ul> +   *             </li> +   *             </ul> +   */ +  public static void main(String[] args) +  { +    try +    { +      // 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 fuer das Beispiel. Siehe {@link HTTPSServerAuth#main(String[])}. +   *  +   * @throws Exception wenn der MOA Client mit den uebergebenen Aufrufparametern nicht korrekt erzeugt +   *         werden konnte.  +   */ +  protected HTTPSServerAuth(String[] args) throws Exception +  { +    super(args); +    configureSSL(); +  } +   +  /** +   * Konfiguriert JSSE fuer eine SSL-Verbindung mit Serverauthentisierung. +   *  +   * @throws Exception wenn die Konfiguration von JSSE fehlschlaegt. +   */ +  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, getProperty("ssl.truststore.type")); +    System.setProperty(TRUSTSTORE, getProperty("ssl.truststore.loc")); +    System.setProperty(TRUSTSTOREPASSWORD, getProperty("ssl.truststore.pwd")); +  } +}
\ No newline at end of file | 
