How-to: Wie kann man die Webservices von webPDF 7 verwenden

Minimale technische Voraussetzungen

  • Java version: 7
  • webPDF version: 7
  • wsclient version: 1

Bild Glühbirne: Anleitung - Tutorial

Dieses How-to wurde für webPDF 7 und folgende Versionen erstellt. Die Nutzung der Webservice-Schnittstellen hat sich mit dieser Version grundlegend geändert. Für webPDF 6 finden Sie dieses Tutorial unter https://www.webpdf.de/.

Webservices von webPDF 7

In diesem Beispiel geht es darum zu zeigen, wie man die Webservices von webPDF nutzen kann. Verwendet wird der Webservice Converter, um eine ausgewählte Datei in ein PDF-Dokument zu konvertieren. Zur Ansteuerung des Webservice wird die Programmiersprache Java genutzt.

Um dieses Beispiel auf Ihrem PC nachzuvollziehen, benötigen Sie ein lokal installiertes webPDF, ein JDK mit Version 1.7 oder höher und die IDE IntelliJ (die Community-Edition genügt für diesen Zweck).

Einrichtung des Projektes mit IntelliJ

Nachdem Sie die Softwareumgebung eingerichtet haben, beginnen Sie mit dem Anlegen des Java-Projektes in IntelliJ. Nach dem Start klicken Sie in der Startansicht auf Create new Project oder, wenn Sie bereits Projekte mit IntelliJ geöffnet hatten, in der Menüleiste der Hauptansicht auf File -> New -> Project....

Danach wählen Sie Java als Projekttyp (1) aus und wählen Ihr installiertes JDK aus, das Sie vermutlich noch mit New... (2) hinzufügen müssen (dazu müssen Sie den Hauptordner des JDKs in Ihrem Dateisystem auswählen).

Screenshot Projektanlage 1

Klicken Sie danach auf Next. Im nächsten Dialog werden Sie gefragt, ob Sie ein Template zum Erstellen Ihres Projektes nutzen wollen. Wählen Sie das Template Command Line App und klicken Sie auf Next.

Im nächsten Dialog geben Sie alle Angaben ein, wie es auf dem folgenden Screenshot zu sehen ist, und klicken auf Finish.

Danach öffnet IntelliJ, nach der Rückfrage, ob das Verzeichnis angelegt werden darf, das erstellte Projekt. Öffnen Sie in der Menüleiste noch die Projektansicht über View -> Tool Windows -> Project. Die Ansicht müsste nun ähnlich dem folgenden Screenshot aussehen.

Screenshot Projektansicht

Das Projekt für IntelliJ ist eingerichtet.

Erstellung der benötigten Proxy-Klassen mit wsimport

Der anzusprechende Webservice arbeitet mit dem SOAP-Protokoll. Um diesen zu nutzen, benötigen wir die passenden Proxy-Klassen (client stubs). Diese werden in diesem Schritt generiert.

Öffnen Sie den Projektordner in IntelliJ und klicken Sie per Rechtsklick auf den src-Ordner (1).

In der geöffneten Auswahl wählen Sie Copy Path. Nun öffnen Sie die Eingabeaufforderung, geben cd ein und fügen den Pfad aus der Zwischenablage ein. Drücken Sie die Eingabetaste und Sie sind im Source-Ordner Ihres Projektes. Dort fügen Sie den folgenden Befehl ein und führen ihn aus (2). Sollte eine Fehlermeldung angezeigt werden, ist Ihr JDK vermutlich nicht in den Umgebungsvariablen eingetragen.

Bemerkung:

Wenn Sie webPDF nicht auf dem vorgegebenen Port (8080) installiert haben, müssen Sie dies in dieser und in zukünftigen genutzten URLs beachten und anpassen.

wsimport -Xnocompile -s . http://localhost:8080/webPDF/soap/converter?wsdl -extension

Danach können Sie direkt im Package de.webpdf.schema._1_0 die erstellten Proxy-Klassen sehen (3).

Screenshot Proxy Klassen

Die benötigten Proxy-Klassen wurden erstellt.

Umsetzung der Webservice-Anfrage

Der gesamte Beispielcode wird in die bereits erstellte main-Methode der Main-Klasse eingefügt.

Bemerkung:

Wenn Sie den nachfolgenden Code eingeben, werden unbekannte Klassen in roter Schrift gekennzeichnet. Um diese Klassen mit entsprechenden Import-Anweisungen aufzulösen, stellen Sie den Cursor auf die Klasse und drücken Strg+Leertaste (wenn mehrere Imports möglich sind) bzw. Alt+Enter (wenn nur ein Import möglich ist).

URL converterUrl;
try {
// URL initialisieren
} catch (MalformedURLException ex) {
// Fehlerbehandlung
}

Hier wird ein URL-Objekt initialisiert. Da der Konstruktor eine Exception werfen kann, findet die Initialisierung in einem Try-Catch-Block statt, der beim Auftreten einer MalformedURLException diese fängt und eine Nachricht ausgibt. Außerdem würde in diesem Fall das Programm gleich mit return beendet, da die weitere Ausführung ohne URL-Objekt sinnlos wäre.

// Behälter für alle Parameter (Webservice-spezifische und allgemeine)
Operation converterOperation = new Operation();

// Behälter für Webservice-spezifische Parameter
converterOperation.setConverter(new ConverterType());

ConverterService converterService = new ConverterService(converterUrl);
Converter converter = converterService.getConverterPort();

Als erstes wird ein Operation-Element initialisiert, welches der Container für alle webPDF-Parameter ist. Danach wird ein ConverterType-Element erzeugt und zur Operation hinzugefügt. Dies ist die minimale Angabe, die zum Nutzen des Converter-Webservices benötigt wird. Mit der URL wird ein Objekt vom Typ ConverterService initialisiert. Dies beinhaltet alle Ports bzw. Endpoints des Converter-Webservices. Danach wird der Endpoint in Form eines Converter-Objektes initialisiert, indem er vom Service abgefragt wird.

// Zu konvertierende Datei
File inputFile = new File("src/de/webpdf/schema/_1_0/soap/converter/Converter.java");

// Ausführung des Converter-Webservices mit einem DataHandler
DataHandler inputHandler = new DataHandler(new FileDataSource(inputFile));
DataHandler resultHandler = null;

try {
// Webservice-Aufruf und Ergebnisverarbeitung
} catch (WebserviceException | IOException ex) {
// Fehlerbehandlung
}

Hier werden zwei DataHandler-Objekte initialisiert. Eines übernimmt ein File-Objekt, das auf die zu konvertierende Datei verweist, und das andere bekommt im Try-Catch-Block das Ergebnis der Konvertierung zugewiesen. Die Konvertierung wird ausgeführt, indem beim Endpoint (Variable converter vom Typ Converter) die Methode execute aufgerufen wird. Dabei werden als Parameter das Operation-Objekt converterOperation und der DataHandler inputHandler übergeben. Beim dritten möglichen Parameter kann alternativ zum DataHandler eine URL übergeben werden, die auf die zu konvertierende Datei verweist.

// Optionale Ausführung des Converter-Webservices mit einer URL
resultHandler = null;
try {
// Webservice-Aufruf mit URL
} catch (WebserviceException | IOException ex) {
// Fehlerbehandlung
}

Dieser Code ist optional und tut dasselbe wie der zuvor beschriebene Code, mit dem Unterschied, dass eine URL anstatt eines DataHandlers für die zu konvertierende Datei genutzt wird.

Screenshot Ergebnis

Führen Sie das Programm nun aus.

Sie haben eine Java-Datei über einen webPDF-Webservice zu einer PDF-Datei konvertiert.

Herzlichen Glückwunsch!

Anhang

Benötigte Importe für die Klasse:

import de.webpdf.schema._1_0.operation.ConverterType;
import de.webpdf.schema._1_0.operation.Operation;
import de.webpdf.schema._1_0.soap.converter.Converter;
import de.webpdf.schema._1_0.soap.converter.ConverterService;
import de.webpdf.schema._1_0.soap.converter.WebserviceException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

Hier geht es zu Teil 2 und Teil 3 unserer Technik-Reihe Webservices.