Show Menu
THEMEN×

AEM Forms mit Web Services aufrufen

Die meisten AEM Forms-Dienste im Dienst-Container sind so konfiguriert, dass ein Webdienst verfügbar ist. Die WSDL-Generierung wird vollständig unterstützt. Das heißt, Sie können Proxy-Objekte erstellen, die den nativen SOAP-Stapel eines AEM Forms-Dienstes verwenden. Daher können AEM Forms-Dienste die folgenden SOAP-Nachrichten austauschen und verarbeiten:
  • SOAP-Anforderung : Wird von einer Clientanwendung, die eine Aktion anfordert, an einen Forms-Dienst gesendet.
  • SOAP-Antwort : Wird von einem Forms-Dienst an eine Clientanwendung gesendet, nachdem eine SOAP-Anforderung verarbeitet wurde.
Mit Webdiensten können Sie dieselben AEM Forms-Dienste-Vorgänge ausführen, die Sie auch mit der Java-API ausführen können. Ein Vorteil der Verwendung von Webdiensten zum Aufrufen von AEM Forms-Diensten besteht darin, dass Sie eine Clientanwendung in einer Entwicklungs-Umgebung erstellen können, die SOAP unterstützt. Eine Clientanwendung ist nicht an eine bestimmte Entwicklungs- oder Programmiersprache gebunden. Beispielsweise können Sie eine Clientanwendung mit Microsoft Visual Studio .NET und C# als Programmiersprache erstellen.
AEM Forms-Dienste werden über das SOAP-Protokoll bereitgestellt und sind WSI Basic Profil 1.1-kompatibel. Web Services Interoperability (WSI) ist eine offene Organisation, die die Interoperabilität von Webdiensten plattformübergreifend fördert. Weitere Informationen finden Sie unter https://www.ws-i.org/ .
AEM Forms unterstützt die folgenden Webdienststandards:
Um AEM Forms-Dienste mit einem Webdienst aufzurufen, erstellen Sie in der Regel eine Proxybibliothek, die den Dienst WSDL nutzt. Der Abschnitt Aufrufen von AEM Forms mithilfe von Web-Services verwendet JAX-WS, um Java-Proxyklassen zum Aufrufen von Diensten zu erstellen. (Siehe Java-Proxyklassen mit JAX-WS erstellen.)
Sie können einen Dienst-WDSL abrufen, indem Sie die folgende URL-Definition angeben (Elemente in Klammern sind optional):
 https://<your_serverhost>:<your_port>/soap/services/<service_name>?wsdl[&version=<version>][&async=true|false][lc_version=<lc_version>]

hierbei gilt:
  • your_serverhost stellt die IP-Adresse des J2EE-Anwendungsservers dar, auf dem AEM Forms gehostet wird.
  • your_port stellt den HTTP-Anschluss dar, den der J2EE-Anwendungsserver verwendet.
  • service_name steht für den Dienstnamen.
  • version stellt die Dienstversion der Zielgruppe dar (standardmäßig wird die neueste Dienstversion verwendet).
  • async gibt den Wert true an, mit dem zusätzliche Vorgänge für den asynchronen Aufruf aktiviert werden ( false standardmäßig).
  • lc_version stellt die Version von AEM Forms dar, die Sie aufrufen möchten.
Die folgende Tabelle enthält WSDL-Definitionen für Listen (vorausgesetzt, dass AEM Forms auf dem lokalen Host bereitgestellt wird und der Beitrag 8080 ist).
Service
WSDL-Definition
Assembler
http://localhost:8080/soap/services/ AssemblerService?wsdl
Zurück und Wiederherstellen
http://localhost:8080/soap/services/BackupService?wsdl
Barcoded Forms
http://localhost:8080/soap/services/ BarcodedFormsService?wsdl
Convert PDF
http://localhost:8080/soap/services/ ConvertPDFService?wsdl
Distiller
http://localhost:8080/soap/services/ DistillerService?wsdl
DocConverter
http://localhost:8080/soap/services/DocConverterService?WSDL
DocumentManagement
http://localhost:8080/soap/services/DocumentManagementService?WSDL
Encryption-Dienst
http://localhost:8080/soap/services/EncryptionService?wsdl
Forms
http://localhost:8080/soap/services/FormsService?wsdl
Form Data Integration
http://localhost:8080/soap/services/FormDataIntegration?wsdl
Generate PDF
http://localhost:8080/soap/services/ GeneratePDFService?wsdl
3D-PDF generieren
http://localhost:8080/soap/services/Generate3dPDFService?WSDL
Ausgabe
http://localhost:8080/soap/services/ OutputService?wsdl
PDF Utilities
http://localhost:8080/soap/services/ PDFUtilityService?wsdl
Acrobat Reader DC Extensions
http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl
Repository
http://localhost:8080/soap/services/ RepositoryService?wsdl
Rights Management
http://localhost:8080/soap/services/ RightsManagementService?wsdl
Signatur
http://localhost:8080/soap/services/ SignatureService?wsdl
XMP Utilities
http://localhost:8080/soap/services/ XMPUtilityService?wsdl
AEM Forms Process WSDL-Definitionen
Sie müssen den Anwendungsnamen und den Prozessnamen in der WSDL-Definition angeben, um auf eine WSDL zuzugreifen, die zu einem in Workbench erstellten Prozess gehört. Angenommen, der Name der Anwendung ist MyApplication und der Name des Prozesses EncryptDocument . Geben Sie in diesem Fall die folgende WSDL-Definition an:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl

Weitere Informationen zum Beispielprozess mit MyApplication/EncryptDocument kurzer Lebensdauer finden Sie im Beispiel zum Prozess mit kurzer Lebensdauer.
Eine Anwendung kann Ordner enthalten. Geben Sie in diesem Fall die Ordnernamen in der WSDL-Definition an:
 http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl

Zugriff auf neue Funktionen mithilfe von Webdiensten
Auf neue Funktionen des AEM Forms-Dienstes kann über Webdienste zugegriffen werden. Beispielsweise wird in AEM Forms die Möglichkeit eingeführt, Anlagen mit MTOM zu kodieren. (Siehe Aufrufen von AEM Forms mithilfe von MTOM .)
Um auf neue Funktionen zuzugreifen, die in AEM Forms eingeführt wurden, geben Sie das lc_version Attribut in der WSDL-Definition an. Um beispielsweise auf neue Dienstfunktionen (einschließlich MTOM-Unterstützung) zuzugreifen, geben Sie die folgende WSDL-Definition an:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl&lc_version=9.0.1

Stellen Sie beim Festlegen des lc_version Attributs sicher, dass Sie drei Ziffern verwenden. Beispielsweise ist 9.0.1 gleich Version 9.0.
Webdienst-BLOB-Datentyp
AEM Forms-Dienst-WSDLs definieren viele Datentypen. Einer der wichtigsten Datentypen, die in einem Webdienst bereitgestellt werden, ist ein BLOB Typ. Dieser Datentyp wird der com.adobe.idp.Document Klasse beim Arbeiten mit AEM Forms Java APIs zugeordnet. (See Passing data to AEM Forms services using the Java API .)
Ein BLOB Objekt sendet und ruft Binärdaten (z. B. PDF-Dateien, XML-Daten usw.) an AEM Forms-Dienste ab. Der BLOB Typ wird in einer Dienst-WSDL wie folgt definiert:
 <complexType name="BLOB">
     <sequence>
         <element maxOccurs="1" minOccurs="0" name="contentType"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="binaryData"
             type="xsd:base64Binary"/>
         <element maxOccurs="1" minOccurs="0" name="attachmentID"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="remoteURL"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="MTOM"
             type="xsd:base64Binary"
             xmime:expectedContentTypes="*/*"
             xmlns:xmime="https://www.w3.org/2005/05/xmlmime"/>
         <element maxOccurs="1" minOccurs="0" name="swaRef"
             type="tns1:swaRef"/>
         <element maxOccurs="1" minOccurs="0" name="attributes"
             type="impl:MyMapOf_xsd_string_To_xsd_anyType"/>
     </sequence>
 </complexType>

Die Felder MTOM und swaRef Felder werden nur in AEM Forms unterstützt. Sie können diese neuen Felder nur verwenden, wenn Sie eine URL angeben, die die lc_version Eigenschaft enthält.
Bereitstellen von BLOB-Objekten in Dienstanforderungen
Wenn ein AEM Forms-Dienstvorgang einen BLOB Typ als Eingabewert erfordert, erstellen Sie eine Instanz des BLOB Typs in Ihrer Anwendungslogik. (Viele der schnellen Beginn des Webdiensts, die sich unter Programmieren mit AEM Forms befinden, zeigen, wie mit einem BLOB-Datentyp gearbeitet wird.)
Weisen Sie den Feldern, die zur BLOB Instanz gehören, wie folgt Werte zu:
  • Base64 : Um Daten als in einem Base64-Format kodierten Text zu übergeben, stellen Sie die Daten im BLOB.binaryData Feld ein und legen Sie den Datentyp im MIME-Format (z. B. application/pdf ) im BLOB.contentType Feld fest. (Siehe Aufrufen von AEM Forms mithilfe der Base64-Kodierung .)
  • MTOM : Um Binärdaten in einer MTOM-Anlage zu übergeben, legen Sie die Daten im BLOB.MTOM Feld fest. Diese Einstellung hängt die Daten mit dem Java JAX-WS-Framework oder der nativen API des SOAP-Frameworks an die SOAP-Anforderung an. (Siehe Aufrufen von AEM Forms mithilfe von MTOM .)
  • SwaRef : Um Binärdaten in einer WS-I SwaRef-Anlage zu übergeben, stellen Sie die Daten in das BLOB.swaRef Feld ein. Diese Einstellung hängt die Daten mit dem Java JAX-WS-Framework an die SOAP-Anforderung an. (Siehe Aufrufen von AEM Forms mithilfe von SwaRef .)
  • MIME- oder DIME-Anlage : Um Daten in einer MIME- oder DIME-Anlage zu übermitteln, hängen Sie die Daten mithilfe der nativen API des SOAP-Frameworks an die SOAP-Anforderung an. Legen Sie die Anlagenkennung im BLOB.attachmentID Feld fest. (Siehe Aufrufen von AEM Forms mithilfe der Base64-Kodierung .)
  • Remote-URL : Wenn Daten auf einem Webserver gehostet werden und über eine HTTP-URL zugänglich sind, stellen Sie die HTTP-URL in das BLOB.remoteURL Feld ein. (Siehe Aufrufen von AEM Forms mithilfe von BLOB-Daten über HTTP .)
Zugriff auf Daten in BLOB-Objekten, die von Diensten zurückgegeben werden
Das Übertragungsprotokoll für zurückgegebene BLOB Objekte hängt von mehreren Faktoren ab, die in der folgenden Reihenfolge berücksichtigt werden, und endet, wenn die Hauptbedingung erfüllt ist:
  1. Zielgruppe URL gibt das Übertragungsprotokoll an. Wenn die beim SOAP-Aufruf angegebene Zielgruppen-URL den Parameter blob=" *BLOB_TYPE enthält, bestimmt BLOB_TYPE das Übertragungsprotokoll. BLOB_TYPE *ist ein Platzhalter für base64, dime, mime, http, mtom oder sWaref.
  2. Service SOAP-Endpunkt ist Smart . Wenn die folgenden Bedingungen erfüllt sind, werden die Output-Dokumente mit demselben Übertragungsprotokoll wie die Input-Dokumente zurückgegeben:
    • Der SOAP-Endpunkt-Parameter des Dienstes "Standardprotokoll für Output Blob-Objekte"ist auf "Smart"eingestellt.
      Für jeden Dienst mit einem SOAP-Endpunkt können Sie mit Administration Console das Übertragungsprotokoll für alle zurückgegebenen Blobs angeben. (Siehe Administration-Hilfe .)
    • Der AEM Forms-Dienst nimmt mindestens ein Dokumente als Eingabe in Anspruch.
  3. Service SOAP-Endpunkt ist nicht Smart . Das konfigurierte Protokoll bestimmt das Dokument-Übertragungsprotokoll und die Daten werden im entsprechenden BLOB Feld zurückgegeben. Wenn beispielsweise der SOAP-Endpunkt auf DIME gesetzt ist, befindet sich der zurückgegebene Block unabhängig vom Übertragungsprotokoll eines Eingabemodells im blob.attachmentID Feld.
  4. Andernfalls . Wenn ein Dienst den Dokument-Typ nicht als Eingabe nimmt, werden die Output-Dokumente über das HTTP-Protokoll im BLOB.remoteURL Feld zurückgegeben.
Wie in der ersten Bedingung beschrieben, können Sie den Übertragungstyp für alle zurückgegebenen Dokumente sicherstellen, indem Sie die SOAP-Endpunkt-URL wie folgt mit einem Suffix erweitern:
     https://<your_serverhost>:<your_port>/soap/services/<service
     name>?blob=base64|dime|mime|http|mtom|swaref

Die Korrelation zwischen den Übertragungsarten und dem Feld, aus dem Sie die Daten abrufen:
  • Base64-Format : Stellen Sie das blob Suffix so ein, base64 dass die Daten im BLOB.binaryData Feld zurückgegeben werden.
  • MIME- oder DIME-Anlage : Stellen Sie das blob Suffix so ein, dass die Daten als ein entsprechender Anlagentyp mit der im Feld zurückgegebenen Anlagenkennung zurückgegeben werden DIME oder MIME dass sie zurückgegeben werden BLOB.attachmentID . Verwenden Sie die proprietäre API des SOAP-Frameworks, um die Daten aus der Anlage zu lesen.
  • Remote-URL : Stellen Sie das blob Suffix so ein, http dass die Daten auf dem Anwendungsserver bleiben und die URL zurückgegeben wird, die auf die Daten im BLOB.remoteURL Feld verweist.
  • MTOM oder SwaRef : Stellen Sie das blob Suffix so ein, dass die Daten als ein entsprechender Anlagentyp mit der in den mtom oder swaref BLOB.MTOM BLOB.swaRef Feldern zurückgegebenen Anlagenkennung zurückgegeben werden. Verwenden Sie die native API des SOAP-Frameworks, um die Daten aus der Anlage zu lesen.
Es wird empfohlen, beim Ausfüllen eines BLOB Objekts durch Aufrufen seiner setBinaryData Methode nicht mehr als 30 MB zu verwenden. Andernfalls besteht die Möglichkeit, dass eine OutOfMemory Ausnahme eintritt.
JAX WS-basierte Anwendungen, die das MTOM-Übertragungsprotokoll verwenden, sind auf 25 MB der gesendeten und empfangenen Daten beschränkt. Diese Einschränkung ist auf einen Fehler in JAX-WS zurückzuführen. Wenn die Gesamtgröße Ihrer gesendeten und empfangenen Dateien 25 MB überschreitet, verwenden Sie das SwaRef-Übertragungsprotokoll anstelle des MTOM-Protokolls. Andernfalls besteht die Möglichkeit einer OutOfMemory Ausnahme.
MTOM-Übertragung von Base64-kodierten Byte-Arrays
Zusätzlich zum BLOB Objekt unterstützt das MTOM-Protokoll alle Byte-Array-Parameter oder Byte-Array-Felder eines komplexen Typs. Das bedeutet, dass Client-SOAP-Frameworks, die MTOM unterstützen, jedes xsd:base64Binary Element als MTOM-Anhang senden können (anstelle eines Base64-kodierten Textes). AEM Forms SOAP-Endpunkte können diesen Typ der Byte-Array-Kodierung lesen. Der AEM Forms-Dienst gibt jedoch immer einen Byte-Array-Typ als Base64-kodierten Text zurück. Die Ausgabebyte-Array-Parameter unterstützen kein MTOM.
AEM Forms-Dienste, die eine große Menge binärer Daten zurückgeben, verwenden den Dokument-/BLOB-Typ und nicht den Byte-Array-Typ. Der Dokument-Typ ist bei der Übertragung großer Datenmengen sehr viel effizienter.

Webdienst-Datentypen

Die folgende Tabelle Liste Java-Datentypen und zeigt den entsprechenden Webdienst-Datentyp.
Java-Datentyp
Webdienst-Datentyp
java.lang.byte[]
xsd:base64Binary
java.lang.Boolean
xsd:boolean
java.util.Date
Der DATE Typ, der in einer Dienst-WSDL wie folgt definiert wird:
<complexType name="DATE">
<sequence>
<element maxOccurs="1" minOccurs="0" name="date" type="xsd:dateTime" />
<element maxOccurs="1" minOccurs="0" name="calendar" type="xsd:dateTime" />
</sequence>
</complexType>
Wenn ein AEM Forms-Dienstvorgang einen java.util.Date Wert als Eingabe akzeptiert, muss die SOAP-Clientanwendung das Datum im DATE.date Feld übergeben. Das Festlegen des DATE.calendar Felds in diesem Fall verursacht eine Laufzeitausnahme. Wenn der Dienst ein Datum zurückgibt java.util.Date , wird das Datum im DATE.date Feld zurückgegeben.
java.util.Calendar
Der DATE Typ, der in einer Dienst-WSDL wie folgt definiert wird:
<complexType name="DATE">
<sequence>
<element maxOccurs="1" minOccurs="0" name="date" type="xsd:dateTime" />
<element maxOccurs="1" minOccurs="0" name="calendar" type="xsd:dateTime" />
</sequence>
</complexType>
Wenn ein AEM Forms-Dienstvorgang einen java.util.Calendar Wert als Eingabe akzeptiert, muss die SOAP-Clientanwendung das Datum im DATE.caledendar Feld übergeben. Das Festlegen des DATE.date Felds führt in diesem Fall zu einer Laufzeitausnahme. Wenn der Dienst ein Datum zurückgibt java.util.Calendar , wird das Datum im DATE.calendar Feld zurückgegeben.
java.math.BigDecimal
xsd:decimal
com.adobe.idp.Document
BLOB
java.lang.Double
xsd:double
java.lang.Float
xsd:float
java.lang.Integer
xsd:int
java.util.List
MyArrayOf_xsd_anyType
java.lang.Long
xsd:long
java.util.Map
Die apachesoap:Map , die in einer Dienst-WSDL wie folgt definiert wird:
<schema elementFormDefault="qualified" targetNamespace="https://xml.apache.org/xml-soap" xmlns="https://www.w3.org/2001/XMLSchema">
<complexType name="mapItem">
<sequence>
<element name="key" nillable="true" type="xsd:anyType"/>
<element name="value" nillable="true" type="xsd:anyType"/>
</sequence>
</complexType>
<complexType name="Map">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem"/>
</sequence>
</complexType>
</schema>
Die Zuordnung wird als Sequenz von Schlüssel/Wert-Paaren dargestellt.
java.lang.Object
$1
java.lang.Short
xsd:short
java.lang.String
xsd:string
org.w3c.dom.Document
Der XML-Typ, der in einer Dienst-WSDL wie folgt definiert wird:
<complexType name="XML">
<sequence>
<element maxOccurs="1" minOccurs="0" name="document" type="xsd:string" />
<element maxOccurs="1" minOccurs="0" name="element" type="xsd:string" />
</sequence>
</complexType>
Wenn ein AEM Forms-Dienstvorgang einen org.w3c.dom.Document Wert akzeptiert, übergeben Sie die XML-Daten im XML.document Feld.
Das Festlegen des XML.element Felds verursacht eine Laufzeitausnahme. Wenn der Dienst eine org.w3c.dom.Document zurückgibt, werden die XML-Daten im XML.document Feld zurückgegeben.
org.w3c.dom.Element
Der XML-Typ, der in einer Dienst-WSDL wie folgt definiert wird:
<complexType name="XML">
<sequence>
<element maxOccurs="1" minOccurs="0" name="document" type="xsd:string" />
<element maxOccurs="1" minOccurs="0" name="element" type="xsd:string" />
</sequence>
</complexType>
Wenn ein AEM Forms-Dienstvorgang org.w3c.dom.Element als Eingabe ausgeführt wird, übergeben Sie die XML-Daten im XML.element Feld.
Das Festlegen des XML.document Felds verursacht eine Laufzeitausnahme. Wenn der Dienst eine org.w3c.dom.Element zurückgibt, werden die XML-Daten im XML.element Feld zurückgegeben.
Website für Adobe-Entwickler
Die Adobe Developer-Website enthält den folgenden Artikel, in dem das Aufrufen von AEM Forms-Diensten mithilfe der Webdienst-API behandelt wird:
Beim Aufrufen von Webdiensten mit benutzerdefinierten Komponenten wird beschrieben, wie Sie eine AEM Forms-Komponente erstellen, die Webdienste von Drittanbietern aufruft.

Java-Proxyklassen mit JAX-WS erstellen

Sie können JAX-WS verwenden, um eine Forms-Dienst-WSDL in Java-Proxyklassen zu konvertieren. Mit diesen Klassen können Sie AEM Forms-Dienstvorgänge aufrufen. Mit Apache Ant können Sie ein Buildskript erstellen, das Java-Proxyklassen generiert, indem Sie auf eine AEM Forms-Dienst-WSDL verweisen. Führen Sie die folgenden Schritte aus, um JAX-WS-Proxydateien zu generieren:
  1. Installieren Sie Apache Ant auf dem Clientcomputer. (Siehe https://ant.apache.org/bindownload.cgi .)
    • Hinzufügen Sie den Ordner "bin"in Ihren Klassenpfad.
    • Legen Sie die Variable " ANT_HOME Umgebung"auf den Ordner fest, in dem Sie Ant installiert haben.
  2. Installieren Sie JDK 1.6 oder höher.
    • Hinzufügen Sie den JDK-Ordner "bin"in Ihren Klassenpfad.
    • Hinzufügen Sie den JRE-Ordner "bin"in Ihren Klassenpfad. Diese Ablage befindet sich im [JDK_INSTALL_LOCATION]/jre Ordner.
    • Legen Sie die Variable " JAVA_HOME Umgebung"auf den Ordner fest, in dem Sie das JDK installiert haben.
    JDK 1.6 enthält das in der Datei "build.xml"verwendete wsimport-Programm. JDK 1.5 enthält dieses Programm nicht.
  3. Installieren Sie JAX-WS auf dem Clientcomputer. (Siehe Java-API für XML-Webdienste .)
  4. Verwenden Sie JAX-WS und Apache Ant, um Java-Proxyklassen zu generieren. Erstellen Sie ein Ant-Build-Skript, um diese Aufgabe durchzuführen. Das folgende Skript ist ein Beispiel für ein Ant-Build-Skript mit dem Namen build.xml:
     <?xml version="1.0" encoding="UTF-8"?>
     
     <project basedir="." default="compile">
     
     <property name="port" value="8080" />
     <property name="host" value="localhost" />
     <property name="username" value="administrator" />
     <property name="password" value="password" />
     <property name="tests" value="all" />
     
     <target name="clean" >
            <delete dir="classes" />
     </target>
     
     <target name="wsdl" depends="clean">
            <mkdir dir="classes"/>
            <exec executable="wsimport" failifexecutionfails="false" failonerror="true" resultproperty="foundWSIMPORT">
                <arg line="-keep -d classes https://${host}:${port}/soap/services/EncryptionService?wsdl&lc_version=9.0.1"/>
            </exec>
            <fail unless="foundWSIMPORT">
               !!! Failed to execute JDK's wsimport tool. Make sure that JDK 1.6 (or later) is on your PATH !!!
            </fail>
     </target>
     
     <target name="compile" depends="clean, wsdl" >
          <javac destdir="./classes" fork="true" debug="true">
             <src path="./src"/>
          </javac>
     </target>
     
     <target name="run">
          <java classname="Client" fork="yes" failonerror="true" maxmemory="200M">
             <classpath>
               <pathelement location="./classes"/>
             </classpath>
             <arg value="${port}"/>
             <arg value="${host}"/>
             <arg value="${username}"/>
             <arg value="${password}"/>
             <arg value="${tests}"/>
          </java>
     </target>
     </project>
    
    
    Beachten Sie, dass die url Eigenschaft in diesem Ant-Build-Skript so eingestellt ist, dass sie auf die WSDL des Encryption-Dienstes verweist, die auf localhost ausgeführt wird. Die username Eigenschaften und password Eigenschaften müssen auf einen gültigen AEM Forms-Benutzernamen und -Kennwort festgelegt werden. Beachten Sie, dass die URL das lc_version Attribut enthält. Ohne Angabe der lc_version Option können Sie keine neuen AEM Forms-Dienstvorgänge aufrufen.
    Ersetzen Sie dies EncryptionService durch den AEM Forms-Dienstnamen, den Sie mithilfe von Java-Proxyklassen aufrufen möchten. Um beispielsweise Java-Proxyklassen für den Rights Management-Dienst zu erstellen, geben Sie Folgendes an:
     http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
    
    
  5. Erstellen Sie eine BAT-Datei, um das Ant-Build-Skript auszuführen. Der folgende Befehl kann sich in einer BAT-Datei befinden, die für die Ausführung des Ant-Build-Skripts zuständig ist:
     ant -buildfile "build.xml" wsdl
    
    
    Platzieren Sie das ANT-Buildskript im Ordner C:\Program Files\Java\jaxws-ri\bin directory. Das Skript schreibt die JAVA-Dateien in .Ordner "/classes". Das Skript generiert JAVA-Dateien, die den Dienst aufrufen können.
  6. Verpacken Sie die JAVA-Dateien in einer JAR-Datei. Wenn Sie an Eclipse arbeiten, führen Sie die folgenden Schritte aus:
    • Erstellen Sie ein neues Java-Projekt, das zum Verpacken der JAVA-Proxydateien in einer JAR-Datei verwendet wird.
    • Erstellen Sie einen Quellordner im Projekt.
    • Erstellen Sie ein com.adobe.idp.services Paket im Ordner "Quelle".
    • Wählen Sie das com.adobe.idp.services Paket aus und importieren Sie dann die JAVA-Dateien aus dem Ordner "adobe/idp/services"in das Paket.
    • Erstellen Sie bei Bedarf ein org/apache/xml/xmlsoap Paket im Ordner "Quelle".
    • Wählen Sie den Quellordner aus und importieren Sie dann die JAVA-Dateien aus dem Ordner "org/apache/xml/xmlsoap".
    • Stellen Sie die Kompatibilitätsstufe des Java-Compilers auf 5.0 oder höher ein.
    • Erstellen Sie das Projekt.
    • Exportieren Sie das Projekt als JAR-Datei.
    • Importieren Sie diese JAR-Datei in den Klassenpfad eines Clientprojekts. Importieren Sie außerdem alle JAR-Dateien im Ordner <Installationsordner>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty.
    Alle Java-Webdienst-Schnelldateien (mit Ausnahme des Forms-Dienstes), die sich unter Programmieren mit AEM Forms befinden, erstellen Java-Proxydateien mit JAX-WS. Darüber hinaus verwenden alle Java-Webdienst-Schnellbenutzer SwaRef. (Siehe Aufrufen von AEM Forms mithilfe von SwaRef .)
Siehe auch

Java-Proxyklassen mit Apache Axis erstellen

Mit dem Apache Axis WSDL2Java-Tool können Sie einen Forms-Dienst in Java-Proxyklassen konvertieren. Mit diesen Klassen können Sie Formulardienstvorgänge aufrufen. Mit Apache Ant können Sie Axis-Bibliotheksdateien aus einem Dienst-WSDL generieren. Sie können die Apache Axis unter der URL https://ws.apache.org/axis/ herunterladen.
Die mit dem Forms-Dienst verknüpften Webdienst-Schnellzugriffsklassen verwenden Java-Proxyklassen, die mit Apache Axis erstellt wurden. Die Beginn des Forms-Webdiensts verwenden auch Base64 als Kodierungstyp. (Siehe Beginn zur Forms-Dienst-API .)
Sie können die Java-Bibliotheksdateien von Axis wie folgt generieren:
  1. Installieren Sie Apache Ant auf dem Clientcomputer. Sie ist unter https://ant.apache.org/bindownload.cgi verfügbar.
    • Hinzufügen Sie den Ordner "bin"in Ihren Klassenpfad.
    • Legen Sie die Variable " ANT_HOME Umgebung"auf den Ordner fest, in dem Sie Ant installiert haben.
  2. Installieren Sie Apache Axis 1.4 auf dem Clientcomputer. Sie ist unter https://ws.apache.org/axis/ verfügbar.
  3. Richten Sie den Klassenpfad ein, um die Axis JAR-Dateien in Ihrem Webdienstclient zu verwenden, wie in den Anweisungen zur Axis-Installation unter https://ws.apache.org/axis/java/install.html beschrieben.
  4. Verwenden Sie das Apache WSDL2Java-Tool in Axis, um Java-Proxyklassen zu generieren. Erstellen Sie ein Ant-Build-Skript, um diese Aufgabe durchzuführen. Das folgende Skript ist ein Beispiel für ein Ant-Build-Skript mit dem Namen build.xml:
     <?xml version="1.0"?>
     <project name="axis-wsdl2java">
     
     <path id="axis.classpath">
     <fileset dir="C:\axis-1_4\lib" >
         <include name="**/*.jar" />
     </fileset>
     </path>
     
     <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
     
     <target name="encryption-wsdl2java-client" description="task">
     <axis-wsdl2java
         output="C:\JavaFiles"
         testcase="false"
         serverside="false"
         verbose="true"
         username="administrator"
         password="password"
         url="http://localhost:8080/soap/services/EncryptionService?wsdl&lc_version=9.0.1" >
     </axis-wsdl2java>
     </target>
     
     </project>
    
    
    Beachten Sie, dass die url Eigenschaft in diesem Ant-Build-Skript so eingestellt ist, dass sie auf die WSDL des Encryption-Dienstes verweist, die auf localhost ausgeführt wird. Die username Eigenschaften und password Eigenschaften müssen auf einen gültigen AEM Forms-Benutzernamen und -Kennwort festgelegt werden.
  5. Erstellen Sie eine BAT-Datei, um das Ant-Build-Skript auszuführen. Der folgende Befehl kann sich in einer BAT-Datei befinden, die für die Ausführung des Ant-Build-Skripts zuständig ist:
     ant -buildfile "build.xml" encryption-wsdl2java-client
    
    
    Die JAVA-Dateien werden in die Eigenschaft C:\JavaFiles folder as specified by the output geschrieben. Um den Forms-Dienst erfolgreich aufzurufen, importieren Sie diese JAVA-Dateien in Ihren Klassenpfad.
    Standardmäßig gehören diese Dateien zu einem Java-Paket mit dem Namen com.adobe.idp.services . Es wird empfohlen, diese JAVA-Dateien in einer JAR-Datei zu speichern. Importieren Sie dann die JAR-Datei in den Klassenpfad der Clientanwendung.
    Es gibt verschiedene Möglichkeiten, .JAVA-Dateien in eine JAR-Datei zu setzen. Eine Möglichkeit ist die Verwendung einer Java IDE wie Eclipse. Erstellen Sie ein Java-Projekt und erstellen Sie ein com.adobe.idp.services Paket (alle JAVA-Dateien gehören zu diesem Paket). Importieren Sie als Nächstes alle JAVA-Dateien in das Paket. Exportieren Sie das Projekt schließlich als JAR-Datei.
  6. Ändern Sie die URL in der EncryptionServiceLocator Klasse, um den Kodierungstyp anzugeben. Um beispielsweise base64 zu verwenden, müssen Sie ?blob=base64 sicherstellen, dass das BLOB Objekt Binärdaten zurückgibt. Suchen Sie also in der EncryptionServiceLocator Klasse die folgende Codezeile:
     http://localhost:8080/soap/services/EncryptionService;
    
    
    und ändern Sie sie in:
     http://localhost:8080/soap/services/EncryptionService?blob=base64;
    
    
  7. Hinzufügen Sie die folgenden Axis-JAR-Dateien in den Klassenpfad Ihres Java-Projekts:
    • activation.jar
    • achse.jar
    • commons-codec-1.3.jar
    • commons-collections-3.1.jar
    • commons-discovery.jar
    • commons-logging.jar
    • dom3-xml-apis-2.5.0.jar
    • jai_imageio.jar
    • jaxen-1.1-beta-9.jar
    • jaxrpc.jar
    • log4j.jar
    • mail.jar
    • saaj.jar
    • wsdl4j.jar
    • xalan.jar
    • xbean.jar
    • xercesImpl.jar
    Diese JAR-Dateien befinden sich im [install directory]/Adobe/Adobe Experience Manager Forms/sdk/lib/thirdparty Ordner.
Siehe auch

Aufrufen von AEM Forms mithilfe der Base64-Kodierung

Sie können einen AEM Forms-Dienst mit der Base64-Kodierung aufrufen. Base64-Kodierung kodiert Anlagen, die mit einer Webdienst-Aufrufanforderung gesendet werden. Das heißt, die BLOB Daten sind Base64-kodiert, nicht die gesamte SOAP-Nachricht.
"Aufrufen von AEM Forms mithilfe der Base64-Kodierung"beschreibt das Aufrufen des folgenden AEM Forms-Prozesses mit kurzer Lebensdauer, der MyApplication/EncryptDocument mit der Base64-Kodierung benannt wurde.
Dieser Prozess basiert nicht auf einem vorhandenen AEM Forms-Prozess. Um dem Codebeispiel zu folgen, erstellen Sie einen Prozess mit dem Namen MyApplication/EncryptDocument in Workbench. (Siehe Verwenden von Workbench .)
Wenn dieser Prozess aufgerufen wird, führt er die folgenden Aktionen aus:
  1. Ruft das ungesicherte PDF-Dokument ab, das an den Prozess übergeben wird. Diese Aktion basiert auf dem Vorgang SetValue . Der Eingangsparameter für diesen Prozess ist eine document -Prozessvariable mit dem Namen inDoc .
  2. Sie verschlüsselt das PDF-Dokument mit einem Kennwort. Diese Aktion basiert auf dem Vorgang PasswordEncryptPDF . Das kennwortverschlüsselte PDF-Dokument wird in einer Prozessvariablen namens outDoc zurückgegeben.

Erstellen einer .NET-Client-Assembly, die Base64-Kodierung verwendet

Sie können eine .NET-Clientassembly erstellen, um einen Forms-Dienst aus einem Microsoft Visual Studio .NET-Projekt aufzurufen. So erstellen Sie eine .NET-Client-Assembly, die die Base64-Kodierung verwendet:
  1. Erstellen Sie eine Proxyklasse basierend auf einer AEM Forms-Aufrufungs-URL.
  2. Erstellen Sie ein Microsoft Visual Studio .NET-Projekt, das die .NET-Clientassembly generiert.
Erstellen einer Proxyklasse
Sie können eine Proxyklasse erstellen, die zum Erstellen der .NET-Clientassembly verwendet wird, indem Sie ein Tool verwenden, das Microsoft Visual Studio begleitet. Der Name des Tools ist wsdl.exe und befindet sich im Installationsordner von Microsoft Visual Studio. Um eine Proxyklasse zu erstellen, öffnen Sie die Eingabeaufforderung und navigieren Sie zu dem Ordner, der die Datei "wsdl.exe"enthält. Weitere Informationen zum Tool wsdl.exe finden Sie in der MSDN-Hilfe .
Geben Sie an der Eingabeaufforderung den folgenden Befehl ein:
 wsdl https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Standardmäßig erstellt dieses Tool eine CS-Datei im selben Ordner, der auf dem Namen der WSDL basiert. In diesem Fall wird eine CS-Datei mit dem Namen EncryptDocumentService.cs erstellt. Mit dieser CS-Datei erstellen Sie ein Proxy-Objekt, mit dem Sie den Dienst aufrufen können, der in der Aufruf-URL angegeben wurde.
Ändern Sie die URL in der Proxyklasse, um sicherzustellen, dass das ?blob=base64 BLOB Objekt Binärdaten zurückgibt. Suchen Sie in der Proxyklasse die folgende Codezeile:
 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument";

und ändern Sie sie in:
 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";

Im Abschnitt Aufrufen von AEM Forms mit der Base64-Kodierung wird MyApplication/EncryptDocument als Beispiel verwendet. Wenn Sie eine .NET-Client-Assembly für einen anderen Forms-Dienst erstellen, stellen Sie sicher, dass Sie MyApplication/EncryptDocument durch den Namen des Dienstes ersetzen.
Entwickeln der .NET-Clientassembly
Erstellen Sie ein Visual Studio-Klassenbibliotheksprojekt, das eine .NET-Client-Assembly erzeugt. Die mit wsdl.exe erstellte CS-Datei kann in dieses Projekt importiert werden. Dieses Projekt erzeugt eine DLL-Datei (die .NET-Clientassembly), die Sie in anderen Visual Studio .NET-Projekten zum Aufrufen eines Dienstes verwenden können.
  1. Beginn Microsoft Visual Studio .NET.
  2. Erstellen Sie ein Klassenbibliotheksprojekt und nennen Sie es DocumentService.
  3. Importieren Sie die CS-Datei, die Sie mit wsdl.exe erstellt haben.
  4. Wählen Sie im Menü Projekt die Option Hinzufügen Referenz .
  5. Wählen Sie im Dialogfeld Hinzufügen Referenz die Option System.Web.Services.dll .
  6. Click Select and then click OK .
  7. Kompilieren und erstellen Sie das Projekt.
Mit diesem Verfahren wird eine .NET-Clientassembly mit dem Namen DocumentService.dll erstellt, die Sie zum Senden von SOAP-Anforderungen an den MyApplication/EncryptDocument Dienst verwenden können.
Stellen Sie sicher, dass Sie der URL in der Proxyklasse, die zum Erstellen der .NET-Clientassembly verwendet wird, ?blob=base64 hinzugefügt haben. Andernfalls können Sie keine Binärdaten vom BLOB Objekt abrufen.
Verweis auf die .NET-Clientassembly
Platzieren Sie die neu erstellte .NET-Clientassembly auf dem Computer, auf dem Sie die Clientanwendung entwickeln. Nachdem Sie die .NET-Clientassembly in einem Verzeichnis abgelegt haben, können Sie von einem Projekt aus darauf verweisen. Verweisen Sie auch auf die System.Web.Services Bibliothek aus Ihrem Projekt. Wenn Sie diese Bibliothek nicht referenzieren, können Sie die .NET-Client-Assembly nicht zum Aufrufen eines Dienstes verwenden.
  1. Wählen Sie im Menü Projekt die Option Hinzufügen Referenz .
  2. Click the .NET tab.
  3. Klicken Sie auf Durchsuchen und suchen Sie die Datei "DocumentService.dll".
  4. Click Select and then click OK .
Aufrufen eines Dienstes mit einer .NET-Client-Assembly, die die Base64-Kodierung verwendet
Sie können den MyApplication/EncryptDocument Dienst (der in Workbench erstellt wurde) mit einer .NET-Client-Assembly aufrufen, die die Base64-Kodierung verwendet. So rufen Sie den MyApplication/EncryptDocument Dienst auf:
  1. Erstellen Sie eine Microsoft .NET-Client-Assembly, die die MyApplication/EncryptDocument Dienst-WSDL verwendet.
  2. Erstellen Sie ein Microsoft .NET-Clientprojekt. Verweisen Sie auf die Microsoft .NET-Clientassembly im Clientprojekt. Siehe auch System.Web.Services .
  3. Erstellen Sie mithilfe der Microsoft .NET-Clientassembly ein MyApplication_EncryptDocumentService Objekt, indem Sie dessen Standardkonstruktor aufrufen.
  4. Legen Sie die MyApplication_EncryptDocumentService Eigenschaft des Credentials Objekts mit einem System.Net.NetworkCredential Objekt fest. Geben Sie im System.Net.NetworkCredential Konstruktor einen AEM Forms-Benutzernamen und das zugehörige Kennwort an. Legen Sie Authentifizierungswerte fest, damit Ihre .NET-Clientanwendung SOAP-Nachrichten erfolgreich mit AEM Forms austauschen kann.
  5. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden. Das BLOB Objekt dient zum Speichern eines PDF-Dokuments, das an den MyApplication/EncryptDocument Prozess übergeben wird.
  6. Create a System.IO.FileStream object by invoking its constructor. Übergeben Sie einen Zeichenfolgenwert, der den Dateispeicherort des PDF-Dokuments und den Dateimodus darstellt, in dem die Datei geöffnet werden soll.
  7. Erstellen Sie ein Bytearray, das den Inhalt des System.IO.FileStream Objekts speichert. Sie können die Größe des Byte-Arrays bestimmen, indem Sie die System.IO.FileStream Objekteigenschaft Length abrufen.
  8. Füllen Sie das Bytearray mit Stream-Daten, indem Sie die System.IO.FileStream Objektmethode Read aufrufen. Übergeben Sie das Bytearray, die Startposition und die zu lesende Stream-Länge.
  9. Füllen Sie das BLOB Objekt, indem Sie seine binaryData Eigenschaft mit dem Inhalt des Byte-Arrays zuweisen.
  10. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die MyApplication_EncryptDocumentService invoke BLOB Objektmethode aufrufen und das Objekt übergeben, das das PDF-Dokument enthält. Dieser Vorgang gibt ein verschlüsseltes PDF-Dokument innerhalb eines BLOB Objekts zurück.
  11. Erstellen Sie ein System.IO.FileStream Objekt, indem Sie den Konstruktor aufrufen und einen Zeichenfolgenwert übergeben, der den Dateispeicherort des kennwortverschlüsselten Dokuments darstellt.
  12. Erstellen Sie ein Bytearray, das den Dateninhalt des BLOB Objekts speichert, das von der MyApplicationEncryptDocumentService Objektmethode zurückgegeben wird invoke . Füllen Sie das Byte-Array, indem Sie den Wert des BLOB Datenelements des binaryData Objekts abrufen.
  13. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.
  14. Schreiben Sie den Inhalt des Byte-Arrays in eine PDF-Datei, indem Sie die System.IO.BinaryWriter Objektmethode aufrufen und das Bytearray Write übergeben.

Aufrufen eines Dienstes mit Java-Proxyklassen und Base64-Kodierung

Sie können einen AEM Forms-Dienst mit Java-Proxyklassen und Base64 aufrufen. So rufen Sie den MyApplication/EncryptDocument Dienst mit Java-Proxyklassen auf:
  1. Erstellen Sie Java-Proxyklassen mit JAX-WS, die den MyApplication/EncryptDocument Dienst WSDL verwenden. Verwenden Sie den folgenden WSDL-Endpunkt:
    https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    Ersetzen Sie hiro-xp durch die IP-Adresse des J2EE-Anwendungsservers, auf dem AEM Forms gehostet wird.
  2. Verpacken Sie die mit JAX-WS erstellten Java-Proxyklassen in einer JAR-Datei.
  3. Schließen Sie die Java-Proxy-JAR-Datei und die JAR-Dateien im folgenden Pfad ein:
    <Installationsordner>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    in den Klassenpfad Ihres Java-Client-Projekts.
  4. Erstellen Sie ein Objekt MyApplicationEncryptDocumentService , indem Sie den Konstruktor verwenden.
  5. Erstellen Sie ein MyApplicationEncryptDocument Objekt, indem Sie die MyApplicationEncryptDocumentService Objektmethode getEncryptDocument aufrufen.
  6. Legen Sie die zum Aufrufen von AEM Forms erforderlichen Verbindungswerte fest, indem Sie den folgenden Datenmitgliedern Werte zuweisen:
    • Weisen Sie den WSDL-Endpunkt und den Kodierungstyp dem javax.xml.ws.BindingProvider Objektfeld zu ENDPOINT_ADDRESS_PROPERTY . Um den MyApplication/EncryptDocument Dienst mit der Base64-Kodierung aufzurufen, geben Sie den folgenden URL-Wert an:
      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64
    • Weisen Sie den AEM Forms-Benutzer dem javax.xml.ws.BindingProvider Objektfeld USERNAME_PROPERTY zu.
    • Weisen Sie dem javax.xml.ws.BindingProvider Objektfeld den entsprechenden Kennwortwert zu PASSWORD_PROPERTY .
    Das folgende Codebeispiel zeigt diese Anwendungslogik:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Rufen Sie das PDF-Dokument ab, das an den MyApplication/EncryptDocument Prozess gesendet werden soll, indem Sie ein java.io.FileInputStream Objekt mit dessen Konstruktor erstellen. Übergeben Sie einen Zeichenfolgenwert, der den Speicherort des PDF-Dokuments angibt.
  8. Erstellen Sie ein Byte-Array und füllen Sie es mit dem Inhalt des java.io.FileInputStream Objekts.
  9. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden.
  10. Füllen Sie das BLOB Objekt, indem Sie seine setBinaryData Methode aufrufen und das Bytearray übergeben. Die BLOB Methode des Objekts setBinaryData ist die Methode, die bei Verwendung der Base64-Kodierung aufgerufen wird. Siehe Bereitstellen von BLOB-Objekten in Dienstanforderungen.
  11. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die MyApplicationEncryptDocument Objektmethode invoke aufrufen. Übergeben Sie das BLOB Objekt, das das PDF-Dokument enthält. Die invoke-Methode gibt ein BLOB Objekt zurück, das das verschlüsselte PDF-Dokument enthält.
  12. Erstellen Sie ein Bytearray, das das verschlüsselte PDF-Dokument enthält, indem Sie die BLOB Objektmethode getBinaryData aufrufen.
  13. Speichern Sie das verschlüsselte PDF-Dokument als PDF-Datei. Schreiben Sie das Byte-Array in eine Datei.
Siehe auch

Aufrufen von AEM Forms mithilfe von MTOM

Sie können AEM Forms-Dienste mithilfe des Webdienststandards MTOM aufrufen. Dieser Standard definiert, wie binäre Daten, wie z. B. ein PDF-Dokument, über das Internet oder Intranet übertragen werden. Eine Funktion von MTOM ist die Verwendung des XOP:Include Elements. Dieses Element ist in der XML Binary Optimized Packaging (XOP)-Spezifikation definiert, um auf die binären Anlagen einer SOAP-Nachricht zu verweisen.
The discussion here is about using MTOM to invoke the following AEM Forms short-lived process named MyApplication/EncryptDocument .
Dieser Prozess basiert nicht auf einem vorhandenen AEM Forms-Prozess. Um dem Codebeispiel zu folgen, erstellen Sie einen Prozess mit dem Namen MyApplication/EncryptDocument in Workbench. (Siehe Verwenden von Workbench .)
Wenn dieser Prozess aufgerufen wird, führt er die folgenden Aktionen aus:
  1. Ruft das ungesicherte PDF-Dokument ab, das an den Prozess übergeben wird. Diese Aktion basiert auf dem Vorgang SetValue . Der Eingangsparameter für diesen Prozess ist eine document -Prozessvariable mit dem Namen inDoc .
  2. Sie verschlüsselt das PDF-Dokument mit einem Kennwort. Diese Aktion basiert auf dem Vorgang PasswordEncryptPDF . Das kennwortverschlüsselte PDF-Dokument wird in einer Prozessvariablen namens outDoc zurückgegeben.
MTOM-Unterstützung wurde in AEM Forms, Version 9, hinzugefügt.
JAX WS-basierte Anwendungen, die das MTOM-Übertragungsprotokoll verwenden, sind auf 25 MB der gesendeten und empfangenen Daten beschränkt. Diese Einschränkung ist auf einen Fehler in JAX-WS zurückzuführen. Wenn die Gesamtgröße Ihrer gesendeten und empfangenen Dateien 25 MB überschreitet, verwenden Sie das SwaRef-Übertragungsprotokoll anstelle des MTOM-Protokolls. Andernfalls besteht die Möglichkeit einer OutOfMemory Ausnahme.
Die Diskussion hier handelt von der Verwendung von MTOM in einem Microsoft .NET-Projekt, um AEM Forms-Dienste aufzurufen. Das verwendete .NET-Framework ist 3.5 und die Development-Umgebung ist Visual Studio 2008. Wenn auf Ihrem Entwicklungscomputer Webdienstverbesserungen (WSE) installiert sind, entfernen Sie diese. Das .NET 3.5-Framework unterstützt ein SOAP-Framework namens Windows Communication Foundation (WCF). Beim Aufrufen von AEM Forms mithilfe von MTOM wird nur WCF (nicht WSE) unterstützt.

Erstellen eines .NET-Projekts, das einen Dienst mit MTOM aufruft

Sie können ein Microsoft .NET-Projekt erstellen, das einen AEM Forms-Dienst mithilfe von Webdiensten aufrufen kann. Erstellen Sie zunächst ein Microsoft .NET-Projekt mit Visual Studio 2008. Um einen AEM Forms-Dienst aufzurufen, erstellen Sie einen Dienstverweis auf den AEM Forms-Dienst, den Sie in Ihrem Projekt aufrufen möchten. Wenn Sie eine Dienstreferenz erstellen, geben Sie eine URL zum AEM Forms-Dienst an:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Ersetzen Sie localhost dies durch die IP-Adresse des J2EE-Anwendungsservers, auf dem AEM Forms gehostet wird. Ersetzen Sie dies MyApplication/EncryptDocument durch den Namen des aufzurufenden AEM Forms-Dienstes. Um beispielsweise einen Rights Management-Vorgang aufzurufen, geben Sie Folgendes an:
http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
Die lc_version Option stellt sicher, dass AEM Forms-Funktionen wie MTOM verfügbar sind. Ohne Angabe der lc_version Option können Sie AEM Forms nicht mit MTOM aufrufen.
Nachdem Sie eine Dienstreferenz erstellt haben, stehen mit dem AEM Forms-Dienst verknüpfte Datentypen zur Verwendung in Ihrem .NET-Projekt zur Verfügung. So erstellen Sie ein .NET-Projekt, das einen AEM Forms-Dienst aufruft:
  1. Erstellen Sie ein .NET-Projekt mit Microsoft Visual Studio 2008.
  2. Wählen Sie im Menü Projekt die Option Hinzufügen Dienstreferenz .
  3. Geben Sie im Dialogfeld " Adresse "die WSDL für den AEM Forms-Dienst an. Beispiel:
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
  4. Click Go and then click OK .

Aufrufen eines Dienstes mit MTOM in einem .NET-Projekt

Berücksichtigen Sie den MyApplication/EncryptDocument Vorgang, bei dem ein unbesichertes PDF-Dokument akzeptiert und ein kennwortverschlüsseltes PDF-Dokument zurückgegeben wird. So rufen Sie den (in Workbench erstellten) MyApplication/EncryptDocument Prozess mithilfe von MTOM auf:
  1. Erstellen Sie ein Microsoft .NET-Projekt.
  2. Create a MyApplication_EncryptDocumentClient object by using its default constructor.
  3. Create a MyApplication_EncryptDocumentClient.Endpoint.Address object by using the System.ServiceModel.EndpointAddress constructor. Übergeben Sie einen Zeichenfolgenwert, der die WSDL an den AEM Forms-Dienst und den Kodierungstyp angibt:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
    
    
    Sie müssen das lc_version Attribut nicht verwenden. Dieses Attribut wird verwendet, wenn Sie eine Dienstreferenz erstellen. Achten Sie jedoch darauf, dies anzugeben ?blob=mtom .
    Ersetzen Sie hiro-xp durch die IP-Adresse des J2EE-Anwendungsservers, auf dem AEM Forms gehostet wird.
  4. Erstellen Sie ein System.ServiceModel.BasicHttpBinding Objekt, indem Sie den Wert des EncryptDocumentClient.Endpoint.Binding Datenelements abrufen. Wandeln Sie den Rückgabewert in BasicHttpBinding um.
  5. Stellen Sie den System.ServiceModel.BasicHttpBinding Datenmember des MessageEncoding Objekts auf WSMessageEncoding.Mtom . Dieser Wert stellt sicher, dass MTOM verwendet wird.
  6. Aktivieren Sie die einfache HTTP-Authentifizierung, indem Sie die folgenden Aufgaben ausführen:
    • Weisen Sie dem Datenmember den AEM Forms-Benutzernamen zu MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName .
    • Weisen Sie dem Datenmember den entsprechenden Kennwortwert zu MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password .
    • Weisen Sie den Konstantenwert HttpClientCredentialType.Basic dem Datenmember zu BasicHttpBindingSecurity.Transport.ClientCredentialType .
    • Weisen Sie den Konstantenwert BasicHttpSecurityMode.TransportCredentialOnly dem Datenmember zu BasicHttpBindingSecurity.Security.Mode .
    Das folgende Codebeispiel zeigt diese Aufgaben.
     //Enable BASIC HTTP authentication
     encryptProcess.ClientCredentials.UserName.UserName = "administrator";
     encryptProcess.ClientCredentials.UserName.Password = "password";
     b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
     b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
     b.MaxReceivedMessageSize = 4000000;
     b.MaxBufferSize = 4000000;
     b.ReaderQuotas.MaxArrayLength = 4000000;
    
    
  7. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden. Das BLOB Objekt wird zum Speichern eines PDF-Dokuments verwendet, das an den MyApplication/EncryptDocument Prozess übergeben wird.
  8. Create a System.IO.FileStream object by invoking its constructor. Übergeben Sie einen Zeichenfolgenwert, der den Dateispeicherort des PDF-Dokuments und den Dateimodus darstellt, in dem die Datei geöffnet werden soll.
  9. Erstellen Sie ein Bytearray, das den Inhalt des System.IO.FileStream Objekts speichert. Sie können die Größe des Byte-Arrays bestimmen, indem Sie die System.IO.FileStream Objekteigenschaft Length abrufen.
  10. Füllen Sie das Bytearray mit Stream-Daten, indem Sie die System.IO.FileStream Objektmethode Read aufrufen. Übergeben Sie das Bytearray, die Startposition und die zu lesende Stream-Länge.
  11. Füllen Sie das BLOB Objekt, indem Sie seinem MTOM Datenmember den Inhalt des Byte-Arrays zuweisen.
  12. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die MyApplication_EncryptDocumentClient Objektmethode invoke aufrufen. Übergeben Sie das BLOB Objekt, das das PDF-Dokument enthält. Dieser Vorgang gibt ein verschlüsseltes PDF-Dokument innerhalb eines BLOB Objekts zurück.
  13. Erstellen Sie ein System.IO.FileStream Objekt, indem Sie den Konstruktor aufrufen und einen Zeichenfolgenwert übergeben, der den Dateispeicherort des geschützten PDF-Dokuments darstellt.
  14. Erstellen Sie ein Bytearray, das den Dateninhalt des BLOB Objekts speichert, das von der invoke Methode zurückgegeben wurde. Füllen Sie das Byte-Array, indem Sie den Wert des BLOB Datenelements des MTOM Objekts abrufen.
  15. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.
  16. Schreiben Sie den Inhalt des Byte-Arrays in eine PDF-Datei, indem Sie die System.IO.BinaryWriter Objektmethode aufrufen und das Bytearray Write übergeben.
Die meisten AEM Forms-Dienstvorgänge verfügen über einen MTOM-Quick-Beginn. Sie können diese schnellen Beginn im entsprechenden Abschnitt für den schnellen Beginn eines Dienstes Ansicht haben. Informationen zum schnellen Beginn der Ausgabe finden Sie unter Schnelleinstellungen für die API der Output-Dienst-API .
Siehe auch

Aufrufen von AEM Forms mithilfe von SwaRef

Sie können AEM Forms-Dienste mit SwaRef aufrufen. Der Inhalt des wsi:swaRef XML-Elements wird als Anhang innerhalb eines SOAP-Textkörpers gesendet, in dem der Verweis auf die Anlage gespeichert wird. Beim Aufrufen eines Forms-Dienstes mit SwaRef erstellen Sie Java-Proxyklassen mithilfe der Java-API für XML-Webdienste (JAX-WS). (Siehe Java-API für XML-Webdienste .)
Die Diskussion hier handelt davon, den folgenden Prozess mit kurzer Lebensdauer für Forms aufzurufen, der MyApplication/EncryptDocument mithilfe von SwaRef benannt wurde.
Dieser Prozess basiert nicht auf einem vorhandenen AEM Forms-Prozess. Um dem Codebeispiel zu folgen, erstellen Sie einen Prozess mit dem Namen MyApplication/EncryptDocument in Workbench. (Siehe Verwenden von Workbench .)
Wenn dieser Prozess aufgerufen wird, führt er die folgenden Aktionen aus:
  1. Ruft das ungesicherte PDF-Dokument ab, das an den Prozess übergeben wird. Diese Aktion basiert auf dem Vorgang SetValue . Der Eingangsparameter für diesen Prozess ist eine document -Prozessvariable mit dem Namen inDoc .
  2. Sie verschlüsselt das PDF-Dokument mit einem Kennwort. Diese Aktion basiert auf dem Vorgang PasswordEncryptPDF . Das kennwortverschlüsselte PDF-Dokument wird in einer Prozessvariablen namens outDoc zurückgegeben.
SwaRef-Unterstützung in AEM Forms hinzugefügt
In der folgenden Diskussion wird beschrieben, wie Sie Forms-Dienste mithilfe von SwaRef in einer Java-Clientanwendung aufrufen. Die Java-Anwendung verwendet Proxyklassen, die mit JAX-WS erstellt wurden.

Aufrufen eines Dienstes mithilfe von JAX-WS-Bibliotheksdateien, die SwaRef verwenden

So rufen Sie den MyApplication/EncryptDocument Prozess mithilfe von Java-Proxydateien auf, die mit JAX-WS und SwaRef erstellt wurden:
  1. Erstellen Sie Java-Proxyklassen mit JAX-WS, die den MyApplication/EncryptDocument Dienst WSDL verwenden. Verwenden Sie den folgenden WSDL-Endpunkt:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
    Weitere Informationen finden Sie unter Java-Proxyklassen mit JAX-WS erstellen .
    Ersetzen Sie hiro-xp durch die IP-Adresse des J2EE-Anwendungsservers, auf dem AEM Forms gehostet wird.
  2. Verpacken Sie die mit JAX-WS erstellten Java-Proxyklassen in einer JAR-Datei.
  3. Schließen Sie die Java-Proxy-JAR-Datei und die JAR-Dateien im folgenden Pfad ein:
    <Installationsordner>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    in den Klassenpfad Ihres Java-Client-Projekts.
  4. Erstellen Sie ein Objekt MyApplicationEncryptDocumentService , indem Sie den Konstruktor verwenden.
  5. Erstellen Sie ein MyApplicationEncryptDocument Objekt, indem Sie die MyApplicationEncryptDocumentService Objektmethode getEncryptDocument aufrufen.
  6. Legen Sie die zum Aufrufen von AEM Forms erforderlichen Verbindungswerte fest, indem Sie den folgenden Datenmitgliedern Werte zuweisen:
    • Weisen Sie den WSDL-Endpunkt und den Kodierungstyp dem javax.xml.ws.BindingProvider Objektfeld zu ENDPOINT_ADDRESS_PROPERTY . Um den MyApplication/EncryptDocument Dienst mit der SwaRef-Kodierung aufzurufen, geben Sie den folgenden URL-Wert an:
       https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref
    • Weisen Sie den AEM Forms-Benutzer dem javax.xml.ws.BindingProvider Objektfeld USERNAME_PROPERTY zu.
    • Weisen Sie dem javax.xml.ws.BindingProvider Objektfeld den entsprechenden Kennwortwert zu PASSWORD_PROPERTY .
    Das folgende Codebeispiel zeigt diese Anwendungslogik:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Rufen Sie das PDF-Dokument ab, das an den MyApplication/EncryptDocument Prozess gesendet werden soll, indem Sie ein java.io.File Objekt mit dessen Konstruktor erstellen. Übergeben Sie einen Zeichenfolgenwert, der den Speicherort des PDF-Dokuments angibt.
  8. Create a javax.activation.DataSource object by using the FileDataSource constructor. Pass the java.io.File object.
  9. Erstellen Sie ein javax.activation.DataHandler -Objekt, indem Sie seinen Konstruktor verwenden und das javax.activation.DataSource -Objekt übergeben.
  10. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden.
  11. Füllen Sie das BLOB Objekt, indem Sie seine setSwaRef Methode aufrufen und das javax.activation.DataHandler Objekt übergeben.
  12. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die MyApplicationEncryptDocument invoke BLOB Objektmethode aufrufen und das Objekt übergeben, das das PDF-Dokument enthält. Die invoke-Methode gibt ein BLOB Objekt zurück, das ein verschlüsseltes PDF-Dokument enthält.
  13. Füllen Sie ein javax.activation.DataHandler Objekt, indem Sie die BLOB Objektmethode getSwaRef aufrufen.
  14. Konvertieren Sie das javax.activation.DataHandler Objekt in eine java.io.InputSteam Instanz, indem Sie die javax.activation.DataHandler Objektmethode aufrufen getInputStream .
  15. Schreiben Sie die java.io.InputSteam Instanz in eine PDF-Datei, die das verschlüsselte PDF-Dokument darstellt.
Die meisten AEM Forms-Dienstvorgänge verfügen über einen SwaRef-Beginn. Sie können diese schnellen Beginn im entsprechenden Abschnitt für den schnellen Beginn eines Dienstes Ansicht haben. Informationen zum schnellen Beginn der Ausgabe finden Sie unter Schnelleinstellungen für die API der Output-Dienst-API .
Siehe auch

Aufrufen von AEM Forms mithilfe von BLOB-Daten über HTTP

Sie können AEM Forms-Dienste mithilfe von Webdiensten aufrufen und BLOB-Daten über HTTP weiterleiten. Das Übergeben von BLOB-Daten über HTTP ist eine alternative Methode, anstatt Base64-Kodierung, DIME oder MIME zu verwenden. Sie können beispielsweise Daten über HTTP in einem Microsoft .NET-Projekt übermitteln, das Web Service Enhancement 3.0 verwendet, das DIME oder MIME nicht unterstützt. Bei Verwendung von BLOB-Daten über HTTP werden Eingabedaten hochgeladen, bevor der AEM Forms-Dienst aufgerufen wird.
"Aufrufen von AEM Forms mithilfe von BLOB-Daten über HTTP"beschreibt das Aufrufen des folgenden AEM Forms-Prozesses mit kurzer Lebensdauer, MyApplication/EncryptDocument der durch Übergeben von BLOB-Daten über HTTP benannt wird.
Dieser Prozess basiert nicht auf einem vorhandenen AEM Forms-Prozess. Um dem Codebeispiel zu folgen, erstellen Sie einen Prozess mit dem Namen MyApplication/EncryptDocument in Workbench. (Siehe Verwenden von Workbench .)
Wenn dieser Prozess aufgerufen wird, führt er die folgenden Aktionen aus:
  1. Ruft das ungesicherte PDF-Dokument ab, das an den Prozess übergeben wird. Diese Aktion basiert auf dem Vorgang SetValue . Der Eingangsparameter für diesen Prozess ist eine document -Prozessvariable mit dem Namen inDoc .
  2. Sie verschlüsselt das PDF-Dokument mit einem Kennwort. Diese Aktion basiert auf dem Vorgang PasswordEncryptPDF . Das kennwortverschlüsselte PDF-Dokument wird in einer Prozessvariablen namens outDoc zurückgegeben.
Es wird empfohlen, dass Sie mit dem Aufrufen von AEM Forms mithilfe von SOAP vertraut sind. (See Invoking AEM Forms using Web Services .)

Erstellen einer .NET-Client-Assembly, die Daten über HTTP verwendet

Um eine Client-Assembly zu erstellen, die Daten über HTTP verwendet, führen Sie den unter AEM Forms mithilfe der Base64-Kodierung aufrufen angegebenen Prozess aus . Ändern Sie jedoch die URL in der Proxyklasse so, dass sie ?blob=http anstelle von ?blob=base64 eingeschlossen wird. Diese Aktion stellt sicher, dass Daten über HTTP weitergegeben werden. Suchen Sie in der Proxyklasse die folgende Codezeile:
 "http://localhost:8080/soap/services/MyApplication/EncryptDocument";

und ändern Sie sie in:
 "http://localhost:8080/soap/services/MyApplication/EncryptDocument?blob=http";

Referenz der .NET clienMyApplication/EncryptDocument-Assembly
Platzieren Sie die neue .NET-Clientassembly auf dem Computer, auf dem Sie die Clientanwendung entwickeln. Nachdem Sie die .NET-Clientassembly in einem Verzeichnis abgelegt haben, können Sie von einem Projekt aus darauf verweisen. Referenzieren Sie die System.Web.Services Bibliothek aus Ihrem Projekt. Wenn Sie diese Bibliothek nicht referenzieren, können Sie die .NET-Client-Assembly nicht zum Aufrufen eines Dienstes verwenden.
  1. Wählen Sie im Menü Projekt die Option Hinzufügen Referenz .
  2. Click the .NET tab.
  3. Klicken Sie auf Durchsuchen und suchen Sie die Datei "DocumentService.dll".
  4. Click Select and then click OK .
Aufrufen eines Dienstes mit einer .NET-Client-Assembly, die BLOB-Daten über HTTP verwendet
Sie können den MyApplication/EncryptDocument Dienst (der in Workbench erstellt wurde) mit einer .NET-Client-Assembly aufrufen, die Daten über HTTP verwendet. So rufen Sie den MyApplication/EncryptDocument Dienst auf:
  1. Erstellen Sie die .NET-Client-Assembly.
  2. Verweisen Sie auf die Microsoft .NET-Clientassembly. Erstellen Sie ein Microsoft .NET-Clientprojekt. Verweisen Sie auf die Microsoft .NET-Clientassembly im Clientprojekt. Siehe auch System.Web.Services .
  3. Erstellen Sie mithilfe der Microsoft .NET-Clientassembly ein MyApplication_EncryptDocumentService Objekt, indem Sie dessen Standardkonstruktor aufrufen.
  4. Legen Sie die MyApplication_EncryptDocumentService Eigenschaft des Credentials Objekts mit einem System.Net.NetworkCredential Objekt fest. Geben Sie im System.Net.NetworkCredential Konstruktor einen AEM Forms-Benutzernamen und das zugehörige Kennwort an. Legen Sie Authentifizierungswerte fest, damit Ihre .NET-Clientanwendung SOAP-Nachrichten erfolgreich mit AEM Forms austauschen kann.
  5. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden. Das BLOB Objekt wird verwendet, um Daten an den MyApplication/EncryptDocument Prozess zu übergeben.
  6. Weisen Sie dem BLOB Datenmember des remoteURL Objekts einen Zeichenfolgenwert zu, der den URI-Speicherort eines PDF-Dokuments angibt, das an den MyApplication/EncryptDocument Dienst übergeben werden soll.
  7. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die MyApplication_EncryptDocumentService Methode des invoke Objekts aufrufen und das BLOB Objekt übergeben. Dieser Vorgang gibt ein verschlüsseltes PDF-Dokument innerhalb eines BLOB Objekts zurück.
  8. Erstellen Sie ein System.UriBuilder Objekt, indem Sie dessen Konstruktor verwenden und den Wert des zurückgegebenen BLOB Objektdatenelements übergeben remoteURL .
  9. Konvertieren Sie das System.UriBuilder Objekt in ein System.IO.Stream Objekt. (Der C# Quick-Beginn, der dieser Liste folgt, zeigt, wie diese Aufgabe ausgeführt wird.)
  10. Erstellen Sie ein Byte-Array und füllen Sie es mit den Daten im System.IO.Stream Objekt aus.
  11. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.
  12. Schreiben Sie den Inhalt des Byte-Arrays in eine PDF-Datei, indem Sie die System.IO.BinaryWriter Objektmethode aufrufen und das Bytearray Write übergeben.

Aufrufen eines Dienstes mithilfe von Java-Proxyklassen und BLOB-Daten über HTTP

Sie können einen AEM Forms-Dienst über Java-Proxyklassen und BLOB-Daten über HTTP aufrufen. So rufen Sie den MyApplication/EncryptDocument Dienst mit Java-Proxyklassen auf:
  1. Erstellen Sie Java-Proxyklassen mit JAX-WS, die den MyApplication/EncryptDocument Dienst WSDL verwenden. Verwenden Sie den folgenden WSDL-Endpunkt:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
    Weitere Informationen finden Sie unter Java-Proxyklassen mit JAX-WS erstellen .
    Ersetzen Sie hiro-xp durch die IP-Adresse des J2EE-Anwendungsservers, auf dem AEM Forms gehostet wird.
  2. Verpacken Sie die mit JAX-WS erstellten Java-Proxyklassen in einer JAR-Datei.
  3. Schließen Sie die Java-Proxy-JAR-Datei und die JAR-Dateien im folgenden Pfad ein:
    <Installationsordner>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    in den Klassenpfad Ihres Java-Client-Projekts.
  4. Erstellen Sie ein Objekt MyApplicationEncryptDocumentService , indem Sie den Konstruktor verwenden.
  5. Erstellen Sie ein MyApplicationEncryptDocument Objekt, indem Sie die MyApplicationEncryptDocumentService Objektmethode getEncryptDocument aufrufen.
  6. Legen Sie die zum Aufrufen von AEM Forms erforderlichen Verbindungswerte fest, indem Sie den folgenden Datenmitgliedern Werte zuweisen:
    • Weisen Sie den WSDL-Endpunkt und den Kodierungstyp dem javax.xml.ws.BindingProvider Objektfeld zu ENDPOINT_ADDRESS_PROPERTY . Geben Sie den folgenden URL-Wert an, um den MyApplication/EncryptDocument Dienst über die HTTP-Kodierung mit BLOB aufzurufen:
      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http
    • Weisen Sie den AEM Forms-Benutzer dem javax.xml.ws.BindingProvider Objektfeld USERNAME_PROPERTY zu.
    • Weisen Sie dem javax.xml.ws.BindingProvider Objektfeld den entsprechenden Kennwortwert zu PASSWORD_PROPERTY .
    Das folgende Codebeispiel zeigt diese Anwendungslogik:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden.
  8. Füllen Sie das BLOB Objekt, indem Sie seine setRemoteURL Methode aufrufen. Übergeben Sie einen Zeichenfolgenwert, der den URI-Speicherort eines PDF-Dokuments angibt, das an den MyApplication/EncryptDocument Dienst übergeben wird.
  9. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die MyApplicationEncryptDocument invoke BLOB Objektmethode aufrufen und das Objekt übergeben, das das PDF-Dokument enthält. Dieser Vorgang gibt ein verschlüsseltes PDF-Dokument innerhalb eines BLOB Objekts zurück.
  10. Erstellen Sie ein Bytearray, um den Datenstrom zu speichern, der das verschlüsselte PDF-Dokument darstellt. Rufen Sie die BLOB Methode des getRemoteURL Objekts auf (verwenden Sie das von der BLOB invoke Methode zurückgegebene Objekt).
  11. Erstellen Sie ein Objekt java.io.File , indem Sie den Konstruktor verwenden. Dieses Objekt stellt das verschlüsselte PDF-Dokument dar.
  12. Erstellen Sie ein java.io.FileOutputStream -Objekt, indem Sie seinen Konstruktor verwenden und das java.io.File -Objekt übergeben.
  13. Rufen Sie die java.io.FileOutputStream Methode des write Objekts auf. Übergeben Sie das Bytearray, das den Datenstrom enthält, der das verschlüsselte PDF-Dokument darstellt.

Aufrufen von AEM Forms mithilfe von DIME

Sie können AEM Forms-Dienste mit SOAP mit Anlagen aufrufen. AEM Forms unterstützt sowohl MIME- als auch DIME-Webdienststandards. Mit DIME können Sie Binäranlagen wie PDF-Dokumente zusammen mit Aufrufanforderungen senden, anstatt die Anlage zu kodieren. Im Abschnitt Aufrufen von AEM Forms mithilfe von DIME wird beschrieben, wie Sie den folgenden AEM Forms-Prozess mit kurzer Lebensdauer aufrufen, der mit DIME benannt MyApplication/EncryptDocument wurde.
Wenn dieser Prozess aufgerufen wird, führt er die folgenden Aktionen aus:
  1. Ruft das ungesicherte PDF-Dokument ab, das an den Prozess übergeben wird. Diese Aktion basiert auf dem Vorgang SetValue . Der Eingangsparameter für diesen Prozess ist eine document -Prozessvariable mit dem Namen inDoc .
  2. Sie verschlüsselt das PDF-Dokument mit einem Kennwort. Diese Aktion basiert auf dem Vorgang PasswordEncryptPDF . Das kennwortverschlüsselte PDF-Dokument wird in einer Prozessvariablen namens outDoc zurückgegeben.
Dieser Prozess basiert nicht auf einem vorhandenen AEM Forms-Prozess. To follow along with the code examples, create a process named MyApplication/EncryptDocument using Workbench. (Siehe Verwenden von Workbench .)
Das Aufrufen von AEM Forms-Dienstvorgängen mit DIME ist veraltet. Es wird empfohlen, MTOM zu verwenden. (Siehe Aufrufen von AEM Forms mithilfe von MTOM .)

Erstellen eines .NET-Projekts, das DIME verwendet

So erstellen Sie ein .NET-Projekt, das einen Forms-Dienst mit DIME aufrufen kann:
  • Installieren Sie Web Services Enhancements 2.0 auf Ihrem Entwicklungscomputer.
  • Erstellen Sie in Ihrem .NET-Projekt einen Webverweis auf den FormsAEM Forms-Dienst.
Web-Services-Verbesserungen installieren 2.0
Installieren Sie Web Services Enhancements 2.0 auf Ihrem Entwicklungscomputer und integrieren Sie es in Microsoft Visual Studio .NET. Sie können Web Services Enhancements 2.0 vom Microsoft Download Center herunterladen.
Suchen Sie auf dieser Webseite nach Web Services Enhancements 2.0 und laden Sie es auf Ihren Entwicklungscomputer herunter. Durch diesen Download wird eine Datei mit dem Namen Microsoft WSE 2.0 SPI.msi auf Ihrem Computer gespeichert. Führen Sie das Programm aus und befolgen Sie die Online-Anweisungen.
Web-Services-Erweiterungen 2.0 unterstützen DIME. Die unterstützte Version von Microsoft Visual Studio ist 2003, wenn mit Web Services Enhancements 2.0 gearbeitet wird. Web Services Enhancements 3.0 unterstützt DIME nicht. jedoch unterstützt es MTOM.
Erstellen von Webverweisen auf einen AEM Forms-Dienst
Nachdem Sie Web Services Enhancements 2.0 auf Ihrem Entwicklungscomputer installiert und ein Microsoft .NET-Projekt erstellt haben, erstellen Sie einen Webverweis auf den Forms-Dienst. Um beispielsweise einen Webverweis auf den MyApplication/EncryptDocument Prozess zu erstellen und anzunehmen, dass Forms auf dem lokalen Computer installiert ist, geben Sie die folgende URL an:
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL

Nachdem Sie einen Webverweis erstellt haben, stehen Ihnen die folgenden zwei Proxydatentypen zur Verfügung, die Sie in Ihrem .NET-Projekt verwenden können: EncryptDocumentService und EncryptDocumentServiceWse . Um den MyApplication/EncryptDocument Prozess mit DIME aufzurufen, verwenden Sie den EncryptDocumentServiceWse Typ.
Bevor Sie einen Webverweis auf den Forms-Dienst erstellen, vergewissern Sie sich, dass Sie in Ihrem Projekt auf Web-Services-Verbesserungen 2.0 verweisen. (Siehe "Installieren von Web-Services-Erweiterungen 2.0".)
Referenzieren der WSE-Bibliothek
  1. Wählen Sie im Menü Projekt die Option Hinzufügen Referenz.
  2. Wählen Sie im Dialogfeld Hinzufügen-Referenz die Option Microsoft.Web.Services2.dll.
  3. Wählen Sie System.Web.Services.dll.
  4. Klicken Sie auf Auswählen und dann auf OK.
Webverweis auf einen Forms-Dienst erstellen
  1. Wählen Sie im Menü Projekt Hinzufügen Webverweis.
  2. Geben Sie im Dialogfeld "URL"die URL für den Forms-Dienst an.
  3. Klicken Sie auf Los und dann auf Hinzufügen Referenz.
Stellen Sie sicher, dass Sie die Verwendung der WSE-Bibliothek für Ihr .NET-Projekt aktivieren. Klicken Sie im Project Explorer mit der rechten Maustaste auf den Projektnamen und wählen Sie WSE 2.0 aktivieren. Stellen Sie sicher, dass das Kontrollkästchen im angezeigten Dialogfeld aktiviert ist.
Aufrufen eines Dienstes mit DIME in einem .NET-Projekt
Sie können einen Forms-Dienst mit DIME aufrufen. Berücksichtigen Sie den MyApplication/EncryptDocument Vorgang, bei dem ein unbesichertes PDF-Dokument akzeptiert und ein kennwortverschlüsseltes PDF-Dokument zurückgegeben wird. So rufen Sie den MyApplication/EncryptDocument Prozess mit DIME auf:
  1. Erstellen Sie ein Microsoft .NET-Projekt, mit dem Sie einen Forms-Dienst mit DIME aufrufen können. Stellen Sie sicher, dass Sie Web-Services-Verbesserungen 2.0 einbeziehen und einen Webverweis auf den AEM Forms-Dienst erstellen.
  2. Nachdem Sie einen Webverweis auf den MyApplication/EncryptDocument Prozess festgelegt haben, erstellen Sie ein EncryptDocumentServiceWse Objekt mit dem Standardkonstruktor.
  3. Legen Sie den EncryptDocumentServiceWse Datenmember des Credentials Objekts mit einem System.Net.NetworkCredential Wert fest, der den AEM Forms-Benutzernamen und -Kennwortwert angibt.
  4. Create a Microsoft.Web.Services2.Dime.DimeAttachment object by using its constructor and passing the following values:
    • Ein Zeichenfolgenwert, der einen GUID-Wert angibt. Sie können einen GUID-Wert abrufen, indem Sie die System.Guid.NewGuid.ToString Methode aufrufen.
    • Ein Zeichenfolgenwert, der den Inhaltstyp angibt. Da für diesen Vorgang ein PDF-Dokument erforderlich ist, geben Sie an application/pdf .
    • Ein Wert für die TypeFormat Auflistung. Geben Sie Folgendes an TypeFormat.MediaType .
    • Ein Zeichenfolgenwert, der den Speicherort des PDF-Dokuments angibt, das an den AEM Forms-Prozess übergeben wird.
  5. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden.
  6. Hinzufügen Sie die DIME-Anlage an das BLOB Objekt, indem Sie den Microsoft.Web.Services2.Dime.DimeAttachment Datenelementwert des Objekts Id dem BLOB - attachmentID Datenmember zuweisen.
  7. Rufen Sie die EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add Methode auf und übergeben Sie das Microsoft.Web.Services2.Dime.DimeAttachment Objekt.
  8. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die EncryptDocumentServiceWse Methode des invoke BLOB Objekts aufrufen und das Objekt übergeben, das die DIME-Anlage enthält. Dieser Vorgang gibt ein verschlüsseltes PDF-Dokument innerhalb eines BLOB Objekts zurück.
  9. Rufen Sie den Wert der Anlagenkennung ab, indem Sie den Wert des zurückgegebenen BLOB Objektdatenelements abrufen attachmentID .
  10. Durchlaufen Sie die Anlagen in EncryptDocumentServiceWse.ResponseSoapContext.Attachments und verwenden Sie den Wert für die Anlagenkennung, um das verschlüsselte PDF-Dokument abzurufen.
  11. Rufen Sie ein System.IO.Stream Objekt ab, indem Sie den Wert des Attachment Objektdatenelements abrufen Stream .
  12. Erstellen Sie ein Bytearray und übergeben Sie dieses Bytearray an die System.IO.Stream Objektmethode Read . Diese Methode füllt das Bytearray mit einem Datenstrom, der das verschlüsselte PDF-Dokument darstellt.
  13. Erstellen Sie ein System.IO.FileStream Objekt, indem Sie den Konstruktor aufrufen und einen Zeichenfolgenwert übergeben, der den Speicherort einer PDF-Datei darstellt. Dieses Objekt stellt das verschlüsselte PDF-Dokument dar.
  14. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.
  15. Schreiben Sie den Inhalt des Byte-Arrays in die PDF-Datei, indem Sie die System.IO.BinaryWriter Objektmethode aufrufen und das Bytearray Write übergeben.

Erstellen von Apache Axis Java-Proxyklassen mit DIME

Mit dem Apache Axis WSDL2Java-Tool können Sie einen Dienst-WSDL in Java-Proxyklassen konvertieren, damit Sie Dienstvorgänge aufrufen können. Mit Apache Ant können Sie Axis-Bibliotheksdateien aus einer AEM Forms-Dienst-WSDL generieren, mit der Sie den Dienst aufrufen können. (Siehe Java-Proxyklassen mit Apache Axis erstellen.)
Das Apache Axis WSDL2Java-Tool generiert JAVA-Dateien, die Methoden enthalten, mit denen SOAP-Anforderungen an einen Dienst gesendet werden. SOAP-Anforderungen, die von einem Dienst empfangen werden, werden von den Axis-generierten Bibliotheken dekodiert und in die Methoden und Argumente zurückumgewandelt.
So rufen Sie den MyApplication/EncryptDocument Dienst (der in Workbench erstellt wurde) mit Axis-generierten Bibliotheksdateien und DIME auf:
  1. Erstellen Sie Java-Proxyklassen, die den MyApplication/EncryptDocument Dienst WSDL mit Apache Axis verwenden. (Siehe Java-Proxyklassen mit Apache Axis erstellen.)
  2. Schließen Sie die Java-Proxyklassen in Ihren Klassenpfad ein.
  3. Erstellen Sie ein Objekt MyApplicationEncryptDocumentServiceLocator , indem Sie den Konstruktor verwenden.
  4. Erstellen Sie ein URL Objekt, indem Sie dessen Konstruktor verwenden und einen Zeichenfolgenwert übergeben, der die WSDL-Definition des AEM Forms-Dienstes angibt. Stellen Sie sicher, dass Sie ?blob=dime am Ende der SOAP-Endpunkt-URL angeben. Beispiele
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
    
    
  5. Erstellen Sie ein EncryptDocumentSoapBindingStub Objekt, indem Sie den Konstruktor aufrufen und das MyApplicationEncryptDocumentServiceLocator Objekt und das URL Objekt übergeben.
  6. Legen Sie den AEM Forms-Benutzernamen und -Kennwortwert fest, indem Sie die EncryptDocumentSoapBindingStub Methoden setUsername setPassword und Methoden des Objekts aufrufen.
     encryptionClientStub.setUsername("administrator");
     encryptionClientStub.setPassword("password");
    
    
  7. Rufen Sie das PDF-Dokument ab, das an den MyApplication/EncryptDocument Dienst gesendet werden soll, indem Sie ein java.io.File Objekt erstellen. Übergeben Sie einen Zeichenfolgenwert, der den Speicherort des PDF-Dokuments angibt.
  8. Create a javax.activation.DataHandler object by using its constructor and passing a javax.activation.FileDataSource object. Das javax.activation.FileDataSource Objekt kann mithilfe des Konstruktors erstellt und an das java.io.File Objekt übergeben werden, das das PDF-Dokument darstellt.
  9. Create an org.apache.axis.attachments.AttachmentPart object by using its constructor and passing the javax.activation.DataHandler object.
  10. Hängen Sie die Anlage an, indem Sie die EncryptDocumentSoapBindingStub Methode des addAttachment Objekts aufrufen und das org.apache.axis.attachments.AttachmentPart Objekt übergeben.
  11. Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden. Füllen Sie das BLOB Objekt mit dem Wert für die Anlagenkennung, indem Sie die BLOB setAttachmentID Objektmethode aufrufen und den Wert für die Anlagenkennung übergeben. Dieser Wert kann durch Aufrufen der org.apache.axis.attachments.AttachmentPart Objektmethode getContentId abgerufen werden.
  12. Rufen Sie den MyApplication/EncryptDocument Prozess auf, indem Sie die EncryptDocumentSoapBindingStub Objektmethode invoke aufrufen. Übergeben Sie das BLOB Objekt, das die DIME-Anlage enthält. Dieser Vorgang gibt ein verschlüsseltes PDF-Dokument innerhalb eines BLOB Objekts zurück.
  13. Rufen Sie den Wert für die Anlagenkennung ab, indem Sie die Methode des zurückgegebenen BLOB Objekts getAttachmentID aufrufen. Diese Methode gibt einen Zeichenfolgenwert zurück, der den Bezeichnerwert der zurückgegebenen Anlage darstellt.
  14. Rufen Sie die Anlagen ab, indem Sie die EncryptDocumentSoapBindingStub Objektmethode getAttachments aufrufen. Diese Methode gibt ein Array mit Objects den Anlagen zurück.
  15. Durchlaufen Sie die Anlagen (das Object Array) und verwenden Sie den Wert für die Anlagenkennung, um das verschlüsselte PDF-Dokument abzurufen. Jedes Element ist ein org.apache.axis.attachments.AttachmentPart Objekt.
  16. Rufen Sie das mit der Anlage verknüpfte javax.activation.DataHandler Objekt ab, indem Sie die org.apache.axis.attachments.AttachmentPart Objektmethode getDataHandler aufrufen.
  17. Rufen Sie ein java.io.FileStream Objekt ab, indem Sie die javax.activation.DataHandler Objektmethode getInputStream aufrufen.
  18. Erstellen Sie ein Bytearray und übergeben Sie dieses Bytearray an die java.io.FileStream Objektmethode read . Diese Methode füllt das Bytearray mit einem Datenstrom, der das verschlüsselte PDF-Dokument darstellt.
  19. Erstellen Sie ein Objekt java.io.File , indem Sie den Konstruktor verwenden. Dieses Objekt stellt das verschlüsselte PDF-Dokument dar.
  20. Erstellen Sie ein java.io.FileOutputStream -Objekt, indem Sie seinen Konstruktor verwenden und das java.io.File -Objekt übergeben.
  21. Rufen Sie die java.io.FileOutputStream write Objektmethode auf und übergeben Sie das Bytearray, das den Datenstrom enthält, der das verschlüsselte PDF-Dokument darstellt.
Siehe auch

SAML-basierte Authentifizierung

AEM Forms unterstützt beim Aufrufen von Diensten verschiedene Webdienst-Authentifizierungsmodi. Ein Authentifizierungsmodus gibt sowohl einen Benutzernamen- als auch einen Kennwortwert mithilfe eines einfachen Autorisierungsheaders im Webdienstaufruf an. AEM Forms unterstützt auch die Assertion-basierte Authentifizierung von SAML. Wenn eine Clientanwendung einen AEM Forms-Dienst mithilfe eines Webdiensts aufruft, kann die Clientanwendung Authentifizierungsinformationen auf eine der folgenden Arten bereitstellen:
  • Übergeben von Anmeldeinformationen im Rahmen der grundlegenden Autorisierung
  • Übergeben von Benutzername-Token als Teil der WS-Security-Kopfzeile
  • Übergeben einer SAML-Zusicherung als Teil der WS-Security-Kopfzeile
  • Übergeben des Kerberos-Tokens als Teil des WS-Security-Headers
AEM Forms unterstützt keine standardmäßige zertifikatbasierte Authentifizierung, unterstützt aber eine zertifikatbasierte Authentifizierung in einem anderen Formular.
Die Webdienst-Schnellbenutzer in Programmieren mit AEM Forms geben die Werte für Benutzername und Kennwort an, um eine Autorisierung durchzuführen.
Die Identität der AEM Forms-Benutzer kann durch eine SAML-Zusicherung dargestellt werden, die mit einem geheimen Schlüssel signiert wurde. Der folgende XML-Code zeigt ein Beispiel für eine SAML-Zusicherung.
 <Assertion xmlns="urn:oasis:names:tc:SAML:1.0:assertion"
     xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
     xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
     AssertionID="fd4bd0c87302780e0d9bbfa8726d5bc0" IssueInstant="2008-04-17T13:47:00.720Z" Issuer="LiveCycle"
     MajorVersion="1" MinorVersion="1">
     <Conditions NotBefore="2008-04-17T13:47:00.720Z" NotOnOrAfter="2008-04-17T15:47:00.720Z">
     </Conditions>
     <AuthenticationStatement
         AuthenticationInstant="2008-04-17T13:47:00.720Z"
         AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified">
         <Subject>
             <NameIdentifier NameQualifier="DefaultDom">administrator</NameIdentifier>
             <SubjectConfirmation>
                 <ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</ConfirmationMethod>
             </SubjectConfirmation>
         </Subject>
     </AuthenticationStatement>
     <ds:Signature >
         <ds:SignedInfo>
             <ds:CanonicalizationMethod Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
             <ds:SignatureMethod    Algorithm="https://www.w3.org/2000/09/xmldsig#hmac-sha1"></ds:SignatureMethod>
             <ds:Reference URI="#fd4bd0c87302780e0d9bbfa8726d5bc0">
                 <ds:Transforms>
                     <ds:Transform Algorithm="https://www.w3.org/2000/09/xmldsig#enveloped-signature"></ds:Transform>
                     <ds:Transform Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#">
                         <ec:InclusiveNamespaces
                             PrefixList="code ds kind rw saml samlp typens #default">
                         </ec:InclusiveNamespaces>
                     </ds:Transform>
                 </ds:Transforms>
                 <ds:DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
                 <ds:DigestValue>hVrtqjWr+VzaVUIpQx0YI9lIjaY=</ds:DigestValue>
             </ds:Reference>
         </ds:SignedInfo>
         <ds:SignatureValue>UMbBb+cUcPtcWDCIhXes4n4FxfU=</ds:SignatureValue>
     </ds:Signature>
 </Assertion>

Diese Beispielassertion wird für einen Administratorbenutzer ausgegeben. Diese Zusicherung enthält die folgenden bemerkenswerten Elemente:
  • Es ist für eine bestimmte Dauer gültig.
  • Es wird für einen bestimmten Benutzer ausgegeben.
  • Es ist digital signiert. Jede daran vorgenommene Änderung würde die Unterschrift brechen.
  • Sie kann AEM Forms als Token der Identität des Benutzers ähnlich dem Benutzernamen und dem Kennwort angezeigt werden.
Eine Clientanwendung kann die Zusicherung von jeder AEM Forms AuthenticationManager-API abrufen, die ein AuthResult Objekt zurückgibt. Sie können eine AuthResult Instanz abrufen, indem Sie eine der beiden folgenden Methoden ausführen:
  • Authentifizieren des Benutzers mit einer der Authentifizierungsmethoden, die von der AuthenticationManager-API bereitgestellt werden. Normalerweise würden der Benutzername und das Kennwort verwendet. Sie können jedoch auch die Zertifikatauthentifizierung verwenden.
  • Verwenden der AuthenticationManager.getAuthResultOnBehalfOfUser Methode. Mit dieser Methode kann eine Clientanwendung ein AuthResult Objekt für jeden AEM Forms-Benutzer abrufen.
Ein AEM Forms-Benutzer kann mit einem SAML-Token authentifiziert werden, das abgerufen wird. Diese SAML-Zusicherung (XML-Fragment) kann als Teil des WS-Security-Headers mit dem Webdienst-Aufruf zur Benutzerauthentifizierung gesendet werden. Normalerweise hat eine Clientanwendung einen Benutzer authentifiziert, die Benutzerberechtigungen jedoch nicht gespeichert. (Oder der Benutzer hat sich über einen anderen Mechanismus als den Benutzernamen und das Kennwort bei diesem Client angemeldet.) In diesem Fall muss die Clientanwendung AEM Forms aufrufen und einen bestimmten Benutzer imitieren, der AEM Forms aufrufen darf.
Um die Identität eines bestimmten Benutzers zu imitieren, rufen Sie die AuthenticationManager.getAuthResultOnBehalfOfUser Methode mit einem Webdienst auf. Diese Methode gibt eine AuthResult Instanz zurück, die die SAML-Zusicherung für diesen Benutzer enthält.
Verwenden Sie anschließend diese SAML-Zusicherung, um alle Dienste aufzurufen, für die eine Authentifizierung erforderlich ist. Diese Aktion umfasst das Senden der Zusicherung als Teil des SOAP-Headers. Wenn mit dieser Zusicherung ein Webdienstaufruf erfolgt, identifiziert AEM Forms den Benutzer als den Benutzer, der durch diese Zusicherung repräsentiert wird. Das heißt, der in der Zusicherung angegebene Benutzer ist der Benutzer, der den Dienst aufruft.

Verwenden von Apache Axis-Klassen und SAML-basierter Authentifizierung

Sie können einen AEM Forms-Dienst von Java-Proxyklassen aufrufen, die mit der Axis-Bibliothek erstellt wurden. (Siehe Java-Proxyklassen mit Apache Axis erstellen.)
Wenn Sie AXIS mit SAML-basierter Authentifizierung verwenden, registrieren Sie den Anforderungs- und Antworthandler bei Axis. Apache Axis ruft den Handler auf, bevor eine Aufrufanforderung an AEM Forms gesendet wird. Um einen Handler zu registrieren, erstellen Sie eine Java-Klasse, die erweitert org.apache.axis.handlers.BasicHandler wird.
Erstellen eines AssertionHandlers mit Axis
Die folgende Java-Klasse mit dem Namen AssertionHandler.java zeigt ein Beispiel einer Java-Klasse, die erweitert org.apache.axis.handlers.BasicHandler wird.
 public class AssertionHandler extends BasicHandler {
        public void invoke(MessageContext ctx) throws AxisFault {
            String assertion = (String) ctx.getProperty(LC_ASSERTION);
 
            //no assertion hence nothing to insert
            if(assertion == null) return;
 
            try {
                MessageElement samlElement = new MessageElement(convertToXML(assertion));
                SOAPHeader header = (SOAPHeader) ctx.getRequestMessage().getSOAPHeader();
                //Create the wsse:Security element which would contain the SAML element
                SOAPElement wsseHeader = header.addChildElement("Security", "wsse", WSSE_NS);
                wsseHeader.appendChild(samlElement);
                //remove the actor attribute as in LC we do not specify any actor. This would not remove the actor attribute though
                //it would only remove it from the soapenv namespace
                wsseHeader.getAttributes().removeNamedItem("actor");
            } catch (SOAPException e) {
                throw new AxisFault("Error occured while adding the assertion to the SOAP Header",e);
            }
        }
 }

Handler registrieren
Um einen Handler mit Axis zu registrieren, erstellen Sie eine Datei "client-config.wsd". Standardmäßig sucht Axis nach einer Datei mit diesem Namen. Der folgende XML-Code ist ein Beispiel für eine Datei "client-config.wsd". Weitere Informationen finden Sie in der Achsendokumentation.
 <deployment xmlns="https://xml.apache.org/axis/wsdd/" xmlns:java="https://xml.apache.org/axis/wsdd/providers/java">
     <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
      <globalConfiguration >
       <requestFlow >
        <handler type="java:com.adobe.idp.um.example.AssertionHandler" />
       </requestFlow >
      </globalConfiguration >
 </deployment>
 

Aufrufen eines AEM Forms-Dienstes
Im folgenden Codebeispiel wird ein AEM Forms-Dienst mit SAML-basierter Authentifizierung aufgerufen.
 public class ImpersonationExample {
        . . .
        public void  authenticateOnBehalf(String superUsername,String password,
                String canonicalName,String domainName) throws UMException, RemoteException{
            ((org.apache.axis.client.Stub) authenticationManager).setUsername(superUsername);
            ((org.apache.axis.client.Stub) authenticationManager).setPassword(password);
 
            //Step 1 - Invoke the Auth manager api to get an assertion for the user to be impersonated
            AuthResult ar = authenticationManager.getAuthResultOnBehalfOfUser(canonicalName, domainName, null);
            String assertion = ar.getAssertion();
            //Step 2 - Setting the assertion here to be picked later by the AssertionHandler. Note that stubs are not threadSafe
            //hence should not be reused. For this simple example we have made them instance variable but care should be taken
            //regarding the thread safety
            ((javax.xml.rpc.Stub) authorizationManager)._setProperty(AssertionHandler.LC_ASSERTION, assertion);
        }
 
        public Role findRole(String roleId) throws UMException, RemoteException{
            //This api would be invoked under bob's user rights
            return authorizationManager.findRole(roleId);
        }
 
        public static void main(String[] args) throws Exception {
            ImpersonationExample ie = new ImpersonationExample("http://localhost:5555");
            //Get the SAML assertion for the user to impersonate and store it in stub
            ie.authenticateOnBehalf(
                    "administrator", //The Super user which has the required impersonation permission
                    "password", // Password of the super user as referred above
                    "bob", //Cannonical name of the user to impersonate
                    "testdomain" //Domain of the user to impersonate
                    );
 
            Role r = ie.findRole("BASIC_ROLE_ADMINISTRATOR");
            System.out.println("Role "+r.getName());
        }
 }

Verwenden einer .NET-Client-Assembly und einer SAML-basierten Authentifizierung

Sie können einen Forms-Dienst mit einer .NET-Client-Assembly und einer SAML-basierten Authentifizierung aufrufen. Dazu müssen Sie die Web Service Enhancements 3.0 (WSE) verwenden. Informationen zum Erstellen einer .NET-Clientassembly, die WSE verwendet, finden Sie unter Erstellen eines .NET-Projekts, das DIME verwendet.
Der Abschnitt DIME verwendet WSE 2.0. Um die SAML-basierte Authentifizierung zu verwenden, befolgen Sie die gleichen Anweisungen wie im DIME-Thema. Ersetzen Sie WSE 2.0 jedoch durch WSE 3.0. Installieren Sie Web Services Enhancements 3.0 auf Ihrem Entwicklungscomputer und integrieren Sie es in Microsoft Visual Studio .NET. Sie können Web Services Enhancements 3.0 vom Microsoft Download Center herunterladen.
Die WSE-Architektur verwendet die Datentypen Richtlinien, Zuordnungen und SecurityToken. Geben Sie für einen Webdienstaufruf kurz eine Richtlinie an. Eine Richtlinie kann mehrere Zusicherungen aufweisen. Jede Zusicherung kann Filter enthalten. Ein Filter wird in bestimmten Phasen eines Webdienstaufrufs aufgerufen und kann zu diesem Zeitpunkt die SOAP-Anforderung ändern. Ausführliche Informationen finden Sie in der Dokumentation zu Web Service Enhancements 3.0.
Assertion und Filter erstellen
Im folgenden C#-Codebeispiel werden Filter- und Assertionsklassen erstellt. In diesem Codebeispiel wird ein SamlAssertionOutputFilter erstellt. Dieser Filter wird vom WSE-Framework aufgerufen, bevor die SOAP-Anforderung an AEM Forms gesendet wird.
 class LCSamlPolicyAssertion : Microsoft.Web.ServicES4.Design.PolicyAssertion
 {
        public override Microsoft.Web.ServicES4.SoapFilter CreateClientOutputFilter(FilterCreationContext context)
        {
           return new SamlAssertionOutputFilter();
        }
        . . .
 }
 
 
 class SamlAssertionOutputFilter : SendSecurityFilter
 {
        public override void SecureMessage(SoapEnvelope envelope, Security security)
        {
           // Get the SamlToken from the SessionState
           SamlToken samlToken = envelope.Context.Credentials.UltimateReceiver.GetClientToken<SamlToken>();
           security.Tokens.Add(samlToken);
        }
 }

Erstellen des SAML-Tokens
Erstellen Sie eine Klasse zur Darstellung der SAML-Zusicherung. Die wichtigste Aufgabe, die diese Klasse ausführt, ist die Konvertierung von Datenwerten von Zeichenfolge in XML und die Beibehaltung des Leerraums. Diese Assertion-XML wird später in die SOAP-Anforderung importiert.
 class SamlToken : SecurityToken
 {
        public const string SAMLAssertion = "https://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1";
        private XmlElement _assertionElement;
 
        public SamlToken(string assertion)
             : base(SAMLAssertion)
        {
           XmlDocument xmlDoc = new XmlDocument();
           //The white space has to be preserved else the digital signature would get broken
           xmlDoc.PreserveWhitespace = true;
           xmlDoc.LoadXml(assertion);
           _assertionElement = xmlDoc.DocumentElement;
         }
 
         public override XmlElement GetXml(XmlDocument document)
         {
            return (XmlElement)document.ImportNode(_assertionElement, true);
         }
        . . .
 }

Aufrufen eines AEM Forms-Dienstes
Im folgenden C#-Codebeispiel wird ein Forms-Dienst mithilfe der SAML-basierten Authentifizierung aufgerufen.
 public class ImpersonationExample
 {
        . . .
        public void AuthenticateOnBehalf(string superUsername, string password, string canonicalName, string domainName)
        {
            //Create a policy for UsernamePassword Token
            Policy usernamePasswordPolicy = new Policy();
            usernamePasswordPolicy.Assertions.Add(new UsernameOverTransportAssertion());
 
            UsernameToken token = new UsernameToken(superUsername, password, PasswordOption.SendPlainText);
            authenticationManager.SetClientCredential(token);
            authenticationManager.SetPolicy(usernamePasswordPolicy);
 
            //Get the SAML assertion for impersonated user
            AuthClient.AuthenticationManagerService.AuthResult ar
                = authenticationManager.getAuthResultOnBehalfOfUser(canonicalName, domainName, null);
            System.Console.WriteLine("Received assertion " + ar.assertion);
 
            //Create a policy for inserting SAML assertion
            Policy samlPolicy = new Policy();
            samlPolicy.Assertions.Add(new LCSamlPolicyAssertion());
            authorizationManager.SetPolicy(samlPolicy);
            //Set the SAML assertion obtained previously as the token
            authorizationManager.SetClientCredential(new SamlToken(ar.assertion));
        }
 
        public Role findRole(string roleId)
        {
            return authorizationManager.findRole(roleId);
        }
 
        static void Main(string[] args)
        {
            ImpersonationExample ie = new ImpersonationExample("http://localhost:5555");
            ie.AuthenticateOnBehalf(
                 "administrator", //The Super user which has the required impersonation permission
                 "password", // Password of the super user as referred above
                 "bob", //Cannonical name of the user to impersonate
                 "testdomain" //Domain of the user to impersonate
                 );
 
         Role r = ie.findRole("BASIC_ROLE_ADMINISTRATOR");
            System.Console.WriteLine("Role "+r.name);
     }
 }