Anropa AEM Forms med Web Services invoking-aem-forms-using-web-services

Exempel och exempel i det här dokumentet är bara för AEM Forms i JEE-miljö.

De flesta AEM Forms-tjänster i tjänstbehållaren är konfigurerade för att visa en webbtjänst, med fullständigt stöd för generering av WSDL (Web Service Definition Language). Det innebär att du kan skapa proxyobjekt som använder den inbyggda SOAP-stacken för en AEM Forms-tjänst. Därför kan AEM Forms tjänster utbyta och bearbeta följande SOAP-meddelanden:

  • SOAP-begäran: Skickat till en Forms-tjänst av ett klientprogram som begär en åtgärd.
  • SOAP-svar: Skickat till ett klientprogram av en Forms-tjänst efter att en SOAP-begäran har bearbetats.

Med hjälp av webbtjänster kan du utföra samma AEM Forms-tjänståtgärder som du kan med Java API. En fördel med att använda webbtjänster för att anropa AEM Forms-tjänster är att du kan skapa ett klientprogram i en utvecklingsmiljö som stöder SOAP. Ett klientprogram är inte bundet till en specifik utvecklingsmiljö eller programmeringsspråk. Du kan till exempel skapa ett klientprogram med Microsoft Visual Studio .NET och C# som programmeringsspråk.

AEM Forms-tjänster exponeras över SOAP-protokollet och är WSI Basic Profile 1.1-kompatibla. Web Services Interoperability (WSI) är en öppen standardorganisation som främjar interoperabilitet mellan olika plattformar. Mer information finns i https://www.ws-i.org/.

AEM Forms stöder följande webbtjänststandarder:

  • Kodning: Stöder endast dokument- och literalkodning (vilket är den rekommenderade kodningen enligt WSI Basic-profilen). (Se Anropa AEM Forms med Base64-kodning.)
  • handelsplattform: Representerar ett sätt att koda bilagor med SOAP-begäranden. (Se Anropa AEM Forms med MTOM.)
  • SwaRef: Representerar ett annat sätt att koda bilagor med SOAP-begäranden. (Se Anropa AEM Forms med SwaRef.)
  • SOAP med bilagor: Stöder både MIME och DIME (Direct Internet Message Encapsulation). Dessa protokoll är standardsätt att skicka bilagor via SOAP. Microsoft Visual Studio .NET-program använder DIME. (Se Anropa AEM Forms med Base64-kodning.)
  • WS-Security: Stöder en tokenprofil för användarnamn och lösenord, som är ett standardsätt att skicka användarnamn och lösenord som en del av rubriken WS Security SOAP. AEM Forms stöder även grundläggande HTTP-autentisering. s

Om du vill anropa AEM Forms-tjänster med en webbtjänst skapar du vanligtvis ett proxybibliotek som använder tjänsten WSDL. The Anropa AEM Forms med Web Services -avsnittet använder JAX-WS för att skapa Java-proxyklasser för att anropa tjänster. (Se Skapa Java-proxyklasser med JAX-WS.)

Du kan hämta en tjänst-WDSL genom att ange följande URL-definition (objekt inom hakparenteser är valfria):

 https://<your_serverhost>:<your_port>/soap/services/<service_name>?wsdl[&version=<version>][&async=true|false][lc_version=<lc_version>]

där:

  • your_serverhost representerar IP-adressen för J2EE-programservern som är värd för AEM Forms.
  • din_port representerar HTTP-porten som J2EE-programservern använder.
  • service_name representerar tjänstnamnet.
  • version representerar målversionen av en tjänst (den senaste tjänstversionen används som standard).
  • async anger värdet true för att aktivera ytterligare åtgärder för asynkront anrop ( false som standard).
  • lc_version representerar den version av AEM Forms som du vill anropa.

I följande tabell visas WSDL-definitioner för tjänsten (förutsatt att AEM Forms har distribuerats på den lokala värden och att posten är 8080).

Tjänst
WSDL-definition
Assembler
http://localhost:8080/soap/services/ AssemblerService?wsdl
Bakåt och återställ
http://localhost:8080/soap/services/BackupService?wsdl
streckkodsformulär
http://localhost:8080/soap/services/ BarcodedFormsService?wsdl
Konvertera 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
Kryptering
http://localhost:8080/soap/services/EncryptionService?wsdl
Forms
http://localhost:8080/soap/services/FormsService?wsdl
Integrering av formulärdata
http://localhost:8080/soap/services/FormDataIntegration?wsdl
Generera PDF
http://localhost:8080/soap/services/ GeneratePDFService?wsdl
Generera 3D PDF
http://localhost:8080/soap/services/Generate3dPDFService?WSDL
Utdata
http://localhost:8080/soap/services/ OutputService?wsdl
Verktyg i PDF
http://localhost:8080/soap/services/ PDFUtilityService?wsdl
Acrobat Reader DC-tillägg
http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl
Databas
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
http://localhost:8080/soap/services/ XMPUtilityService?wsdl

WSDL-definitioner för AEM Forms Process

Ange programnamnet och processnamnet i WSDL-definitionen för att få åtkomst till en WSDL som tillhör en process som skapats i Workbench. Anta att namnet på programmet är MyApplication och processens namn är EncryptDocument. Ange i så fall följande WSDL-definition:

 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl
NOTE
Mer information om exemplet MyApplication/EncryptDocument kortlivad process, se Exempel på kortlivad process.
NOTE
Ett program kan innehålla mappar. I det här fallet anger du mappnamnen i WSDL-definitionen:
 http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl

Åtkomst till nya funktioner med hjälp av webbtjänster

Du kommer åt de nya funktionerna i AEM Forms-tjänsten via webbtjänster. I AEM Forms introduceras till exempel möjligheten att koda bilagor med hjälp av MTOM. (Se Anropa AEM Forms med MTOM.)

Om du vill få tillgång till nya funktioner som introducerats i AEM Forms anger du lc_version i WSDL-definitionen. Om du till exempel vill få åtkomst till nya tjänstfunktioner (inklusive stöd för MTOM) anger du följande WSDL-definition:

 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl&lc_version=9.0.1
NOTE
När du anger lc_version måste du använda tre siffror. 9.0.1 är till exempel lika med version 9.0.

BLOB-datatyp för webbtjänst

WSDL:er för AEM Forms-tjänster definierar många datatyper. En av de viktigaste datatyperna i en webbtjänst är en BLOB typ. Den här datatypen mappar till com.adobe.idp.Document när du arbetar med AEM Forms Java API:er. (Se Skicka data till AEM Forms-tjänster med Java API.)

A BLOB objekt skickar och hämtar binära data (till exempel PDF-filer, XML-data osv.) till och från AEM Forms-tjänster. The BLOB typen definieras i en tjänst-WSDL enligt följande:

 <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>

The MTOM och swaRef endast i AEM Forms. Du kan bara använda de nya fälten om du anger en URL som innehåller lc_version -egenskap.

Tillhandahålla BLOB-objekt i serviceförfrågningar

Om en AEM Forms-tjänståtgärd kräver en BLOB typ som indatavärde, skapa en instans av BLOB skriva in programlogiken. (Många av webbtjänstens snabbkommandon börjar i Programmera med AEM visa hur du arbetar med datatypen BLOB.)

Tilldela värden till fält som tillhör BLOB -instans enligt följande:

  • Base64: Om du vill skicka data som text som är kodad i ett Base64-format anger du data i BLOB.binaryData och ange datatypen i MIME-format (till exempel application/pdf) i BLOB.contentType fält. (Se Anropa AEM Forms med Base64-kodning.)
  • handelsplattform: Om du vill skicka binära data i en bifogad MTOM-fil anger du data i BLOB.MTOM fält. Den här inställningen kopplar data till SOAP-begäran med Java JAX-WS-ramverket eller SOAP-ramverkets inbyggda API. (Se Anropa AEM Forms med MTOM.)
  • SwaRef: Om du vill skicka binära data i en WS-I SwaRef-bilaga anger du data i BLOB.swaRef fält. Den här inställningen kopplar data till SOAP-begäran med Java JAX-WS-ramverket. (Se Anropa AEM Forms med SwaRef.)
  • MIME- eller DIME-bilaga: Om du vill skicka data i en MIME- eller DIME-bilaga måste du bifoga data till SOAP-begäran med SOAP-ramverkets inbyggda API. Ange identifierare för bifogad fil i dialogrutan BLOB.attachmentID fält. (Se Anropa AEM Forms med Base64-kodning.)
  • Fjärr-URL: Om data lagras på en webbserver och är tillgängliga via en HTTP-URL anger du HTTP-URL:en i BLOB.remoteURL fält. (Se Anropa AEM Forms med BLOB-data via HTTP.)

Åtkomst till data i BLOB-objekt som returneras från tjänster

Överföringsprotokollet för returnerade BLOB objekten är beroende av flera faktorer, som beaktas i följande ordning och som slutar när huvudvillkoret är uppfyllt:

  1. Mål-URL anger överföringsprotokoll. Om mål-URL:en som anges vid SOAP-anropet innehåller parametern blob="BLOB_TYPE", sedan BLOB_TYPE fastställer överföringsprotokollet. BLOB_TYPE är en platshållare för base64, dime, mime, http, mtom eller swaref.

  2. Tjänstens SOAP-slutpunkt är smart. Om följande villkor är uppfyllda returneras utdatadokumenten med samma överföringsprotokoll som indatadokumenten:

    • Tjänstens SOAP-slutpunktsparameter Standardprotokoll för utdatablobjekt anges till Smart.

      För varje tjänst med en SOAP-slutpunkt kan administrationskonsolen ange överföringsprotokoll för returnerade bloggar. (Se administrationshjälp.)

    • AEM Forms-tjänsten tar ett eller flera dokument som indata.

  3. Tjänstens SOAP-slutpunkt är inte smart. Det konfigurerade protokollet avgör dokumentöverföringsprotokollet och data returneras i motsvarande BLOB fält. Om SOAP-slutpunkten till exempel är inställd på DIME finns den returnerade blobben i blob.attachmentID oavsett överföringsprotokoll för indatadokument.

  4. Annars. Om en tjänst inte tar dokumenttypen som indata returneras utdatadokumenten i BLOB.remoteURL -fältet över HTTP-protokollet.

Som beskrivs i det första villkoret kan du säkerställa överföringstypen för returnerade dokument genom att utöka SOAP-slutpunkts-URL:en med ett suffix enligt följande:

     https://<your_serverhost>:<your_port>/soap/services/<service
     name>?blob=base64|dime|mime|http|mtom|swaref

Här är korrelationen mellan överföringstyper och det fält från vilket du får data:

  • Base64-format: Ange blob suffix till base64 för att returnera data i BLOB.binaryData fält.
  • MIME- eller DIME-bilaga: Ange blob suffix till DIME eller MIME för att returnera data som en motsvarande typ av bifogad fil med bilageidentifieraren som returneras i BLOB.attachmentID fält. Använd SOAP-ramverkets egna API för att läsa data från den bifogade filen.
  • Fjärr-URL: Ange blob suffix till http för att behålla data på programservern och returnera URL:en som pekar på data i BLOB.remoteURL fält.
  • MTOM eller SwaRef: Ange blob suffix till mtom eller swaref för att returnera data som en motsvarande typ av bifogad fil med bilageidentifieraren som returneras i BLOB.MTOM eller BLOB.swaRef fält. Använd SOAP-ramverkets inbyggda API för att läsa data från den bifogade filen.
NOTE
Du bör inte överskrida 30 MB när du fyller i en BLOB genom att anropa dess setBinaryData -metod. I annat fall finns det en möjlighet att OutOfMemory undantag inträffar.
NOTE
JAX WS-baserade program som använder MTOM-överföringsprotokollet är begränsade till 25 MB skickade och mottagna data. Begränsningen beror på ett fel i JAX-WS. Om den kombinerade storleken på skickade och mottagna filer överstiger 25 MB använder du överföringsprotokollet SwaRef i stället för MTOM. I annat fall finns det en möjlighet att OutOfMemory undantag.

MTOM-överföring av base64-kodade bytearrayer

Förutom BLOB -objektet stöder MTOM-protokollet alla bytearrayparametrar eller bytearrayfält av en komplex typ. Det innebär att SOAP-ramverk för klienter som stöder MTOM kan skicka alla xsd:base64Binary som en MTOM-bilaga (i stället för en base64-kodad text). AEM Forms SOAP-slutpunkter kan läsa den här typen av byte-array-kodning. AEM Forms-tjänsten returnerar emellertid alltid en bytearraytyp som base64-kodad text. Parametrarna för byte-array i utdata stöder inte MTOM.

AEM Forms-tjänster som returnerar en stor mängd binära data använder typen Dokument/BLOB i stället för bytearraytypen. Dokumenttypen är mycket effektivare när du vill skicka stora mängder data.

Datatyper för webbtjänster web-service-data-types

I följande tabell visas Java-datatyper och motsvarande webbtjänstdatatyp.

Java, datatyp
Datatyp för webbtjänst
java.lang.byte[]
xsd:base64Binary
java.lang.Boolean
xsd:boolean
java.util.Date

The DATE type, som definieras i en tjänst-WSDL enligt följande:

<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>

Om en AEM Forms-tjänst utför en java.util.Date värde som indata, måste SOAP-klientprogrammet skicka datumet i DATE.date fält. Ange DATE.calendar i det här fallet orsakar ett körningsundantag. Om tjänsten returnerar en java.util.Date, returneras datumet i DATE.date fält.

java.util.Calendar

The DATE type, som definieras i en tjänst-WSDL enligt följande:

<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>

Om en AEM Forms-tjänst utför en java.util.Calendar värde som indata, måste SOAP-klientprogrammet skicka datumet i DATE.caledendar fält. Ange DATE.date i det här fallet orsakar ett körningsundantag. Om tjänsten returnerar en java.util.Calendar, returneras datumet i DATE.calendar fält.

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

The apachesoap:Map, som definieras i en tjänst-WSDL enligt följande:

<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>

Kartan visas som en sekvens av nyckel-/värdepar.

java.lang.Object
$1
java.lang.Short
xsd:short
java.lang.String
xsd:string
org.w3c.dom.Document

XML-typen, som definieras i en tjänst-WSDL enligt följande:

<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>

Om en AEM Forms-tjänståtgärd godkänner en org.w3c.dom.Document skickar du XML-data i XML.document fält.

Ange XML.element fältet orsakar ett körningsundantag. Om tjänsten returnerar en org.w3c.dom.Document, returneras XML-data i XML.document fält.

org.w3c.dom.Element

XML-typen, som definieras i en tjänst-WSDL enligt följande:

<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>

Om en AEM Forms-tjänst utför en org.w3c.dom.Element som indata skickar du XML-data i XML.element fält.

Ange XML.document fältet orsakar ett körningsundantag. Om tjänsten returnerar en org.w3c.dom.Element, returneras XML-data i XML.element fält.

Skapa Java-proxyklasser med JAX-WS creating-java-proxy-classes-using-jax-ws

Du kan använda JAX-WS för att konvertera en Forms-tjänst-WSDL till Java-proxyklasser. Med de här klasserna kan du anropa åtgärder för AEM Forms-tjänster. Med Apache Ant kan du skapa ett byggskript som genererar Java-proxyklasser genom att referera till en AEM Forms-tjänst-WSDL. Du kan generera JAX-WS-proxyfiler genom att utföra följande steg:

  1. Installera Apache Ant på klientdatorn. (Se https://ant.apache.org/bindownload.cgi.)

    • Lägg till bin-katalogen i klassökvägen.
    • Ange ANT_HOME systemvariabel till den katalog där du installerade Ant.
  2. Installera JDK 1.6 eller senare.

    • Lägg till bin-katalogen för JDK i klassökvägen.
    • Lägg till JRE-katalogen bin i klassökvägen. Den här behållaren är i [JDK_INSTALL_LOCATION]/jre katalog.
    • Ange JAVA_HOME systemvariabel till den katalog där du installerade JDK.

    JDK 1.6 innehåller wimport-programmet som används i filen build.xml. JDK 1.5 innehåller inte det programmet.

  3. Installera JAX-WS på klientdatorn. (Se Java API for XML Web Services.)

  4. Använd JAX-WS och Apache Ant för att generera Java-proxyklasser. Skapa ett Ant-byggskript för att utföra den här uppgiften. Följande skript är ett exempel på ett Ant-byggskript som heter build.xml:

    code language-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>
    

    I det här Ant-byggskriptet kan du observera att url egenskapen är inställd på att referera till krypteringstjänsten WSDL som körs på localhost. The username och password -egenskaperna måste anges till ett giltigt AEM användarnamn och lösenord. Observera att URL:en innehåller lc_version -attribut. Utan att ange lc_version kan du inte anropa nya AEM Forms-tjänståtgärder.

    note note
    NOTE
    Ersätt EncryptionServicemed det AEM Forms-tjänstnamn som du vill anropa med Java-proxyklasser. Om du till exempel vill skapa Java-proxyklasser för tjänsten Rights Management anger du:
    code language-java
     http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
    
  5. Skapa en BAT-fil för att köra Ant-byggskriptet. Följande kommando kan finnas i en BAT-fil som ansvarar för att köra Ant-byggskriptet:

    code language-java
     ant -buildfile "build.xml" wsdl
    

    Placera ANT-byggskriptet i katalogen C:\Program Files\Java\jaxws-ri\bin. Skriptet skriver JAVA-filerna till ./classes mapp. Skriptet genererar JAVA-filer som kan anropa tjänsten.

  6. Paketera JAVA-filerna i en JAR-fil. Om du arbetar med Eclipse gör du så här:

    • Skapa ett Java-projekt som används för att paketera JAVA-proxyfilerna i en JAR-fil.
    • Skapa en källmapp i projektet.
    • Skapa en com.adobe.idp.services i källmappen.
    • Välj com.adobe.idp.services paketera och sedan importera JAVA-filerna från mappen adobe/idp/services till paketet.
    • Skapa en org/apache/xml/xmlsoap i källmappen.
    • Markera källmappen och importera sedan JAVA-filerna från mappen org/apache/xml/xmlsoap.
    • Ställ in Java-kompilatorns kompatibilitetsnivå till 5.0 eller högre.
    • Bygg projektet.
    • Exportera projektet som en JAR-fil.
    • Importera den här JAR-filen i ett klientprojekts klassökväg. Importera dessutom alla JAR-filer i <install directory="">\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty.
    note note
    NOTE
    Alla Java-webbtjänstsnabbstarter (utom Forms-tjänsten) i Programmering med AEM formulär skapar Java-proxyfiler med JAX-WS. Dessutom startar alla Java-webbtjänstsnabbstarter med SwaRef. (Se Anropa AEM Forms med SwaRef.)

Se även

Skapa Java-proxyklasser med Apache-axeln

Anropa AEM Forms med Base64-kodning

Anropa AEM Forms med BLOB-data via HTTP

Anropa AEM Forms med SwaRef

Skapa Java-proxyklasser med Apache-axeln creating-java-proxy-classes-using-apache-axis

Med verktyget Apache Axis WSDL2Java kan du konvertera en Forms-tjänst till Java-proxyklasser. Med dessa klasser kan du anropa Forms serviceåtgärder. Med Apache Ant kan du generera axelbiblioteksfiler från en tjänst-WSDL. Du kan hämta Apache-axeln på URL:en https://ws.apache.org/axis/.

NOTE
Webbtjänstsnabben som är associerad med Forms-tjänsten använder Java-proxyklasser som skapats med Apache Axis. Forms webbtjänstsnabbstart använder även Base64 som kodningstyp. (Se Snabbstart för Forms Service API.)

Du kan generera Axis Java-biblioteksfiler genom att utföra följande steg:

  1. Installera Apache Ant på klientdatorn. Den finns på https://ant.apache.org/bindownload.cgi.

    • Lägg till bin-katalogen i klassökvägen.
    • Ange ANT_HOME systemvariabel till den katalog där du installerade Ant.
  2. Installera Apache Axel 1.4 på klientdatorn. Den finns på https://ws.apache.org/axis/.

  3. Ställ in klassökvägen för att använda Axis JAR-filerna i webbtjänstklienten enligt anvisningarna i installationsanvisningarna för Axis på https://ws.apache.org/axis/java/install.html.

  4. Använd verktyget Apache WSDL2Java i Axel för att generera Java-proxyklasser. Skapa ett Ant-byggskript för att utföra den här uppgiften. Följande skript är ett exempel på ett Ant-byggskript som heter build.xml:

    code language-java
     <?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>
    

    I det här Ant-byggskriptet kan du observera att url egenskapen är inställd på att referera till krypteringstjänsten WSDL som körs på localhost. The username och password -egenskaperna måste anges till ett giltigt AEM användarnamn och lösenord.

  5. Skapa en BAT-fil för att köra Ant-byggskriptet. Följande kommando kan finnas i en BAT-fil som ansvarar för att köra Ant-byggskriptet:

    code language-java
     ant -buildfile "build.xml" encryption-wsdl2java-client
    

    JAVA-filerna skrivs till mappen C:\JavaFiles enligt inställningarna i output -egenskap. Om du vill anropa Forms-tjänsten importerar du dessa JAVA-filer till klassökvägen.

    Som standard tillhör dessa filer ett Java-paket med namnet com.adobe.idp.services. Vi rekommenderar att du placerar dessa JAVA-filer i en JAR-fil. Importera sedan JAR-filen till klientprogrammets klasssökväg.

    note note
    NOTE
    Det finns olika sätt att lägga in JAVA-filer i en JAR. Ett sätt är att använda en Java IDE som Eclipse. Skapa ett Java-projekt och skapa en com.adobe.idp.servicespaket (alla JAVA-filer tillhör det här paketet). Importera sedan alla JAVA-filer till paketet. Exportera projektet som en JAR-fil.
  6. Ändra URL:en i EncryptionServiceLocator för att ange kodningstypen. Om du till exempel vill använda base64 anger du ?blob=base64 för att säkerställa att BLOB returnerar binära data. Det vill säga, i EncryptionServiceLocator -klass, leta reda på följande kodrad:

    code language-java
     http://localhost:8080/soap/services/EncryptionService;
    

    och ändra det till:

    code language-java
     http://localhost:8080/soap/services/EncryptionService?blob=base64;
    
  7. Lägg till följande Axis JAR-filer i Java-projektets klassökväg:

    • activation.jar
    • axis.jar
    • comons-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

    Dessa JAR-filer finns i [install directory]/Adobe/Adobe Experience Manager Forms/sdk/lib/thirdparty katalog.

Se även

Skapa Java-proxyklasser med JAX-WS

Anropa AEM Forms med Base64-kodning

Anropa AEM Forms med BLOB-data via HTTP

Anropa AEM Forms med Base64-kodning invoking-aem-forms-using-base64-encoding

Du kan anropa en AEM Forms-tjänst med Base64-kodning. Base64-kodning kodar bilagor som skickas med en webbtjänstanrop. Det vill säga, BLOB data är Base64-kodade, inte hela SOAP-meddelandet.

"Anropa AEM Forms med Base64-kodning" diskuterar att anropa följande kortlivade AEM Forms-process med namnet MyApplication/EncryptDocument genom att använda Base64-kodning.

NOTE
Processen bygger inte på någon befintlig AEM Forms-process. Följ med i kodexemplet genom att skapa en process med namnet MyApplication/EncryptDocument med Workbench. (Se Använda Workbench.)

När processen anropas utför den följande åtgärder:

  1. Hämtar det oskyddade PDF-dokumentet som skickas till processen. Den här åtgärden baseras på SetValue operation. Indataparametern för den här processen är document processvariabel namngiven inDoc.
  2. Krypterar PDF-dokumentet med ett lösenord. Den här åtgärden baseras på PasswordEncryptPDF operation. Lösenordskrypterade PDF-dokument returneras i en processvariabel med namnet outDoc.

Skapa en .NET-klientsammansättning som använder Base64-kodning creating-a-net-client-assembly-that-uses-base64-encoding

Du kan skapa en .NET-klientsammansättning för att anropa en Forms-tjänst från ett Microsoft Visual Studio .NET-projekt. Så här skapar du en .NET-klientsammansättning som använder base64-kodning:

  1. Skapa en proxyklass utifrån en anrops-URL för AEM Forms.
  2. Skapa ett Microsoft Visual Studio .NET-projekt som skapar .NET-klientsammansättningen.

Skapa en proxyklass

Du kan skapa en proxyklass som används för att skapa .NET-klientsammansättningen med ett verktyg som medföljer Microsoft Visual Studio. Namnet på verktyget är wsdl.exe och finns i installationsmappen för Microsoft Visual Studio. Om du vill skapa en proxyklass öppnar du kommandotolken och navigerar till mappen som innehåller filen wsdl.exe. Mer information om verktyget wsdl.exe finns i Hjälp om MSDN.

Ange följande kommando i kommandotolken:

 wsdl https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Som standard skapas en CS-fil i samma mapp som baseras på namnet på WSDL. I så fall skapas en CS-fil med namnet EncryptDocumentService.cs. Du använder den här CS-filen för att skapa ett proxyobjekt som gör att du kan anropa tjänsten som angavs i anrops-URL:en.

Ändra URL:en i proxyklassen så att den omfattar ?blob=base64 för att säkerställa att BLOB returnerar binära data. Leta reda på följande kodrad i klassen proxy:

 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument";

och ändra det till:

 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";

The Anropa AEM Forms med Base64-kodning används i avsnitt MyApplication/EncryptDocument som ett exempel. Om du skapar en .NET-klientsammansättning för en annan Forms-tjänst måste du ersätta MyApplication/EncryptDocument med namnet på tjänsten.

Utveckla .NET-klientsammansättningen

Skapa ett Visual Studio Class Library-projekt som skapar en .NET-klientsammansättning. CS-filen som du skapade med wsdl.exe kan importeras till det här projektet. Det här projektet skapar en DLL-fil (.NET-klientsammansättningen) som du kan använda i andra Visual Studio .NET-projekt för att anropa en tjänst.

  1. Starta Microsoft Visual Studio .NET.
  2. Skapa ett klassbiblioteksprojekt och ge det namnet DocumentService.
  3. Importera CS-filen som du skapade med wsdl.exe.
  4. I Projekt meny, välja Lägg till referens.
  5. Välj i dialogrutan Lägg till referens System.Web.Services.dll.
  6. Klicka Välj och sedan klicka OK.
  7. Kompilera och bygg projektet.
NOTE
Den här proceduren skapar en .NET-klientsammansättning med namnet DocumentService.dll som du kan använda för att skicka SOAP-begäranden till MyApplication/EncryptDocument service.
NOTE
Se till att du har lagt till ?blob=base64 till URL:en i den proxyklass som används för att skapa .NET-klientsammansättningen. Annars kan du inte hämta binära data från BLOB -objekt.

Referera till .NET-klientsammansättningen

Placera den nyligen skapade .NET-klientsammansättningen på den dator där du utvecklar klientprogrammet. När du har placerat .NET-klientsammansättningen i en katalog kan du referera till den från ett projekt. Referera även till System.Web.Services bibliotek från ditt projekt. Om du inte refererar till det här biblioteket kan du inte använda .NET-klientsammansättningen för att anropa en tjänst.

  1. I Projekt meny, välja Lägg till referens.
  2. Klicka på .NET -fliken.
  3. Klicka Bläddra och leta upp filen DocumentService.dll.
  4. Klicka Välj och sedan klicka OK.

Anropa en tjänst med en .NET-klientsammansättning som använder Base64-kodning

Du kan anropa MyApplication/EncryptDocument tjänst (som skapades i Workbench) med en .NET-klientsammansättning som använder Base64-kodning. Anropa MyApplication/EncryptDocument utför du följande steg:

  1. Skapa en Microsoft .NET-klientsammansättning som använder MyApplication/EncryptDocument tjänst-WSDL.
  2. Skapa ett Microsoft .NET-klientprojekt. Referera till Microsoft .NET-klientsammansättningen i klientprojektet. Även referens System.Web.Services.
  3. Skapa en MyApplication_EncryptDocumentService genom att anropa dess standardkonstruktor.
  4. Ange MyApplication_EncryptDocumentService objektets Credentials egenskap med en System.Net.NetworkCredential -objekt. I System.Net.NetworkCredential -konstruktor anger du ett AEM användarnamn och motsvarande lösenord. Ange autentiseringsvärden för att .NET-klientprogrammet ska kunna utbyta SOAP-meddelanden med AEM Forms.
  5. Skapa en BLOB genom att använda dess konstruktor. The BLOB -objektet används för att lagra ett PDF-dokument som skickas till MyApplication/EncryptDocument -processen.
  6. Skapa en System.IO.FileStream genom att anropa dess konstruktor. Skicka ett strängvärde som representerar filplatsen för PDF-dokumentet och läget som filen ska öppnas i.
  7. Skapa en bytearray som lagrar innehållet i System.IO.FileStream -objekt. Du kan bestämma storleken på bytearrayen genom att hämta System.IO.FileStream objektets Length -egenskap.
  8. Fylla i bytearrayen med strömdata genom att anropa System.IO.FileStream objektets Read -metod. Skicka bytearrayen, startpositionen och strömlängden som ska läsas.
  9. Fyll i BLOB genom att tilldela binaryData med bytearrayens innehåll.
  10. Anropa MyApplication/EncryptDocument genom att anropa MyApplication_EncryptDocumentService objektets invoke metoden och skicka BLOB -objekt som innehåller dokumentet PDF. Den här processen returnerar ett krypterat PDF-dokument i en BLOB -objekt.
  11. Skapa en System.IO.FileStream genom att anropa dess konstruktor och skicka ett strängvärde som representerar filplatsen för det lösenordskrypterade dokumentet.
  12. Skapa en bytearray som lagrar datainnehållet i BLOB objektet returneras av MyApplicationEncryptDocumentService objektets invoke -metod. Fylla i bytearrayen genom att hämta värdet för BLOB objektets binaryData datamedlem.
  13. Skapa en System.IO.BinaryWriter genom att anropa dess konstruktor och skicka System.IO.FileStream -objekt.
  14. Skriv bytearrayinnehållet till en PDF-fil genom att anropa System.IO.BinaryWriter objektets Write och skicka bytearrayen.

Anropa en tjänst med Java-proxyklasser och Base64-kodning invoking-a-service-using-java-proxy-classes-and-base64-encoding

Du kan anropa en AEM Forms-tjänst med hjälp av Java-proxyklasser och Base64. Anropa MyApplication/EncryptDocument utför följande steg med Java-proxyklasser:

  1. Skapa Java-proxyklasser med JAX-WS som använder MyApplication/EncryptDocument tjänst-WSDL. Använd följande WSDL-slutpunkt:

    https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

    note note
    NOTE
    Ersätt hiro-xp med IP-adressen till J2EE-programtjänstleverantören som är värd för AEM Forms.
  2. Paketera Java-proxyklasserna som skapats med JAX-WS i en JAR-fil.

  3. Inkludera JAR-proxyfilen för Java och JAR-filerna i följande sökväg:

    <install directory="">\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty

    till klassökvägen för ditt Java-klientprojekt.

  4. Skapa en MyApplicationEncryptDocumentService genom att använda dess konstruktor.

  5. Skapa en MyApplicationEncryptDocument genom att anropa MyApplicationEncryptDocumentService objektets getEncryptDocument -metod.

  6. Ange de anslutningsvärden som krävs för att anropa AEM Forms genom att tilldela värden till följande datamedlemmar:

    • Tilldela WSDL-slutpunkten och kodningstypen till javax.xml.ws.BindingProvider objektets ENDPOINT_ADDRESS_PROPERTY fält. Anropa MyApplication/EncryptDocument tjänst med Base64-kodning, ange följande URL-värde:

      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64

    • Tilldela AEM formuläranvändare till javax.xml.ws.BindingProvider objektets USERNAME_PROPERTY fält.

    • Tilldela motsvarande lösenordsvärde till javax.xml.ws.BindingProvider objektets PASSWORD_PROPERTY fält.

    I följande kodexempel visas den här programlogiken:

    code language-java
     //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. Hämta PDF-dokumentet som ska skickas till MyApplication/EncryptDocument genom att skapa java.io.FileInputStream genom att använda dess konstruktor. Skicka ett strängvärde som anger platsen för PDF-dokumentet.

  8. Skapa en bytearray och fyll i den med innehållet i java.io.FileInputStream -objekt.

  9. Skapa en BLOB genom att använda dess konstruktor.

  10. Fyll i BLOB genom att anropa dess setBinaryData och skicka bytearrayen. The BLOB objektets setBinaryData är den metod som ska anropas när Base64-kodning används. Se Ange BLOB-objekt i tjänstbegäranden.

  11. Anropa MyApplication/EncryptDocument genom att anropa MyApplicationEncryptDocument objektets invoke -metod. Skicka BLOB -objekt som innehåller dokumentet PDF. invoke-metoden returnerar en BLOB som innehåller det krypterade PDF-dokumentet.

  12. Skapa en bytearray som innehåller det krypterade PDF-dokumentet genom att anropa BLOB objektets getBinaryData -metod.

  13. Spara det krypterade PDF-dokumentet som en PDF-fil. Skriv bytearrayen till en fil.

Se även

Snabbstart: Anropa en tjänst med Java-proxyfiler och Base64-kodning

Skapa en .NET-klientsammansättning som använder Base64-kodning

Anropa AEM Forms med MTOM invoking-aem-forms-using-mtom

Du kan anropa AEM Forms-tjänster med hjälp av webbtjänststandarden MTOM. Den här standarden definierar hur binära data, till exempel ett PDF-dokument, överförs via Internet eller intranätet. En funktion i MTOM är användningen av XOP:Include -element. Det här elementet definieras i XOP-specifikationen (XML Binary Optimized Packaging) för att referera till binära bilagor i ett SOAP-meddelande.

Diskussionen här handlar om att använda MTOM för att anropa följande kortlivade AEM Forms-process som heter MyApplication/EncryptDocument.

NOTE
Processen bygger inte på någon befintlig AEM Forms-process. Följ med i kodexemplet genom att skapa en process med namnet MyApplication/EncryptDocument med Workbench. (Se Använda Workbench.)

När processen anropas utför den följande åtgärder:

  1. Hämtar det oskyddade PDF-dokumentet som skickas till processen. Den här åtgärden baseras på SetValue operation. Indataparametern för den här processen är document processvariabel namngiven inDoc.
  2. Krypterar PDF-dokumentet med ett lösenord. Den här åtgärden baseras på PasswordEncryptPDF operation. Lösenordskrypterade PDF-dokument returneras i en processvariabel med namnet outDoc.
NOTE
MTOM-stöd lades till i AEM Forms, version 9.
NOTE
JAX WS-baserade program som använder MTOM-överföringsprotokollet är begränsade till 25 MB skickade och mottagna data. Begränsningen beror på ett fel i JAX-WS. Om den kombinerade storleken på skickade och mottagna filer överstiger 25 MB använder du överföringsprotokollet SwaRef i stället för MTOM. I annat fall finns det en möjlighet att OutOfMemory undantag.

Här handlar det om att använda MTOM i ett Microsoft .NET-projekt för att anropa AEM Forms tjänster. Det .NET Framework som används är 3.5 och utvecklingsmiljön är Visual Studio 2008. Om du har WSE (Web Service Enhancements) installerat på utvecklingsdatorn tar du bort det. .NET 3.5-ramverket stöder ett SOAP-ramverk med namnet Windows Communication Foundation (WCF). När AEM Forms anropas med hjälp av MTOM stöds bara WCF (inte WSE).

Skapa ett .NET-projekt som anropar en tjänst med hjälp av MTOM creating-a-net-project-that-invokes-a-service-using-mtom

Du kan skapa ett Microsoft .NET-projekt som kan anropa en AEM Forms-tjänst med hjälp av webbtjänster. Skapa först ett Microsoft .NET-projekt med Visual Studio 2008. Om du vill anropa en AEM Forms-tjänst skapar du en servicereferens till den AEM Forms-tjänst som du vill anropa i ditt projekt. När du skapar en servicereferens anger du en URL till AEM Forms-tjänsten:

 http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Ersätt localhost med IP-adressen till J2EE-programservern som är värd för AEM Forms. Ersätt MyApplication/EncryptDocument med namnet på den AEM Forms-tjänst som ska anropas. Om du till exempel vill anropa en Rights Management-åtgärd anger du:

http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1

The lc_version säkerställer att AEM Forms-funktioner, som t.ex. MTOM, är tillgängliga. Utan att ange lc_version kan du inte anropa AEM Forms med MTOM.

När du har skapat en servicereferens är datatyper som är kopplade till AEM Forms-tjänsten tillgängliga för användning i ditt .NET-projekt. Så här skapar du ett .NET-projekt som anropar en AEM Forms-tjänst:

  1. Skapa ett .NET-projekt med Microsoft Visual Studio 2008.

  2. I Projekt meny, välja Lägg till tjänstreferens.

  3. I Adress anger du WSDL för AEM Forms-tjänsten. Exempel:

    code language-java
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
  4. Klicka och sedan klicka OK.

Anropa en tjänst med MTOM i ett .NET-projekt invoking-a-service-using-mtom-in-a-net-project

Tänk på MyApplication/EncryptDocument som tar emot ett oskyddat PDF-dokument och returnerar ett lösenordskrypterat PDF-dokument. Anropa MyApplication/EncryptDocument utför följande steg (som skapades i Workbench) med hjälp av MTOM:

  1. Skapa ett Microsoft .NET-projekt.

  2. Skapa en MyApplication_EncryptDocumentClient genom att använda dess standardkonstruktor.

  3. Skapa en MyApplication_EncryptDocumentClient.Endpoint.Address genom att använda System.ServiceModel.EndpointAddress konstruktor. Skicka ett strängvärde som anger WSDL till AEM Forms-tjänsten och kodningstypen:

    code language-java
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
    

    Du behöver inte använda lc_version -attribut. Det här attributet används när du skapar en tjänstreferens. Se dock till att du anger ?blob=mtom.

    note note
    NOTE
    Ersätt hiro-xp med IP-adressen till J2EE-programtjänstleverantören som är värd för AEM Forms.
  4. Skapa en System.ServiceModel.BasicHttpBinding genom att hämta värdet för EncryptDocumentClient.Endpoint.Binding datamedlem. Skicka returvärdet till BasicHttpBinding.

  5. Ange System.ServiceModel.BasicHttpBinding objektets MessageEncoding datamedlem till WSMessageEncoding.Mtom. Detta värde garanterar att MTOM används.

  6. Aktivera grundläggande HTTP-autentisering genom att utföra följande åtgärder:

    • Tilldela användarnamnet för AEM formulär till datamedlemmen MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName.
    • Tilldela datamedlemmen motsvarande lösenordsvärde MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password.
    • Tilldela konstantvärdet HttpClientCredentialType.Basic till datamedlemmen BasicHttpBindingSecurity.Transport.ClientCredentialType.
    • Tilldela konstantvärdet BasicHttpSecurityMode.TransportCredentialOnly till datamedlemmen BasicHttpBindingSecurity.Security.Mode.

    I följande kodexempel visas dessa uppgifter.

    code language-java
     //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. Skapa en BLOB genom att använda dess konstruktor. The BLOB -objektet används för att lagra ett PDF-dokument som ska skickas till MyApplication/EncryptDocument -processen.

  8. Skapa en System.IO.FileStream genom att anropa dess konstruktor. Skicka ett strängvärde som representerar filplatsen för PDF-dokumentet och läget som filen ska öppnas i.

  9. Skapa en bytearray som lagrar innehållet i System.IO.FileStream -objekt. Du kan bestämma storleken på bytearrayen genom att hämta System.IO.FileStream objektets Length -egenskap.

  10. Fylla i bytearrayen med strömdata genom att anropa System.IO.FileStream objektets Read -metod. Skicka bytearrayen, startpositionen och strömlängden som ska läsas.

  11. Fyll i BLOB genom att tilldela MTOM datamedlem med innehållet i bytearrayen.

  12. Anropa MyApplication/EncryptDocument genom att anropa MyApplication_EncryptDocumentClient objektets invoke -metod. Skicka BLOB -objekt som innehåller dokumentet PDF. Den här processen returnerar ett krypterat PDF-dokument i en BLOB -objekt.

  13. Skapa en System.IO.FileStream genom att anropa dess konstruktor och skicka ett strängvärde som representerar filplatsen för det skyddade PDF-dokumentet.

  14. Skapa en bytearray som lagrar datainnehållet i BLOB objekt som returneras av invoke -metod. Fylla i bytearrayen genom att hämta värdet för BLOB objektets MTOM datamedlem.

  15. Skapa en System.IO.BinaryWriter genom att anropa dess konstruktor och skicka System.IO.FileStream -objekt.

  16. Skriv bytearrayens innehåll till en PDF-fil genom att anropa System.IO.BinaryWriter objektets Write och skicka bytearrayen.

NOTE
De flesta AEM Forms serviceåtgärder har en snabbstart för MTOM. Du kan visa dessa snabbstarter i en tjänsts motsvarande snabbstartsavsnitt. Om du till exempel vill se avsnittet Komma igång med utdatasnabbstarten går du till Snabbstart för Output Service API.

Se även

Snabbstart: Anropa en tjänst med MTOM i ett .NET-projekt

Åtkomst av flera tjänster via webbtjänster

Skapa ett ASP.NET webbprogram som anropar en människocentrerad, lång process

Anropa AEM Forms med SwaRef invoking-aem-forms-using-swaref

Du kan anropa AEM Forms-tjänster med SwaRef. Innehållet i wsi:swaRef XML-elementet skickas som en bifogad fil i ett SOAP-brödtext som lagrar referensen till den bifogade filen. Skapa Java-proxyklasser med Java API för XML-webbtjänster (JAX-WS) när du anropar en Forms-tjänst med hjälp av SwaRef. (Se Java API for XML Web Services.)

Diskussionen här handlar om att anropa följande kortlivade Forms-process som heter MyApplication/EncryptDocument med SwaRef.

NOTE
Processen bygger inte på någon befintlig AEM Forms-process. Följ med i kodexemplet genom att skapa en process med namnet MyApplication/EncryptDocument med Workbench. (Se Använda Workbench.)

När processen anropas utför den följande åtgärder:

  1. Hämtar det oskyddade PDF-dokumentet som skickas till processen. Den här åtgärden baseras på SetValue operation. Indataparametern för den här processen är document processvariabel namngiven inDoc.
  2. Krypterar PDF-dokumentet med ett lösenord. Den här åtgärden baseras på PasswordEncryptPDF operation. Lösenordskrypterade PDF-dokument returneras i en processvariabel med namnet outDoc.
NOTE
Stöd för SwaRef har lagts till i AEM Forms

Nedan beskrivs hur du anropar Forms-tjänster med hjälp av SwaRef i ett Java-klientprogram. Java-programmet använder proxyklasser som skapats med JAX-WS.

Anropa en tjänst med JAX-WS-biblioteksfiler som använder SwaRef invoke-a-service-using-jax-ws-library-files-that-use-swaref

Anropa MyApplication/EncryptDocument utför följande steg med Java-proxyfiler som skapats med JAX-WS och SwaRef:

  1. Skapa Java-proxyklasser med JAX-WS som använder MyApplication/EncryptDocument tjänst-WSDL. Använd följande WSDL-slutpunkt:

    code language-java
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    

    Mer information finns i Skapa Java-proxyklasser med JAX-WS.

    note note
    NOTE
    Ersätt hiro-xp med IP-adressen till J2EE-programservern som är värd för AEM Forms.
  2. Paketera Java-proxyklasserna som skapats med JAX-WS i en JAR-fil.

  3. Inkludera JAR-proxyfilen för Java och JAR-filerna i följande sökväg:

    <install directory="">\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty

    till klassökvägen för ditt Java-klientprojekt.

  4. Skapa en MyApplicationEncryptDocumentService genom att använda dess konstruktor.

  5. Skapa en MyApplicationEncryptDocument genom att anropa MyApplicationEncryptDocumentService objektets getEncryptDocument -metod.

  6. Ange de anslutningsvärden som krävs för att anropa AEM Forms genom att tilldela värden till följande datamedlemmar:

    • Tilldela WSDL-slutpunkten och kodningstypen till javax.xml.ws.BindingProvider objektets ENDPOINT_ADDRESS_PROPERTY fält. Anropa MyApplication/EncryptDocument med SwaRef-kodning anger du följande URL-värde:

       https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref

    • Tilldela AEM formuläranvändare till javax.xml.ws.BindingProvider objektets USERNAME_PROPERTY fält.

    • Tilldela motsvarande lösenordsvärde till javax.xml.ws.BindingProvider objektets PASSWORD_PROPERTY fält.

    I följande kodexempel visas den här programlogiken:

    code language-java
     //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. Hämta PDF-dokumentet som ska skickas till MyApplication/EncryptDocument genom att skapa java.io.File genom att använda dess konstruktor. Skicka ett strängvärde som anger platsen för PDF-dokumentet.

  8. Skapa en javax.activation.DataSource genom att använda FileDataSource konstruktor. Skicka java.io.File -objekt.

  9. Skapa en javax.activation.DataHandler genom att använda konstruktorn och skicka javax.activation.DataSource -objekt.

  10. Skapa en BLOB genom att använda dess konstruktor.

  11. Fyll i BLOB genom att anropa dess setSwaRef metoden och skicka javax.activation.DataHandler -objekt.

  12. Anropa MyApplication/EncryptDocument genom att anropa MyApplicationEncryptDocument objektets invoke metoden och skicka BLOB -objekt som innehåller dokumentet PDF. invoke-metoden returnerar en BLOB objekt som innehåller ett krypterat PDF-dokument.

  13. Fyll i en javax.activation.DataHandler genom att anropa BLOB objektets getSwaRef -metod.

  14. Konvertera javax.activation.DataHandler objekt till java.io.InputSteam instans genom att anropa javax.activation.DataHandler objektets getInputStream -metod.

  15. Skriv java.io.InputSteam -instans till en PDF-fil som representerar det krypterade PDF-dokumentet.

NOTE
De flesta AEM Forms-tjänståtgärder har en SwaRef-snabbstart. Du kan visa dessa snabbstarter i en tjänsts motsvarande snabbstartsavsnitt. Om du till exempel vill se avsnittet Komma igång med utdatasnabbstarten går du till Snabbstart för Output Service API.

Se även

Snabbstart: Anropa en tjänst med SwaRef i ett Java-projekt

Anropa AEM Forms med BLOB-data via HTTP invoking-aem-forms-using-blob-data-over-http

Du kan anropa AEM Forms-tjänster med webbtjänster och skicka BLOB-data via HTTP. Att skicka BLOB-data via HTTP är en alternativ teknik i stället för att använda base64-kodning, DIME eller MIME. Du kan till exempel skicka data via HTTP i ett Microsoft .NET-projekt som använder Web Service Enhancement 3.0, som inte stöder DIME eller MIME. När du använder BLOB-data över HTTP överförs indata innan AEM Forms-tjänsten anropas.

"Anrop av AEM Forms med BLOB Data over HTTP" handlar om att anropa följande kortlivade AEM Forms-process med namnet MyApplication/EncryptDocument genom att skicka BLOB-data via HTTP.

NOTE
Processen bygger inte på någon befintlig AEM Forms-process. Följ med i kodexemplet genom att skapa en process med namnet MyApplication/EncryptDocument med Workbench. (Se Använda Workbench.)

När processen anropas utför den följande åtgärder:

  1. Hämtar det oskyddade PDF-dokumentet som skickas till processen. Den här åtgärden baseras på SetValue operation. Indataparametern för den här processen är document processvariabel namngiven inDoc.
  2. Krypterar PDF-dokumentet med ett lösenord. Den här åtgärden baseras på PasswordEncryptPDF operation. Lösenordskrypterade PDF-dokument returneras i en processvariabel med namnet outDoc.
NOTE
Vi rekommenderar att du är bekant med Anropa AEM Forms med SOAP. (Se Anropa AEM Forms med Web Services.)

Skapa en .NET-klientsammansättning som använder data över HTTP creating-a-net-client-assembly-that-uses-data-over-http

Om du vill skapa en klientsammansättning som använder data över HTTP, följer du den process som anges i Anropa AEM Forms med Base64-kodning. Ändra emellertid URL:en i proxyklassen så att den innehåller ?blob=http i stället för ?blob=base64. Den här åtgärden ser till att data skickas via HTTP. Leta reda på följande kodrad i klassen proxy:

 "http://localhost:8080/soap/services/MyApplication/EncryptDocument";

och ändra det till:

 "http://localhost:8080/soap/services/MyApplication/EncryptDocument?blob=http";

Referera till .NET clienMyApplication/EncryptDocument-sammansättningen

Placera den nya .NET-klientsammansättningen på den dator där du utvecklar klientprogrammet. När du har placerat .NET-klientsammansättningen i en katalog kan du referera till den från ett projekt. Referera till System.Web.Services bibliotek från ditt projekt. Om du inte refererar till det här biblioteket kan du inte använda .NET-klientsammansättningen för att anropa en tjänst.

  1. I Projekt meny, välja Lägg till referens.
  2. Klicka på .NET -fliken.
  3. Klicka Bläddra och leta upp filen DocumentService.dll.
  4. Klicka Välj och sedan klicka OK.

Anropa en tjänst med en .NET-klientsammansättning som använder BLOB-data över HTTP

Du kan anropa MyApplication/EncryptDocument -tjänst (som skapades i Workbench) med en .NET-klientsammansättning som använder data via HTTP. Anropa MyApplication/EncryptDocument utför du följande steg:

  1. Skapa .NET-klientsammansättningen.
  2. Referera till Microsoft .NET-klientsammansättningen. Skapa ett Microsoft .NET-klientprojekt. Referera till Microsoft .NET-klientsammansättningen i klientprojektet. Även referens System.Web.Services.
  3. Skapa en MyApplication_EncryptDocumentService genom att anropa dess standardkonstruktor.
  4. Ange MyApplication_EncryptDocumentService objektets Credentials egenskap med en System.Net.NetworkCredential -objekt. I System.Net.NetworkCredential -konstruktor anger du ett AEM användarnamn och motsvarande lösenord. Ange autentiseringsvärden för att .NET-klientprogrammet ska kunna utbyta SOAP-meddelanden med AEM Forms.
  5. Skapa en BLOB genom att använda dess konstruktor. The BLOB -objektet används för att skicka data till MyApplication/EncryptDocument -processen.
  6. Tilldela ett strängvärde till BLOB objektets remoteURL datamedlem som anger URI-platsen för ett PDF-dokument som ska skickas till MyApplication/EncryptDocumentservice.
  7. Anropa MyApplication/EncryptDocument genom att anropa MyApplication_EncryptDocumentService objektets invoke metoden och skicka BLOB -objekt. Den här processen returnerar ett krypterat PDF-dokument i en BLOB -objekt.
  8. Skapa en System.UriBuilder genom att använda dess konstruktor och skicka värdet för det returnerade BLOB objektets remoteURL datamedlem.
  9. Konvertera System.UriBuilder objekt till System.IO.Stream -objekt. (Den snabbstart på C# som följer den här listan visar hur du utför den här uppgiften.)
  10. Skapa en bytearray och fyll i den med data i System.IO.Stream -objekt.
  11. Skapa en System.IO.BinaryWriter genom att anropa dess konstruktor och skicka System.IO.FileStream -objekt.
  12. Skriv bytearrayinnehållet till en PDF-fil genom att anropa System.IO.BinaryWriter objektets Write och skicka bytearrayen.

Anropa en tjänst med Java-proxyklasser och BLOB-data via HTTP invoking-a-service-using-java-proxy-classes-and-blob-data-over-http

Du kan anropa en AEM Forms-tjänst med hjälp av Java-proxyklasser och BLOB-data via HTTP. Anropa MyApplication/EncryptDocument utför följande steg med Java-proxyklasser:

  1. Skapa Java-proxyklasser med JAX-WS som använder MyApplication/EncryptDocument tjänst-WSDL. Använd följande WSDL-slutpunkt:

    code language-java
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    

    Mer information finns i Skapa Java-proxyklasser med JAX-WS.

    note note
    NOTE
    Ersätt hiro-xp med IP-adressen till J2EE-programservern som är värd för AEM Forms.
  2. Paketera Java-proxyklasserna som skapats med JAX-WS i en JAR-fil.

  3. Inkludera JAR-proxyfilen för Java och JAR-filerna i följande sökväg:

    <install directory="">\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty

    till klassökvägen för ditt Java-klientprojekt.

  4. Skapa en MyApplicationEncryptDocumentService genom att använda dess konstruktor.

  5. Skapa en MyApplicationEncryptDocument genom att anropa MyApplicationEncryptDocumentService objektets getEncryptDocument -metod.

  6. Ange de anslutningsvärden som krävs för att anropa AEM Forms genom att tilldela värden till följande datamedlemmar:

    • Tilldela WSDL-slutpunkten och kodningstypen till javax.xml.ws.BindingProvider objektets ENDPOINT_ADDRESS_PROPERTY fält. Anropa MyApplication/EncryptDocument genom att använda BLOB över HTTP-kodning anger du följande URL-värde:

      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http

    • Tilldela AEM formuläranvändare till javax.xml.ws.BindingProvider objektets USERNAME_PROPERTY fält.

    • Tilldela motsvarande lösenordsvärde till javax.xml.ws.BindingProvider objektets PASSWORD_PROPERTY fält.

    I följande kodexempel visas den här programlogiken:

    code language-java
     //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. Skapa en BLOB genom att använda dess konstruktor.

  8. Fyll i BLOB genom att anropa dess setRemoteURL -metod. Skicka ett strängvärde som anger URI-platsen för ett PDF-dokument som ska skickas till MyApplication/EncryptDocument service.

  9. Anropa MyApplication/EncryptDocument genom att anropa MyApplicationEncryptDocument objektets invoke metoden och skicka BLOB -objekt som innehåller dokumentet PDF. Den här processen returnerar ett krypterat PDF-dokument i en BLOB -objekt.

  10. Skapa en bytearray för att lagra dataströmmen som representerar det krypterade PDF-dokumentet. Anropa BLOB objektets getRemoteURL metod (använd BLOB objektet returneras av invoke metod).

  11. Skapa en java.io.File genom att använda dess konstruktor. Det här objektet representerar det krypterade PDF-dokumentet.

  12. Skapa en java.io.FileOutputStream genom att använda konstruktorn och skicka java.io.File -objekt.

  13. Anropa java.io.FileOutputStream objektets write -metod. Skicka bytearrayen som innehåller dataströmmen som representerar det krypterade PDF-dokumentet.

Anropa AEM Forms med DIME invoking-aem-forms-using-dime

Du kan anropa AEM Forms-tjänster med SOAP med bifogade filer. AEM Forms stöder både MIME- och DIME-webbtjänststandarderna. Med DIME kan du skicka binära bilagor, t.ex. PDF-dokument, tillsammans med anropsbegäranden i stället för att koda bilagan. The Anropa AEM Forms med DIME behandlar anrop av följande kortlivade AEM Forms-process med namnet MyApplication/EncryptDocument med DIME.

När processen anropas utför den följande åtgärder:

  1. Hämtar det oskyddade PDF-dokumentet som skickas till processen. Den här åtgärden baseras på SetValue operation. Indataparametern för den här processen är document processvariabel namngiven inDoc.
  2. Krypterar PDF-dokumentet med ett lösenord. Den här åtgärden baseras på PasswordEncryptPDF operation. Lösenordskrypterade PDF-dokument returneras i en processvariabel med namnet outDoc.

Processen bygger inte på någon befintlig AEM Forms-process. Följ kodexemplen genom att skapa en process med namnet MyApplication/EncryptDocument med Workbench. (Se Använda Workbench.)

NOTE
Anrop av AEM Forms tjänståtgärder med DIME är föråldrat. Vi rekommenderar att du använder MTOM. (Se Anropa AEM Forms med MTOM.)

Skapa ett .NET-projekt som använder DIME creating-a-net-project-that-uses-dime

Så här skapar du ett .NET-projekt som kan anropa en Forms-tjänst med DIME:

  • Installera webbtjänsttillägg 2.0 på utvecklingsdatorn.
  • I ditt .NET-projekt skapar du en webbreferens till tjänsten FormsAEM Forms.

Installerar webbtjänsttillägg 2.0

Installera Web Services Enhancements 2.0 på utvecklingsdatorn och integrera den med Microsoft Visual Studio .NET. Du kan ladda ned Web Services Enhancements 2.0 från Microsoft Download Center.

På den här webbsidan söker du efter Web Services Enhancements 2.0 och laddar ned det till utvecklingsdatorn. Den här nedladdningen placerar en fil med namnet Microsoft WSE 2.0 SPI.msi på datorn. Kör installationsprogrammet och följ anvisningarna online.

NOTE
Web Services Enhancements 2.0 stöder DIME. Den version av Microsoft Visual Studio som stöds är 2003 när du arbetar med Web Services Enhancements 2.0. Web Services Enhancements 3.0 stöder inte DIME, men det stöder MTOM.

Skapa en webbreferens till en AEM Forms-tjänst

När du har installerat Web Services Enhancements 2.0 på utvecklingsdatorn och skapat ett Microsoft .NET-projekt skapar du en webbreferens till Forms-tjänsten. Om du till exempel vill skapa en webbreferens till MyApplication/EncryptDocument och under förutsättning att Forms är installerat på den lokala datorn anger du följande URL:

     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL

När du har skapat en webbreferens är följande två proxydatatyper tillgängliga som du kan använda i ditt .NET-projekt: EncryptDocumentService och EncryptDocumentServiceWse. Anropa MyApplication/EncryptDocument använder du DIME EncryptDocumentServiceWse typ.

NOTE
Innan du skapar en webbreferens till Forms-tjänsten bör du kontrollera att du har referenser till Web Services Enhancements 2.0 i ditt projekt. (Se "Installera Web Services Enhancements 2.0".)

Referera till WSE-biblioteket

  1. Välj Lägg till referens på Projekt-menyn.
  2. I dialogrutan Lägg till referens väljer du Microsoft.Web.Services2.dll.
  3. Välj System.Web.Services.dll.
  4. Klicka på Välj och sedan på OK.

Skapa en webbreferens till en Forms-tjänst

  1. Välj Lägg till webbreferens på Projekt-menyn.
  2. Ange URL-adressen till Forms-tjänsten i dialogrutan URL.
  3. Klicka på Gå och sedan på Lägg till referens.
NOTE
Se till att du aktiverar ditt .NET-projekt så att det använder WSE-biblioteket. I projektutforskaren högerklickar du på projektnamnet och väljer Aktivera WSE 2.0. Kontrollera att kryssrutan i dialogrutan som visas är markerad.

Anropa en tjänst med DIME i ett .NET-projekt

Du kan anropa en Forms-tjänst med DIME. Tänk på MyApplication/EncryptDocument som tar emot ett oskyddat PDF-dokument och returnerar ett lösenordskrypterat PDF-dokument. Anropa MyApplication/EncryptDocument utför följande steg med DIME:

  1. Skapa ett Microsoft .NET-projekt som gör att du kan anropa en Forms-tjänst med DIME. Se till att du inkluderar Web Services Enhancements 2.0 och skapar en webbreferens till AEM Forms-tjänsten.

  2. När du har angett en webbreferens för MyApplication/EncryptDocument skapa en EncryptDocumentServiceWse genom att använda dess standardkonstruktor.

  3. Ange EncryptDocumentServiceWse objektets Credentials datamedlem med en System.Net.NetworkCredential värde som anger AEM användarnamn och lösenord.

  4. Skapa en Microsoft.Web.Services2.Dime.DimeAttachment genom att använda dess konstruktor och skicka följande värden:

    • Ett strängvärde som anger ett GUID-värde. Du kan få ett GUID-värde genom att anropa System.Guid.NewGuid.ToString -metod.
    • Ett strängvärde som anger innehållstypen. Eftersom processen kräver ett PDF-dokument anger du application/pdf.
    • A TypeFormat uppräkningsvärde. Ange TypeFormat.MediaType.
    • Ett strängvärde som anger platsen för det PDF-dokument som ska skickas till AEM Forms-processen.
  5. Skapa en BLOB genom att använda dess konstruktor.

  6. Lägg till DIME-bilagan i dialogrutan BLOB genom att tilldela Microsoft.Web.Services2.Dime.DimeAttachment objektets Id datamedlemmsvärde till BLOB objektets attachmentID datamedlem.

  7. Anropa EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add och skicka Microsoft.Web.Services2.Dime.DimeAttachment -objekt.

  8. Anropa MyApplication/EncryptDocument genom att anropa EncryptDocumentServiceWse objektets invoke metoden och skicka BLOB som innehåller DIME-bilagan. Den här processen returnerar ett krypterat PDF-dokument i en BLOB -objekt.

  9. Hämta bilageidentifierarvärdet genom att hämta värdet för det returnerade BLOB objektets attachmentID datamedlem.

  10. Iterera genom de bifogade filerna i EncryptDocumentServiceWse.ResponseSoapContext.Attachments och använd ID-värdet för bifogade filer för att hämta det krypterade PDF-dokumentet.

  11. Hämta en System.IO.Stream genom att hämta värdet för Attachment objektets Stream datamedlem.

  12. Skapa en bytearray och skicka bytearrayen till System.IO.Stream objektets Read -metod. Den här metoden fyller i bytearrayen med en dataström som representerar det krypterade PDF-dokumentet.

  13. Skapa en System.IO.FileStream genom att anropa dess konstruktor och skicka ett strängvärde som representerar filplatsen PDF. Det här objektet representerar det krypterade PDF-dokumentet.

  14. Skapa en System.IO.BinaryWriter genom att anropa dess konstruktor och skicka System.IO.FileStream -objekt.

  15. Skriv bytearrayens innehåll till PDF-filen genom att anropa System.IO.BinaryWriter objektets Write och skicka bytearrayen.

Skapa Java-proxyklasser för Apache-axel som använder DIME creating-apache-axis-java-proxy-classes-that-use-dime

Du kan använda verktyget WSDL2Java på Apache-axeln för att konvertera en tjänst-WSDL till Java-proxyklasser så att du kan anropa tjänståtgärder. Med Apache Ant kan du generera axelbiblioteksfiler från en AEM Forms-tjänst-WSDL som gör att du kan anropa tjänsten. (Se Skapa Java-proxyklasser med Apache-axeln.)

Verktyget Apache Axel WSDL2Java genererar JAVA-filer som innehåller metoder som används för att skicka SOAP-begäranden till en tjänst. SOAP-begäranden som tas emot av en tjänst avkodas av de axelgenererade biblioteken och återställs till metoder och argument.

Anropa MyApplication/EncryptDocument utför följande steg på en tjänst (som byggdes i Workbench) med axelgenererade biblioteksfiler och DIME:

  1. Skapa Java-proxyklasser som använder MyApplication/EncryptDocument tjänst-WSDL med Apache-axeln. (Se Skapa Java-proxyklasser med Apache-axeln.)

  2. Inkludera Java-proxyklasserna i klassökvägen.

  3. Skapa en MyApplicationEncryptDocumentServiceLocator genom att använda dess konstruktor.

  4. Skapa en URL genom att använda konstruktorn och skicka ett strängvärde som anger WSDL-definitionen för AEM Forms-tjänsten. Se till att du anger ?blob=dime i slutet av SOAP-slutpunkts-URL:en. Använd till exempel

    code language-java
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
    
  5. Skapa en EncryptDocumentSoapBindingStub genom att anropa dess konstruktor och skicka MyApplicationEncryptDocumentServiceLocator-objektet och URL -objekt.

  6. Ange AEM användarnamn och lösenord genom att anropa EncryptDocumentSoapBindingStub objektets setUsername och setPassword metoder.

    code language-java
     encryptionClientStub.setUsername("administrator");
     encryptionClientStub.setPassword("password");
    
  7. Hämta PDF-dokumentet som ska skickas till MyApplication/EncryptDocument genom att skapa en java.io.File -objekt. Skicka ett strängvärde som anger dokumentplatsen i PDF.

  8. Skapa en javax.activation.DataHandler genom att använda konstruktorn och skicka ett javax.activation.FileDataSource -objekt. The javax.activation.FileDataSource kan skapas med hjälp av konstruktorn och skicka java.io.File objekt som representerar dokumentet PDF.

  9. Skapa en org.apache.axis.attachments.AttachmentPart genom att använda konstruktorn och skicka javax.activation.DataHandler -objekt.

  10. Bifoga bilagan genom att anropa EncryptDocumentSoapBindingStub objektets addAttachment metoden och skicka org.apache.axis.attachments.AttachmentPart -objekt.

  11. Skapa en BLOB genom att använda dess konstruktor. Fyll i BLOB objekt med bilageidentifierarvärdet genom att anropa BLOB objektets setAttachmentID och skickar det bifogade filens identifierarvärde. Detta värde kan erhållas genom att anropa org.apache.axis.attachments.AttachmentPart objektets getContentId -metod.

  12. Anropa MyApplication/EncryptDocument genom att anropa EncryptDocumentSoapBindingStub objektets invoke -metod. Skicka BLOB som innehåller DIME-bilagan. Den här processen returnerar ett krypterat PDF-dokument i en BLOB -objekt.

  13. Hämta bilageidentifierarvärdet genom att anropa det returnerade BLOB objektets getAttachmentID -metod. Den här metoden returnerar ett strängvärde som representerar identifierarvärdet för den returnerade bifogade filen.

  14. Hämta bilagorna genom att anropa EncryptDocumentSoapBindingStub objektets getAttachments -metod. Den här metoden returnerar en array med Objects som representerar bilagorna.

  15. Iterera genom de bifogade filerna ( Object och använd värdet för bilageidentifieraren för att hämta det krypterade PDF-dokumentet. Varje element är en org.apache.axis.attachments.AttachmentPart -objekt.

  16. Hämta javax.activation.DataHandler det objekt som är associerat med den bifogade filen genom att anropa org.apache.axis.attachments.AttachmentPart objektets getDataHandler -metod.

  17. Hämta en java.io.FileStream genom att anropa javax.activation.DataHandler objektets getInputStream -metod.

  18. Skapa en bytearray och skicka bytearrayen till java.io.FileStream objektets read -metod. Den här metoden fyller i bytearrayen med en dataström som representerar det krypterade PDF-dokumentet.

  19. Skapa en java.io.File genom att använda dess konstruktor. Det här objektet representerar det krypterade PDF-dokumentet.

  20. Skapa en java.io.FileOutputStream genom att använda konstruktorn och skicka java.io.File -objekt.

  21. Anropa java.io.FileOutputStream objektets write och skicka bytearrayen som innehåller dataströmmen som representerar det krypterade PDF-dokumentet.

Se även

Snabbstart: Anropa en tjänst med DIME i ett Java-projekt

Använda SAML-baserad autentisering using-saml-based-authentication

AEM Forms har stöd för olika autentiseringslägen för webbtjänster vid anrop av tjänster. Ett autentiseringsläge anger både ett användarnamn och ett lösenordsvärde med hjälp av ett grundläggande auktoriseringshuvud i webbtjänstanropet. AEM Forms stöder också SAML-baserad autentisering. När ett klientprogram anropar en AEM Forms-tjänst med hjälp av en webbtjänst kan klientprogrammet tillhandahålla autentiseringsinformation på något av följande sätt:

  • Skicka inloggningsuppgifter som en del av den grundläggande auktoriseringen
  • Skickar användarnamntoken som en del av WS-Security-huvudet
  • Skicka en SAML-försäkran som en del av WS-Security-huvudet
  • Kerberos-token skickas som en del av WS-Security-huvudet

AEM Forms stöder inte standardcertifikatbaserad autentisering, men stöder certifikatbaserad autentisering i en annan form.

NOTE
Webbtjänstsnabben startar i Programmering med AEM Forms och anger användarnamn och lösenord för att utföra auktoriseringen.

Identiteten hos AEM formuläranvändare kan representeras via en SAML-försäkran som signerats med en hemlig nyckel. Följande XML-kod visar ett exempel på en SAML-försäkran.

 <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>

Det här exempelbekräftelsen utfärdas för en administratörsanvändare. Påståendet innehåller följande märkbara objekt:

  • Den gäller under en viss tid.
  • Det utfärdas för en viss användare.
  • Det är digitalt signerat. Alla ändringar som görs i det skulle alltså bryta signaturen.
  • Den kan presenteras för AEM Forms som en token för användaridentitet som liknar användarnamn och lösenord.

Ett klientprogram kan hämta försäkran från valfritt AEM Forms AuthenticationManager-API som returnerar en AuthResult -objekt. Du kan få en AuthResult -instans genom att utföra någon av följande två metoder:

  • Autentisera användaren med någon av de autentiseringsmetoder som används av AuthenticationManager API. Normalt används användarnamnet och lösenordet, men du kan också använda certifikatautentiseringen.
  • Använda AuthenticationManager.getAuthResultOnBehalfOfUser -metod. Med den här metoden kan ett klientprogram få en AuthResult -objekt för användare av AEM formulär.

En AEM kan autentiseras med en SAML-token som erhålls. Denna SAML-försäkran (xml-fragment) kan skickas som en del av WS-Security-huvudet med webbtjänstanropet för användarautentisering. Vanligtvis har ett klientprogram autentiserat en användare men inte lagrat inloggningsuppgifterna. (Eller så har användaren loggat in på klienten via en annan mekanism än att använda ett användarnamn och lösenord.) I den här situationen måste klientprogrammet anropa AEM Forms och personifiera en specifik användare som kan anropa AEM Forms.

Om du vill personifiera en viss användare anropar du AuthenticationManager.getAuthResultOnBehalfOfUser med en webbtjänst. Den här metoden returnerar en AuthResult -instans som innehåller SAML-försäkran för den användaren.

Använd sedan SAML-försäkran för att anropa alla tjänster som kräver autentisering. Den här åtgärden innebär att försäkran skickas som en del av SOAP-huvudet. När ett webbtjänstanrop görs med denna försäkran identifierar AEM Forms användaren som den som representeras av försäkran. Användaren som anges i försäkran är alltså den användare som anropar tjänsten.

Använda Apache-axelklasser och SAML-baserad autentisering using-apache-axis-classes-and-saml-based-authentication

Du kan anropa en AEM Forms-tjänst av Java-proxyklasser som har skapats med axelbiblioteket. (Se Skapa Java-proxyklasser med Apache-axeln.)

När du använder AXIS som använder SAML-baserad autentisering registrerar du hanteraren för begäran och svar med Axel. Hanteraren anropas av Apache Axis innan en anropsbegäran skickas till AEM Forms. Om du vill registrera en hanterare skapar du en Java-klass som utökar org.apache.axis.handlers.BasicHandler.

Skapa en AssertionHandler med axel

Följande Java-klass med namnet AssertionHandler.javavisar ett exempel på en Java-klass som utökar org.apache.axis.handlers.BasicHandler.

 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);
            }
        }
 }

Registrera hanteraren

Om du vill registrera en hanterare med Axel skapar du en client-config.wsdd-fil. Axeln söker som standard efter en fil med det här namnet. Följande XML-kod är ett exempel på en client-config.wsdd-fil. Mer information finns i Axeldokumentationen.

 <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>

Starta en AEM Forms-tjänst

I följande kodexempel anropas en AEM Forms-tjänst med SAML-baserad autentisering.

 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());
        }
 }

Använda en .NET-klientsammansättning och SAML-baserad autentisering using-a-net-client-assembly-and-saml-based-authentication

Du kan anropa en Forms-tjänst genom att använda en .NET-klientsammansättning och SAML-baserad autentisering. För att göra det måste du använda Web Service Enhancements 3.0 (WSE). Mer information om hur du skapar en .NET-klientsammansättning som använder WSE finns i Skapa ett .NET-projekt som använder DIME.

NOTE
DIME-avsnittet använder WSE 2.0. Om du vill använda SAML-baserad autentisering följer du de instruktioner som anges i DIME-avsnittet. Ersätt emellertid WSE 2.0 med WSE 3.0. Installera Web Services Enhancements 3.0 på utvecklingsdatorn och integrera den med Microsoft Visual Studio .NET. Du kan ladda ned webbtjänsttillägg 3.0 från Microsoft Download Center.

WSE-arkitekturen använder datatyperna Policies, Assertions och SecurityToken. För ett webbtjänstanrop anger du kort en princip. En princip kan ha flera försäkringar. Varje försäkran kan innehålla filter. Ett filter anropas i vissa steg i ett webbtjänstanrop och kan då ändra SOAP-begäran. Mer information finns i dokumentationen till Web Service Enhancements 3.0.

Skapa försäkran och filter

I följande exempel på C#-kod skapas filter- och kontrollklasser. I det här kodexemplet skapas ett SamlAssertionOutputFilter. Det här filtret anropas av WSE-ramverket innan SOAP-begäran skickas till AEM Forms.

 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);
        }
 }

Skapa SAML-token

Skapa en klass som representerar SAML-försäkran. Huvuduppgiften som den här klassen utför är att konvertera datavärden från sträng till xml och bevara tomt utrymme. Denna XML för försäkran importeras senare till SOAP-begäran.

 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);
         }
        . . .
 }

Starta en AEM Forms-tjänst

Följande C#-kodexempel anropar en Forms-tjänst med SAML-baserad autentisering.

 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);
     }
 }

Relaterade överväganden när du använder webbtjänster related-considerations-when-using-web-services

Ibland uppstår problem när vissa AEM Forms-tjänster anropas med hjälp av webbtjänster. Syftet med denna diskussion är att identifiera dessa problem och tillhandahålla en lösning, om en sådan finns tillgänglig.

Anropa tjänståtgärder asynkront invoking-service-operations-asynchronously

Om du försöker anropa en AEM Forms-tjänståtgärd asynkront, till exempel Generate PDF htmlToPDF operation, a SoapFaultException inträffar. Du löser det här problemet genom att skapa en XML-fil med anpassad bindning som mappar ExportPDF_Result -element och andra element i olika klasser. Följande XML representerar en anpassad bindningsfil.

 <bindings
        xmlns:xsd="https://www.w3.org/2001/XMLSchema"
        xmlns:jxb="https://java.sun.com/xml/ns/jaxb" jxb:version="1.0"
        xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/"
      wsdlLocation="http://localhost:8080/soap/services/GeneratePDFService?wsdl&async=true&lc_version=9.0.0"
        xmlns="https://java.sun.com/xml/ns/jaxws">
        <enableAsyncMapping>false</enableAsyncMapping>
        <package name="external_customize.client"/>
        <enableWrapperStyle>true</enableWrapperStyle>
        <bindings node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='https://adobe.com/idp/services']/xsd:element[@name='ExportPDF_Result']">
            <jxb:class name="ExportPDFAsyncResult">
            </jxb:class>
        </bindings>
        <bindings node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='https://adobe.com/idp/services']/xsd:element[@name='CreatePDF_Result']">
            <jxb:class name="CreatePDFAsyncResult">
            </jxb:class>
        </bindings>
        <bindings node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='https://adobe.com/idp/services']/xsd:element[@name='HtmlToPDF_Result']">
            <jxb:class name="HtmlToPDFAsyncResult">
            </jxb:class>
        </bindings>
        <bindings node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='https://adobe.com/idp/services']/xsd:element[@name='OptimizePDF_Result']">
            <jxb:class name="OptimizePDFAsyncResult">
            </jxb:class>
        </bindings>
        <!--bindings node="//wsdl:portType[@name='GeneratePDFService']/wsdl:operation[@name='HtmlToPDF_Result']">
            <jxb:class name="HtmlToPDFAsyncResult"/>
        </bindings-->
 </bindings>

Använd XML-filen när du skapar Java-proxyfiler med JAX-WS. (Se Skapa Java-proxyklasser med JAX-WS.)

Referera till den här XML-filen när du kör JAX-WS-verktyget (wsimport.exe) med hjälp av - b kommandoradsalternativ. Uppdatera wsdlLocation -element i XML-bindningsfilen för att ange URL:en för AEM Forms.

Om du vill vara säker på att asynkrona anrop fungerar ändrar du slutpunktens URL-värde och anger async=true. För Java-proxyfiler som skapas med JAX-WS anger du följande för BindingProvider.ENDPOINT_ADDRESS_PROPERTY.

https://server:port/soap/services/ServiceName?wsdl&async=true&lc_version=9.0.0

I följande lista anges andra tjänster som behöver en anpassad bindningsfil när den anropas asynkront:

  • PDFG3D
  • Aktivitetshanteraren
  • Application Manager
  • Kataloghanteraren
  • Distiller
  • Rights Management
  • Dokumenthantering

Skillnader i J2EE-servrar differences-in-j2ee-application-servers

Ibland kan ett proxybibliotek som skapats med en viss J2EE-programserver inte anropa AEM Forms som finns på en annan J2EE-programserver. Överväg ett proxybibliotek som genereras med AEM Forms och som distribueras på WebSphere. Proxybiblioteket kan inte anropa AEM Forms-tjänster som är distribuerade på JBoss Application Server.

Vissa komplexa datatyper från AEM Forms, som PrincipalReference, definieras annorlunda när AEM Forms distribueras på WebSphere jämfört med JBoss Application Server. Skillnader i de JDK:er som används av de olika J2EE-programtjänsterna är orsaken till varför det finns skillnader i WSDL-definitioner. Använd därför proxybibliotek som genereras från samma J2EE-programserver.

Åtkomst av flera tjänster via webbtjänster accessing-multiple-services-using-web-services

På grund av namnområdeskonflikter kan dataobjekt inte delas mellan flera tjänst-WSDL:er. Olika tjänster kan dela datatyper och därför delar tjänsterna definitionen av dessa typer i WSDL:erna. Du kan till exempel inte lägga till två .NET-klientsammansättningar som innehåller en BLOB datatyp till samma .NET-klientprojekt. Om du försöker göra det inträffar ett kompileringsfel.

I följande lista anges datatyper som inte kan delas mellan flera tjänst-WSDL

  • User
  • Principals
  • PrincipalReference
  • Groups
  • Roles
  • BLOB

För att undvika det här problemet rekommenderar vi att du kvalificerar datatyperna fullständigt. Ta till exempel ett .NET-program som refererar både till Forms-tjänsten och signaturtjänsten med hjälp av en tjänstreferens. Båda tjänstreferenserna innehåller en BLOB klassen. Använda en BLOB -instans, kvalificera BLOB när du deklarerar det. Den här metoden visas i följande kodexempel. Mer information om det här kodexemplet finns i Digital Signing Interactive Forms.

Följande exempel på C#-kod signerar ett interaktivt formulär som återges av Forms-tjänsten. Klientprogrammet har två tjänstreferenser. The BLOB instans som är associerad med Forms-tjänsten tillhör SignInteractiveForm.ServiceReference2 namnutrymme. På samma sätt visas BLOB instans som är associerad med signaturtjänsten tillhör SignInteractiveForm.ServiceReference1 namnutrymme. Det signerade interaktiva formuläret sparas som en PDF-fil med namnet LoanXFASigned.pdf.

 ???/**
     * Ensure that you create a .NET project that uses
     * MS Visual Studio 2008 and version 3.5 of the .NET
     * framework. This is required to invoke a
     * AEM Forms service using MTOM.
     *
     * For information, see "Invoking AEM Forms using MTOM" in Programming with AEM forms
     */
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.ServiceModel;
 using System.IO;

 //A reference to the Signature service
 using SignInteractiveForm.ServiceReference1;

 //A reference to the Forms service
 using SignInteractiveForm.ServiceReference2;

 namespace SignInteractiveForm
 {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    //Because BLOB objects are used in both service references
                    //it is necessary to fully qualify the BLOB objects

                    //Retrieve the form -- invoke the Forms service
                    SignInteractiveForm.ServiceReference2.BLOB formData = GetForm();

                    //Create a BLOB object associated with the Signature service
                    SignInteractiveForm.ServiceReference1.BLOB sigData = new SignInteractiveForm.ServiceReference1.BLOB();

                    //Transfer the byte stream from one Forms BLOB object to the
                    //Signature BLOB object
                    sigData.MTOM = formData.MTOM;

                    //Sign the Form -- invoke the Signature service
                    SignForm(sigData);
                }
                catch (Exception ee)
                {
                    Console.WriteLine(ee.Message);
                }
            }

            //Creates an interactive PDF form based on a XFA form - invoke the Forms service
            private static SignInteractiveForm.ServiceReference2.BLOB GetForm()
            {

                try
                {
                    //Create a FormsServiceClient object
                    FormsServiceClient formsClient = new FormsServiceClient();
                    formsClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/FormsService?blob=mtom");

                    //Enable BASIC HTTP authentication
                    BasicHttpBinding b = (BasicHttpBinding)formsClient.Endpoint.Binding;
                    b.MessageEncoding = WSMessageEncoding.Mtom;
                    formsClient.ClientCredentials.UserName.UserName = "administrator";
                    formsClient.ClientCredentials.UserName.Password = "password";
                    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                    b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                    b.MaxReceivedMessageSize = 2000000;
                    b.MaxBufferSize = 2000000;
                    b.ReaderQuotas.MaxArrayLength = 2000000;

                    //Create a BLOB to store form data
                    SignInteractiveForm.ServiceReference2.BLOB formData = new SignInteractiveForm.ServiceReference2.BLOB();
                    SignInteractiveForm.ServiceReference2.BLOB pdfForm = new SignInteractiveForm.ServiceReference2.BLOB();

                    //Specify a XML form data
                    string path = "C:\\Adobe\Loan.xml";
                    FileStream fs = new FileStream(path, FileMode.Open);

                    //Get the length of the file stream
                    int len = (int)fs.Length;
                    byte[] ByteArray = new byte[len];

                    fs.Read(ByteArray, 0, len);
                    formData.MTOM = ByteArray;

                    //Specify a XML form data
                    string path2 = "C:\\Adobe\LoanSigXFA.pdf";
                    FileStream fs2 = new FileStream(path2, FileMode.Open);

                    //Get the length of the file stream
                    int len2 = (int)fs2.Length;
                    byte[] ByteArray2 = new byte[len2];

                    fs2.Read(ByteArray2, 0, len2);
                    pdfForm.MTOM = ByteArray2;

                    PDFFormRenderSpec renderSpec = new PDFFormRenderSpec();
                    renderSpec.generateServerAppearance = true;

                    //Set out parameter values
                    long pageCount = 1;
                    String localValue = "en_US";
                    FormsResult result = new FormsResult();

                    //Render an interactive PDF form
                    formsClient.renderPDFForm2(
                        pdfForm,
                        formData,
                        renderSpec,
                        null,
                        null,
                        out pageCount,
                        out localValue,
                        out result);

                    //Write the data stream to the BLOB object
                    SignInteractiveForm.ServiceReference2.BLOB outForm = result.outputContent;
                    return outForm;
                }
                catch (Exception ee)
                {
                    Console.WriteLine(ee.Message);
                }
                return null;
            }

            //Sign the form -- invoke the Signature service
            private static void SignForm(SignInteractiveForm.ServiceReference1.BLOB inDoc)
            {

                try
                {
                    //Create a SignatureServiceClient object
                    SignatureServiceClient signatureClient = new SignatureServiceClient();
                    signatureClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/SignatureService?blob=mtom");

                    //Enable BASIC HTTP authentication
                    BasicHttpBinding b = (BasicHttpBinding)signatureClient.Endpoint.Binding;
                    b.MessageEncoding = WSMessageEncoding.Mtom;
                    signatureClient.ClientCredentials.UserName.UserName = "administrator";
                    signatureClient.ClientCredentials.UserName.Password = "password";
                    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                    b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                    b.MaxReceivedMessageSize = 2000000;
                    b.MaxBufferSize = 2000000;
                    b.ReaderQuotas.MaxArrayLength = 2000000;

                    //Specify the name of the signature field
                    string fieldName = "form1[0].grantApplication[0].page1[0].SignatureField1[0]";

                    //Create a Credential object
                    Credential myCred = new Credential();
                    myCred.alias = "secure";

                    //Specify the reason to sign the document
                    string reason = "The document was reviewed";

                    //Specify the location of the signer
                    string location = "New York HQ";

                    //Specify contact information
                    string contactInfo = "Tony Blue";

                    //Create a PDFSignatureAppearanceOptions object
                    //and show date information
                    PDFSignatureAppearanceOptionSpec appear = new PDFSignatureAppearanceOptionSpec();
                    appear.showDate = true;

                    //Sign the PDF document
                    SignInteractiveForm.ServiceReference1.BLOB signedDoc = signatureClient.sign(
                        inDoc,
                        fieldName,
                        myCred,
                        HashAlgorithm.SHA1,
                        reason,
                        location,
                        contactInfo,
                        appear,
                        true,
                        null,
                        null,
                        null);

                    //Populate a byte array with BLOB data that represents the signed form
                    byte[] outByteArray = signedDoc.MTOM;

                    //Save the signed PDF document
                    string fileName = "C:\\Adobe\LoanXFASigned.pdf";
                    FileStream fs2 = new FileStream(fileName, FileMode.OpenOrCreate);

                    //Create a BinaryWriter object
                    BinaryWriter w = new BinaryWriter(fs2);
                    w.Write(outByteArray);
                    w.Close();
                    fs2.Close();
                }

                catch (Exception ee)
                {
                    Console.WriteLine(ee.Message);
                }
            }
        }
 }

Tjänster som börjar med bokstaven I skapar ogiltiga proxyfiler services-starting-with-the-letter-i-produce-invalid-proxy-files

Namnet på vissa AEM Forms-genererade proxyklasser är felaktigt när Microsoft .Net 3.5 och WCF används. Problemet inträffar när proxyklasser skapas för IBMFilenetContentRepositoryConnector, IDPSchedulerService eller någon annan tjänst vars namn börjar med bokstaven I. Namnet på den genererade klienten om IBMFileNetContentRepositoryConnector är BMFileNetContentRepositoryConnectorClient. Bokstaven I saknas i den genererade proxyklassen.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2