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

Minimum technical requirements

  • Java version: 7
  • webPDF version: 6

In diesem Beispiel geht es darum, anhand eines einfachen Beispiels zu zeigen, wie man die Webservices von webPDF 6 (Anleitung zu webPDF 7.0 finden Sie hier..) nutzen kann. In diesem Beispiel wird der Webservice „Converter“ benutzt, eine ausgewählte Datei in ein PDF-Dokument zu konvertieren.  Zur Ansteuerung des Webservice wird die Programmiersprache Java genutzt. Um dises Beispiel auf Ihrem PC nachzuvollziehen benötigen Sie ein lokal installiertes webPDF, ein JDK mit der 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 Starten 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).

1.01.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‚.

1.01

Im nächsten Dialog geben Sie alle Angaben ein wie es auf dem folgendem Screenshot zu sehen sind und klicken auf ‚Finish‚.

1.02

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.

1.03

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 Sie in diesem Schritt generieren.

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

In der geöffneten Auswahl wählen Sie ‚Run cmd shell‚. In der nun geöffneten Eingabeaufforderung(2) geben Sie den folgenden  Befehl  ein und führen ihn aus(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/Converter?WSDL

Danach können Sie direkt im Package „net.webpdf.converter“ die erstellten Proxy Klassen sehen(3).

2.00.2

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. Beginnen Sie nun mit dem Anlegen des Methoden-Inhalts.

Bemerkung:

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

URL url = null;
        try {
            url = new URL("https://localhost:8080/webPDF/Converter?WSDL");
        } catch (MalformedURLException ex) {
            System.err.println(ex.getMessage());
            return;
        }

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 das URL-Objekt sinnlos wäre.

QName qname = new QName("http://converter.webpdf.net/", "ConverterService");
      ConverterService service = new ConverterService(url, qname);
      Converter endpoint = service.getConverterPort();

Danach wird ein QName Objekt initialisiert. Dies wird benötigt um die xml-Namespaces im WSDL korrekt aufzulösen. Mit der URL und dem QName wird ein Objekt vom Typ ConverterService initialisiert. Dies beinhaltet alle Ports, oder aktueller Endpoints, des Converter-Webservices. Danach wird der Endpoint in Form eines Converter-Objektes initialisiert, indem es vom Service abgefragt wird. Endpoints stellen die finale Kommunikationsschnittstelle dar.

DataHandler fileContent = new DataHandler(new FileDataSource(new   File("./src/net/webpdf/converter/Converter.java")));
DataHandler result = null;
  try {
  result = endpoint.convertDocument(new ConverterOptions(),        fileContent);
      } catch (ConverterException_Exception ex) {
           System.out.println("Exception while converting");
           System.err.println(ex.getMessage());
           return;
      }

Hier werden 2 DataHandler-Objekte initialisiert, eines übernimmt ein File Objekt das auf die Datei ‚C:\ConverterExample\src\net\webpdf\converter\Converter.java‘  verweist , die konvertiert werden soll und der andere bekommt in dem Try-Catch-Block das Ergebnis der Konvertierung zugewiesen. Die Konvertierung wird ausgeführt, indem beim Endpoint (die Variable ‚endpoint‘ vom Typ Converter) die Methode ‚convertDocument‘ aufgerufen wird. Dabei wird als Parameter ein unbearbeitetes Objekt vom Typ ConverterOptions mitgegeben. Damit hätten dem Converter Optionen mitgegeben werden können. Dazu kommen wir allerdings in zukünftigen Beispielen.

try {
            result.writeTo(new FileOutputStream(new File("./ConverterResult.pdf")));
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }

Als letztes wird die  im Datahandler-Objekt enthaltene Datei durch ein FileOutputStream-Objekt in Ihr Projektverzeichnis geschrieben.

Nach der Ausführung des Programmes müsste im Projektordner die gewünschte PDF-Datei liegen.

3.03

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 net.webpdf.converter.Converter;
import net.webpdf.converter.ConverterException_Exception;
import net.webpdf.converter.ConverterOptions;
import net.webpdf.converter.ConverterService;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

Unter folgenden Links können Sie das Beispiel-Projekt für Ihre bevorzugte IDE (IntelliJ, Eclipse, NetBeans) downloaden:

Unsere Technik-Reihe Webservices zu webPDF 7.0 finden Sie hier..