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ärdettrue
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).
http://localhost:8080/soap/services/ AssemblerService?wsdl
http://localhost:8080/soap/services/BackupService?wsdl
http://localhost:8080/soap/services/ BarcodedFormsService?wsdl
http://localhost:8080/soap/services/ ConvertPDFService?wsdl
http://localhost:8080/soap/services/ DistillerService?wsdl
http://localhost:8080/soap/services/DocConverterService?WSDL
http://localhost:8080/soap/services/DocumentManagementService?WSDL
http://localhost:8080/soap/services/EncryptionService?wsdl
http://localhost:8080/soap/services/FormsService?wsdl
http://localhost:8080/soap/services/FormDataIntegration?wsdl
http://localhost:8080/soap/services/ GeneratePDFService?wsdl
http://localhost:8080/soap/services/Generate3dPDFService?WSDL
http://localhost:8080/soap/services/ OutputService?wsdl
http://localhost:8080/soap/services/ PDFUtilityService?wsdl
http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl
http://localhost:8080/soap/services/ RepositoryService?wsdl
http://localhost:8080/soap/services/ RightsManagementService?wsdl
http://localhost:8080/soap/services/ SignatureService?wsdl
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
MyApplication/EncryptDocument
kortlivad process, se Exempel på kortlivad process. 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
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 exempelapplication/pdf
) iBLOB.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:
-
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. -
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.
-
-
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 iblob.attachmentID
oavsett överföringsprotokoll för indatadokument. -
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 tillbase64
för att returnera data iBLOB.binaryData
fält. - MIME- eller DIME-bilaga: Ange
blob
suffix tillDIME
ellerMIME
för att returnera data som en motsvarande typ av bifogad fil med bilageidentifieraren som returneras iBLOB.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 tillhttp
för att behålla data på programservern och returnera URL:en som pekar på data iBLOB.remoteURL
fält. - MTOM eller SwaRef: Ange
blob
suffix tillmtom
ellerswaref
för att returnera data som en motsvarande typ av bifogad fil med bilageidentifieraren som returneras iBLOB.MTOM
ellerBLOB.swaRef
fält. Använd SOAP-ramverkets inbyggda API för att läsa data från den bifogade filen.
BLOB
genom att anropa dess setBinaryData
-metod. I annat fall finns det en möjlighet att OutOfMemory
undantag inträffar.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.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:
-
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.
-
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.
-
Installera JAX-WS på klientdatorn. (Se Java API for XML Web Services.)
-
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. Theusername
ochpassword
-egenskaperna måste anges till ett giltigt AEM användarnamn och lösenord. Observera att URL:en innehållerlc_version
-attribut. Utan att angelc_version
kan du inte anropa nya AEM Forms-tjänståtgärder.note note NOTE Ersätt EncryptionService
med 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
-
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.
-
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
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/.
Du kan generera Axis Java-biblioteksfiler genom att utföra följande steg:
-
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.
-
Installera Apache Axel 1.4 på klientdatorn. Den finns på https://ws.apache.org/axis/.
-
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.
-
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. Theusername
ochpassword
-egenskaperna måste anges till ett giltigt AEM användarnamn och lösenord. -
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.services
paket (alla JAVA-filer tillhör det här paketet). Importera sedan alla JAVA-filer till paketet. Exportera projektet som en JAR-fil. -
Ä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 attBLOB
returnerar binära data. Det vill säga, iEncryptionServiceLocator
-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;
-
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.
MyApplication/EncryptDocument
med Workbench. (Se Använda Workbench.)När processen anropas utför den följande åtgärder:
- 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 ärdocument
processvariabel namngiveninDoc
. - 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 namnetoutDoc
.
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:
- Skapa en proxyklass utifrån en anrops-URL för AEM Forms.
- 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.
- Starta Microsoft Visual Studio .NET.
- Skapa ett klassbiblioteksprojekt och ge det namnet DocumentService.
- Importera CS-filen som du skapade med wsdl.exe.
- I Projekt meny, välja Lägg till referens.
- Välj i dialogrutan Lägg till referens System.Web.Services.dll.
- Klicka Välj och sedan klicka OK.
- Kompilera och bygg projektet.
MyApplication/EncryptDocument
service.?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.
- I Projekt meny, välja Lägg till referens.
- Klicka på .NET -fliken.
- Klicka Bläddra och leta upp filen DocumentService.dll.
- 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:
- Skapa en Microsoft .NET-klientsammansättning som använder
MyApplication/EncryptDocument
tjänst-WSDL. - Skapa ett Microsoft .NET-klientprojekt. Referera till Microsoft .NET-klientsammansättningen i klientprojektet. Även referens
System.Web.Services
. - Skapa en
MyApplication_EncryptDocumentService
genom att anropa dess standardkonstruktor. - Ange
MyApplication_EncryptDocumentService
objektetsCredentials
egenskap med enSystem.Net.NetworkCredential
-objekt. ISystem.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. - Skapa en
BLOB
genom att använda dess konstruktor. TheBLOB
-objektet används för att lagra ett PDF-dokument som skickas tillMyApplication/EncryptDocument
-processen. - 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. - Skapa en bytearray som lagrar innehållet i
System.IO.FileStream
-objekt. Du kan bestämma storleken på bytearrayen genom att hämtaSystem.IO.FileStream
objektetsLength
-egenskap. - Fylla i bytearrayen med strömdata genom att anropa
System.IO.FileStream
objektetsRead
-metod. Skicka bytearrayen, startpositionen och strömlängden som ska läsas. - Fyll i
BLOB
genom att tilldelabinaryData
med bytearrayens innehåll. - Anropa
MyApplication/EncryptDocument
genom att anropaMyApplication_EncryptDocumentService
objektetsinvoke
metoden och skickaBLOB
-objekt som innehåller dokumentet PDF. Den här processen returnerar ett krypterat PDF-dokument i enBLOB
-objekt. - 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. - Skapa en bytearray som lagrar datainnehållet i
BLOB
objektet returneras avMyApplicationEncryptDocumentService
objektetsinvoke
-metod. Fylla i bytearrayen genom att hämta värdet förBLOB
objektetsbinaryData
datamedlem. - Skapa en
System.IO.BinaryWriter
genom att anropa dess konstruktor och skickaSystem.IO.FileStream
-objekt. - Skriv bytearrayinnehållet till en PDF-fil genom att anropa
System.IO.BinaryWriter
objektetsWrite
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:
-
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. -
Paketera Java-proxyklasserna som skapats med JAX-WS i en JAR-fil.
-
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.
-
Skapa en
MyApplicationEncryptDocumentService
genom att använda dess konstruktor. -
Skapa en
MyApplicationEncryptDocument
genom att anropaMyApplicationEncryptDocumentService
objektetsgetEncryptDocument
-metod. -
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
objektetsENDPOINT_ADDRESS_PROPERTY
fält. AnropaMyApplication/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
objektetsUSERNAME_PROPERTY
fält. -
Tilldela motsvarande lösenordsvärde till
javax.xml.ws.BindingProvider
objektetsPASSWORD_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);
-
-
Hämta PDF-dokumentet som ska skickas till
MyApplication/EncryptDocument
genom att skapajava.io.FileInputStream
genom att använda dess konstruktor. Skicka ett strängvärde som anger platsen för PDF-dokumentet. -
Skapa en bytearray och fyll i den med innehållet i
java.io.FileInputStream
-objekt. -
Skapa en
BLOB
genom att använda dess konstruktor. -
Fyll i
BLOB
genom att anropa desssetBinaryData
och skicka bytearrayen. TheBLOB
objektetssetBinaryData
är den metod som ska anropas när Base64-kodning används. Se Ange BLOB-objekt i tjänstbegäranden. -
Anropa
MyApplication/EncryptDocument
genom att anropaMyApplicationEncryptDocument
objektetsinvoke
-metod. SkickaBLOB
-objekt som innehåller dokumentet PDF. invoke-metoden returnerar enBLOB
som innehåller det krypterade PDF-dokumentet. -
Skapa en bytearray som innehåller det krypterade PDF-dokumentet genom att anropa
BLOB
objektetsgetBinaryData
-metod. -
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
.
MyApplication/EncryptDocument
med Workbench. (Se Använda Workbench.)När processen anropas utför den följande åtgärder:
- 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 ärdocument
processvariabel namngiveninDoc
. - 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 namnetoutDoc
.
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:
-
Skapa ett .NET-projekt med Microsoft Visual Studio 2008.
-
I Projekt meny, välja Lägg till tjänstreferens.
-
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
-
Klicka Gå 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:
-
Skapa ett Microsoft .NET-projekt.
-
Skapa en
MyApplication_EncryptDocumentClient
genom att använda dess standardkonstruktor. -
Skapa en
MyApplication_EncryptDocumentClient.Endpoint.Address
genom att användaSystem.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. -
Skapa en
System.ServiceModel.BasicHttpBinding
genom att hämta värdet förEncryptDocumentClient.Endpoint.Binding
datamedlem. Skicka returvärdet tillBasicHttpBinding
. -
Ange
System.ServiceModel.BasicHttpBinding
objektetsMessageEncoding
datamedlem tillWSMessageEncoding.Mtom
. Detta värde garanterar att MTOM används. -
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 datamedlemmenBasicHttpBindingSecurity.Transport.ClientCredentialType
. - Tilldela konstantvärdet
BasicHttpSecurityMode.TransportCredentialOnly
till datamedlemmenBasicHttpBindingSecurity.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;
- Tilldela användarnamnet för AEM formulär till datamedlemmen
-
Skapa en
BLOB
genom att använda dess konstruktor. TheBLOB
-objektet används för att lagra ett PDF-dokument som ska skickas tillMyApplication/EncryptDocument
-processen. -
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. -
Skapa en bytearray som lagrar innehållet i
System.IO.FileStream
-objekt. Du kan bestämma storleken på bytearrayen genom att hämtaSystem.IO.FileStream
objektetsLength
-egenskap. -
Fylla i bytearrayen med strömdata genom att anropa
System.IO.FileStream
objektetsRead
-metod. Skicka bytearrayen, startpositionen och strömlängden som ska läsas. -
Fyll i
BLOB
genom att tilldelaMTOM
datamedlem med innehållet i bytearrayen. -
Anropa
MyApplication/EncryptDocument
genom att anropaMyApplication_EncryptDocumentClient
objektetsinvoke
-metod. SkickaBLOB
-objekt som innehåller dokumentet PDF. Den här processen returnerar ett krypterat PDF-dokument i enBLOB
-objekt. -
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. -
Skapa en bytearray som lagrar datainnehållet i
BLOB
objekt som returneras avinvoke
-metod. Fylla i bytearrayen genom att hämta värdet förBLOB
objektetsMTOM
datamedlem. -
Skapa en
System.IO.BinaryWriter
genom att anropa dess konstruktor och skickaSystem.IO.FileStream
-objekt. -
Skriv bytearrayens innehåll till en PDF-fil genom att anropa
System.IO.BinaryWriter
objektetsWrite
och skicka bytearrayen.
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.
MyApplication/EncryptDocument
med Workbench. (Se Använda Workbench.)När processen anropas utför den följande åtgärder:
- 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 ärdocument
processvariabel namngiveninDoc
. - 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 namnetoutDoc
.
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:
-
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. -
Paketera Java-proxyklasserna som skapats med JAX-WS i en JAR-fil.
-
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.
-
Skapa en
MyApplicationEncryptDocumentService
genom att använda dess konstruktor. -
Skapa en
MyApplicationEncryptDocument
genom att anropaMyApplicationEncryptDocumentService
objektetsgetEncryptDocument
-metod. -
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
objektetsENDPOINT_ADDRESS_PROPERTY
fält. AnropaMyApplication/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
objektetsUSERNAME_PROPERTY
fält. -
Tilldela motsvarande lösenordsvärde till
javax.xml.ws.BindingProvider
objektetsPASSWORD_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);
-
-
Hämta PDF-dokumentet som ska skickas till
MyApplication/EncryptDocument
genom att skapajava.io.File
genom att använda dess konstruktor. Skicka ett strängvärde som anger platsen för PDF-dokumentet. -
Skapa en
javax.activation.DataSource
genom att användaFileDataSource
konstruktor. Skickajava.io.File
-objekt. -
Skapa en
javax.activation.DataHandler
genom att använda konstruktorn och skickajavax.activation.DataSource
-objekt. -
Skapa en
BLOB
genom att använda dess konstruktor. -
Fyll i
BLOB
genom att anropa desssetSwaRef
metoden och skickajavax.activation.DataHandler
-objekt. -
Anropa
MyApplication/EncryptDocument
genom att anropaMyApplicationEncryptDocument
objektetsinvoke
metoden och skickaBLOB
-objekt som innehåller dokumentet PDF. invoke-metoden returnerar enBLOB
objekt som innehåller ett krypterat PDF-dokument. -
Fyll i en
javax.activation.DataHandler
genom att anropaBLOB
objektetsgetSwaRef
-metod. -
Konvertera
javax.activation.DataHandler
objekt tilljava.io.InputSteam
instans genom att anropajavax.activation.DataHandler
objektetsgetInputStream
-metod. -
Skriv
java.io.InputSteam
-instans till en PDF-fil som representerar det krypterade PDF-dokumentet.
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.
MyApplication/EncryptDocument
med Workbench. (Se Använda Workbench.)När processen anropas utför den följande åtgärder:
- 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 ärdocument
processvariabel namngiveninDoc
. - 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 namnetoutDoc
.
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.
- I Projekt meny, välja Lägg till referens.
- Klicka på .NET -fliken.
- Klicka Bläddra och leta upp filen DocumentService.dll.
- 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:
- Skapa .NET-klientsammansättningen.
- Referera till Microsoft .NET-klientsammansättningen. Skapa ett Microsoft .NET-klientprojekt. Referera till Microsoft .NET-klientsammansättningen i klientprojektet. Även referens
System.Web.Services
. - Skapa en
MyApplication_EncryptDocumentService
genom att anropa dess standardkonstruktor. - Ange
MyApplication_EncryptDocumentService
objektetsCredentials
egenskap med enSystem.Net.NetworkCredential
-objekt. ISystem.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. - Skapa en
BLOB
genom att använda dess konstruktor. TheBLOB
-objektet används för att skicka data tillMyApplication/EncryptDocument
-processen. - Tilldela ett strängvärde till
BLOB
objektetsremoteURL
datamedlem som anger URI-platsen för ett PDF-dokument som ska skickas tillMyApplication/EncryptDocument
service. - Anropa
MyApplication/EncryptDocument
genom att anropaMyApplication_EncryptDocumentService
objektetsinvoke
metoden och skickaBLOB
-objekt. Den här processen returnerar ett krypterat PDF-dokument i enBLOB
-objekt. - Skapa en
System.UriBuilder
genom att använda dess konstruktor och skicka värdet för det returneradeBLOB
objektetsremoteURL
datamedlem. - Konvertera
System.UriBuilder
objekt tillSystem.IO.Stream
-objekt. (Den snabbstart på C# som följer den här listan visar hur du utför den här uppgiften.) - Skapa en bytearray och fyll i den med data i
System.IO.Stream
-objekt. - Skapa en
System.IO.BinaryWriter
genom att anropa dess konstruktor och skickaSystem.IO.FileStream
-objekt. - Skriv bytearrayinnehållet till en PDF-fil genom att anropa
System.IO.BinaryWriter
objektetsWrite
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:
-
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. -
Paketera Java-proxyklasserna som skapats med JAX-WS i en JAR-fil.
-
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.
-
Skapa en
MyApplicationEncryptDocumentService
genom att använda dess konstruktor. -
Skapa en
MyApplicationEncryptDocument
genom att anropaMyApplicationEncryptDocumentService
objektetsgetEncryptDocument
-metod. -
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
objektetsENDPOINT_ADDRESS_PROPERTY
fält. AnropaMyApplication/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
objektetsUSERNAME_PROPERTY
fält. -
Tilldela motsvarande lösenordsvärde till
javax.xml.ws.BindingProvider
objektetsPASSWORD_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);
-
-
Skapa en
BLOB
genom att använda dess konstruktor. -
Fyll i
BLOB
genom att anropa desssetRemoteURL
-metod. Skicka ett strängvärde som anger URI-platsen för ett PDF-dokument som ska skickas tillMyApplication/EncryptDocument
service. -
Anropa
MyApplication/EncryptDocument
genom att anropaMyApplicationEncryptDocument
objektetsinvoke
metoden och skickaBLOB
-objekt som innehåller dokumentet PDF. Den här processen returnerar ett krypterat PDF-dokument i enBLOB
-objekt. -
Skapa en bytearray för att lagra dataströmmen som representerar det krypterade PDF-dokumentet. Anropa
BLOB
objektetsgetRemoteURL
metod (användBLOB
objektet returneras avinvoke
metod). -
Skapa en
java.io.File
genom att använda dess konstruktor. Det här objektet representerar det krypterade PDF-dokumentet. -
Skapa en
java.io.FileOutputStream
genom att använda konstruktorn och skickajava.io.File
-objekt. -
Anropa
java.io.FileOutputStream
objektetswrite
-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:
- 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 ärdocument
processvariabel namngiveninDoc
. - 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 namnetoutDoc
.
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.)
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.
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.
Referera till WSE-biblioteket
- Välj Lägg till referens på Projekt-menyn.
- I dialogrutan Lägg till referens väljer du Microsoft.Web.Services2.dll.
- Välj System.Web.Services.dll.
- Klicka på Välj och sedan på OK.
Skapa en webbreferens till en Forms-tjänst
- Välj Lägg till webbreferens på Projekt-menyn.
- Ange URL-adressen till Forms-tjänsten i dialogrutan URL.
- Klicka på Gå och sedan på Lägg till referens.
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:
-
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.
-
När du har angett en webbreferens för
MyApplication/EncryptDocument
skapa enEncryptDocumentServiceWse
genom att använda dess standardkonstruktor. -
Ange
EncryptDocumentServiceWse
objektetsCredentials
datamedlem med enSystem.Net.NetworkCredential
värde som anger AEM användarnamn och lösenord. -
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. AngeTypeFormat.MediaType
. - Ett strängvärde som anger platsen för det PDF-dokument som ska skickas till AEM Forms-processen.
- Ett strängvärde som anger ett GUID-värde. Du kan få ett GUID-värde genom att anropa
-
Skapa en
BLOB
genom att använda dess konstruktor. -
Lägg till DIME-bilagan i dialogrutan
BLOB
genom att tilldelaMicrosoft.Web.Services2.Dime.DimeAttachment
objektetsId
datamedlemmsvärde tillBLOB
objektetsattachmentID
datamedlem. -
Anropa
EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add
och skickaMicrosoft.Web.Services2.Dime.DimeAttachment
-objekt. -
Anropa
MyApplication/EncryptDocument
genom att anropaEncryptDocumentServiceWse
objektetsinvoke
metoden och skickaBLOB
som innehåller DIME-bilagan. Den här processen returnerar ett krypterat PDF-dokument i enBLOB
-objekt. -
Hämta bilageidentifierarvärdet genom att hämta värdet för det returnerade
BLOB
objektetsattachmentID
datamedlem. -
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. -
Hämta en
System.IO.Stream
genom att hämta värdet förAttachment
objektetsStream
datamedlem. -
Skapa en bytearray och skicka bytearrayen till
System.IO.Stream
objektetsRead
-metod. Den här metoden fyller i bytearrayen med en dataström som representerar det krypterade PDF-dokumentet. -
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. -
Skapa en
System.IO.BinaryWriter
genom att anropa dess konstruktor och skickaSystem.IO.FileStream
-objekt. -
Skriv bytearrayens innehåll till PDF-filen genom att anropa
System.IO.BinaryWriter
objektetsWrite
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:
-
Skapa Java-proxyklasser som använder
MyApplication/EncryptDocument
tjänst-WSDL med Apache-axeln. (Se Skapa Java-proxyklasser med Apache-axeln.) -
Inkludera Java-proxyklasserna i klassökvägen.
-
Skapa en
MyApplicationEncryptDocumentServiceLocator
genom att använda dess konstruktor. -
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 exempelcode language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
-
Skapa en
EncryptDocumentSoapBindingStub
genom att anropa dess konstruktor och skickaMyApplicationEncryptDocumentServiceLocator
-objektet ochURL
-objekt. -
Ange AEM användarnamn och lösenord genom att anropa
EncryptDocumentSoapBindingStub
objektetssetUsername
ochsetPassword
metoder.code language-java encryptionClientStub.setUsername("administrator"); encryptionClientStub.setPassword("password");
-
Hämta PDF-dokumentet som ska skickas till
MyApplication/EncryptDocument
genom att skapa enjava.io.File
-objekt. Skicka ett strängvärde som anger dokumentplatsen i PDF. -
Skapa en
javax.activation.DataHandler
genom att använda konstruktorn och skicka ettjavax.activation.FileDataSource
-objekt. Thejavax.activation.FileDataSource
kan skapas med hjälp av konstruktorn och skickajava.io.File
objekt som representerar dokumentet PDF. -
Skapa en
org.apache.axis.attachments.AttachmentPart
genom att använda konstruktorn och skickajavax.activation.DataHandler
-objekt. -
Bifoga bilagan genom att anropa
EncryptDocumentSoapBindingStub
objektetsaddAttachment
metoden och skickaorg.apache.axis.attachments.AttachmentPart
-objekt. -
Skapa en
BLOB
genom att använda dess konstruktor. Fyll iBLOB
objekt med bilageidentifierarvärdet genom att anropaBLOB
objektetssetAttachmentID
och skickar det bifogade filens identifierarvärde. Detta värde kan erhållas genom att anropaorg.apache.axis.attachments.AttachmentPart
objektetsgetContentId
-metod. -
Anropa
MyApplication/EncryptDocument
genom att anropaEncryptDocumentSoapBindingStub
objektetsinvoke
-metod. SkickaBLOB
som innehåller DIME-bilagan. Den här processen returnerar ett krypterat PDF-dokument i enBLOB
-objekt. -
Hämta bilageidentifierarvärdet genom att anropa det returnerade
BLOB
objektetsgetAttachmentID
-metod. Den här metoden returnerar ett strängvärde som representerar identifierarvärdet för den returnerade bifogade filen. -
Hämta bilagorna genom att anropa
EncryptDocumentSoapBindingStub
objektetsgetAttachments
-metod. Den här metoden returnerar en array medObjects
som representerar bilagorna. -
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 enorg.apache.axis.attachments.AttachmentPart
-objekt. -
Hämta
javax.activation.DataHandler
det objekt som är associerat med den bifogade filen genom att anropaorg.apache.axis.attachments.AttachmentPart
objektetsgetDataHandler
-metod. -
Hämta en
java.io.FileStream
genom att anropajavax.activation.DataHandler
objektetsgetInputStream
-metod. -
Skapa en bytearray och skicka bytearrayen till
java.io.FileStream
objektetsread
-metod. Den här metoden fyller i bytearrayen med en dataström som representerar det krypterade PDF-dokumentet. -
Skapa en
java.io.File
genom att använda dess konstruktor. Det här objektet representerar det krypterade PDF-dokumentet. -
Skapa en
java.io.FileOutputStream
genom att använda konstruktorn och skickajava.io.File
-objekt. -
Anropa
java.io.FileOutputStream
objektetswrite
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.
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å enAuthResult
-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.java
visar 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.
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.