diff options
Diffstat (limited to 'spss.handbook/clients/webservice/src/at/gv/egovernment/moa')
-rw-r--r-- | spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTP.java | 230 |
1 files changed, 153 insertions, 77 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 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 |