AEM Forms aanroepen met webservices invoking-aem-forms-using-web-services
de Steekproeven en de voorbeelden in dit document zijn slechts voor AEM Forms op milieu JEE.
De meeste AEM Forms-services in de servicecontainer zijn geconfigureerd om een webservice beschikbaar te maken, met volledige ondersteuning voor het genereren van WSDL (Web Service Definition Language). Met andere woorden, u kunt proxyobjecten maken die de native SOAP stapel van een AEM Forms-service gebruiken. Dit heeft tot gevolg dat AEM Forms-services de volgende SOAP kunnen uitwisselen en verwerken:
- SOAP verzoek: Verzonden naar de dienst van Forms door een cliënttoepassing die om een actie verzoekt.
- SOAP reactie: Verzonden naar een cliënttoepassing door de dienst van Forms nadat een SOAP verzoek wordt verwerkt.
Met behulp van webservices kunt u dezelfde bewerkingen voor AEM Forms-services uitvoeren als met de Java API. Een voordeel van het gebruik van webservices om AEM Forms-services aan te roepen, is dat u een clienttoepassing kunt maken in een ontwikkelomgeving die SOAP ondersteunt. Een clienttoepassing is niet gebonden aan een specifieke ontwikkelomgeving of programmeertaal. Bijvoorbeeld, kunt u een cliënttoepassing tot stand brengen gebruikend Microsoft Visual Studio .NET en C# als programmeertaal.
De diensten van AEM Forms worden blootgesteld over het SOAP protocol en zijn volgzaam WSI Basic Profile 1.1. De Interoperabiliteit van de Diensten van het Web (WSI) is een open normenorganisatie die Webdienst interoperabiliteit over platforms bevordert. Voor informatie, zie https://www.ws-i.org/.
AEM Forms ondersteunt de volgende webservicenormen:
- Codering: Steunt slechts document en letterlijke het coderen (die aangewezen het coderen volgens het BasisProfiel van WSI) is. (Zie het Aanhalen van AEM Forms gebruikend Base64 het coderen.)
- MTOM: Vertegenwoordigt een manier om gehechtheid met SOAP verzoeken te coderen. (Zie het Aanhalen AEM Forms gebruikend MTOM.)
- SwaRef: Vertegenwoordigt een andere manier om gehechtheid met SOAP verzoeken te coderen. (Zie het Aanhalen AEM Forms gebruikend SwaRef.)
- SOAP met gehechtheid: Steunt zowel MIME als DIME (de Directe Inkapseling van het Bericht van Internet). Deze protocollen zijn standaardmanieren om gehechtheid over SOAP te verzenden. Microsoft Visual Studio .NET-toepassingen gebruiken DIME. (Zie het Aanhalen van AEM Forms gebruikend Base64 het coderen.)
- WS-Veiligheid: Steunt een het symbolische profiel van het gebruikersnaam wachtwoord, dat een standaardmanier is om gebruikersnamen en wachtwoorden als deel van de SOAP van de Veiligheid van WS te verzenden. AEM Forms ondersteunt ook HTTP-basisverificatie. s
Als u AEM Forms-services wilt aanroepen met behulp van een webservice, maakt u doorgaans een proxybibliotheek die de service WSDL gebruikt. het aanhalen van AEM Forms die de diensten van het Web gebruiken sectie gebruikt JAX-WS om de volmachtsklassen van Java tot stand te brengen om de diensten aan te halen. (Zie Creërend de volmachtsklassen van Java gebruikend JAX-WS.)
U kunt de dienst WDSL terugwinnen door de volgende definitie URL te specificeren (de punten tussen haakjes zijn facultatief):
https://<your_serverhost>:<your_port>/soap/services/<service_name>?wsdl[&version=<version>][&async=true|false][lc_version=<lc_version>]
waarbij:
- your_serverhost vertegenwoordigt het IP adres van de J2EE toepassingsserver die AEM Forms ontvangt.
- your_port vertegenwoordigt de haven van HTTP die de J2EE toepassingsserver gebruikt.
- service_name vertegenwoordigt de de dienstnaam.
- versie vertegenwoordigt de doelversie van de dienst (de recentste de dienstversie wordt gebruikt door gebrek).
async
geeft de waardetrue
op om aanvullende bewerkingen voor asynchrone aanroep in te schakelen (false
standaard).- lc_version vertegenwoordigt de versie van AEM Forms die u wilt aanhalen.
De volgende lijst maakt een lijst van de dienstWSDL definities (veronderstellend dat AEM Forms op de lokale gastheer wordt opgesteld en de post 8080 is).
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 van het Proces van AEM Forms definities
Geef de toepassingsnaam en de procesnaam in de WSDL-definitie op voor toegang tot een WSDL die tot een proces behoort dat in Workbench is gemaakt. Stel dat de naam van de toepassing MyApplication
is en dat de naam van het proces EncryptDocument
is. In dit geval, specificeer de volgende definitie WSDL:
http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl
MyApplication/EncryptDocument
kortstondig proces, zie Kort gewoond procesvoorbeeld. http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl
die tot nieuwe functionaliteit toegang hebben gebruikend de Webdiensten
Nieuwe AEM Forms-servicefuncties zijn toegankelijk via webservices. In AEM Forms is bijvoorbeeld de mogelijkheid geïntroduceerd om bijlagen te coderen met MTOM. (Zie het Aanhalen AEM Forms gebruikend MTOM.)
Als u toegang wilt tot nieuwe functies die in AEM Forms zijn geïntroduceerd, geeft u het kenmerk lc_version
op in de WSDL-definitie. Als u bijvoorbeeld toegang wilt krijgen tot nieuwe servicefunctionaliteit (inclusief MTOM-ondersteuning), geeft u de volgende WSDL-definitie op:
http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl&lc_version=9.0.1
lc_version
instelt, moet u ervoor zorgen dat u drie cijfers gebruikt. 9.0.1 is bijvoorbeeld gelijk aan versie 9.0.de dienstBLOB van het Web gegevenstype
AEM Forms service WSDL's definiëren een groot aantal gegevenstypen. Een van de belangrijkste gegevenstypen in een webservice is een BLOB
-type. Dit gegevenstype wordt toegewezen aan de klasse com.adobe.idp.Document
wanneer u werkt met AEM Forms Java API's. (Zie het overgaan van gegevens tot de diensten van AEM Forms gebruikend Java API.)
Een BLOB
-object verzendt en haalt binaire gegevens op (bijvoorbeeld PDF-bestanden, XML-gegevens enzovoort) van en naar AEM Forms-services. Het type BLOB
wordt als volgt gedefinieerd in een service-WSDL:
<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>
De velden MTOM
en swaRef
worden alleen in AEM Forms ondersteund. U kunt deze nieuwe velden alleen gebruiken als u een URL opgeeft die de eigenschap lc_version
bevat.
leverend voorwerpen BLOB in de dienstverzoeken
Als een AEM Forms-servicebewerking een BLOB
-type als invoerwaarde vereist, maakt u een instantie van het BLOB
-type in uw toepassingslogica. (Veel van de Webdienst begint snel in Programmerend met AEM vormen tonen hoe te met een BLOB- gegevenstype te werken.)
Wijs als volgt waarden toe aan velden die tot de instantie BLOB
behoren:
- Base64: Om gegevens als tekst over te gaan die in een formaat Base64 wordt gecodeerd, plaats de gegevens op het
BLOB.binaryData
gebied en plaats het gegevenstype in het formaat MIME (bijvoorbeeld,application/pdf
) op hetBLOB.contentType
gebied. (Zie het Aanhalen van AEM Forms gebruikend Base64 het coderen.) - MTOM: Om binaire gegevens in een gehechtheid over te gaan MTOM, plaats de gegevens op het
BLOB.MTOM
gebied. Deze instelling koppelt de gegevens aan de SOAP aanvraag met behulp van het Java JAX-WS-framework of de native API van het SOAP framework. (Zie het Aanhalen AEM Forms gebruikend MTOM.) - SwaRef: Om binaire gegevens in een gehechtheid over te gaan WS-I SwaRef, plaats de gegevens op het
BLOB.swaRef
gebied. Deze instelling koppelt de gegevens aan de SOAP aanvraag met behulp van het Java JAX-WS-framework. (Zie het Aanhalen AEM Forms gebruikend SwaRef.) - MIME of DIME gehechtheid: Om gegevens in een MIME of DIME gehechtheid over te gaan, maak de gegevens aan het SOAP verzoek vast gebruikend inheemse API van het SOAP kader. Stel de id van de bijlage in het veld
BLOB.attachmentID
in. (Zie het Aanhalen van AEM Forms gebruikend Base64 het coderen.) - Verre URL: Als het gegeven op een Webserver wordt ontvangen en over HTTP URL toegankelijk is, plaats HTTP URL op het
BLOB.remoteURL
gebied. (Zie het Aanhalen van AEM Forms gebruikend BLOB gegevens over HTTP.)
Toegang hebbend tot gegevens in BLOB voorwerpen die van de diensten zijn teruggekeerd
Het transmissieprotocol voor geretourneerde BLOB
-objecten is afhankelijk van verschillende factoren. Deze worden in de volgende volgorde beschouwd en stoppen wanneer aan de hoofdvoorwaarde wordt voldaan:
-
Doel URL specificeert transmissieprotocol. Als doel URL bij de SOAP aanroeping wordt gespecificeerd de parameter
blob="
BLOB_TYPE " bevat, dan BLOB_TYPE bepaalt het transmissieprotocol. BLOB_TYPE is placeholder voor base64, tijd, mime, http, mtom, of swaref. -
het eindpunt van de Dienst SOAP is Slimme. Als aan de volgende voorwaarden wordt voldaan, worden de uitvoerdocumenten geretourneerd met hetzelfde verzendprotocol als de invoerdocumenten:
-
De SOAP eindpuntparameter van de dienst het StandaardProtocol voor de Voorwerpen van de Blob van de Output wordt geplaatst aan Slim.
Voor elke dienst met een SOAP eindpunt, laat de beleidsconsole u het transmissieprotocol voor om het even welke teruggekeerde blobs specificeren. (Zie beleidshulp.)
-
AEM Forms-service neemt een of meer documenten op als invoer.
-
-
de dienst SOAP eindpunt is niet Slim. Het gevormde protocol bepaalt het protocol van de documenttransmissie, en de gegevens zijn teruggekeerd op het overeenkomstige
BLOB
gebied. Als het SOAP eindpunt bijvoorbeeld is ingesteld op DIME, bevindt de geretourneerde blob zich in het veldblob.attachmentID
, ongeacht het verzendprotocol van een invoerdocument. -
anders. Als een service het documenttype niet als invoer gebruikt, worden de uitvoerdocumenten in het veld
BLOB.remoteURL
geretourneerd via het HTTP-protocol.
Zoals beschreven in de eerste voorwaarde, kunt u het transmissietype voor om het even welke teruggekeerde documenten verzekeren door het SOAP eindpunt URL met een achtervoegsel als volgt uit te breiden:
https://<your_serverhost>:<your_port>/soap/services/<service
name>?blob=base64|dime|mime|http|mtom|swaref
Hier is de correlatie tussen transmissietypen en het gebied waarvan u de gegevens verkrijgt:
- Base64 formaat: Plaats het
blob
achtervoegsel aanbase64
om de gegevens op hetBLOB.binaryData
gebied terug te keren. - MIME of DIME gehechtheid: plaats het
blob
achtervoegsel aanDIME
ofMIME
om de gegevens als overeenkomstig gehechtheidstype met gehechtheids terug te keren herkenningsteken op hetBLOB.attachmentID
gebied is teruggekeerd. Gebruik de merkgebonden API van het SOAP-framework om de gegevens in de bijlage te lezen. - Verre URL: Plaats het
blob
achtervoegsel aanhttp
om de gegevens op de toepassingsserver te houden en URL terug te keren die aan de gegevens op hetBLOB.remoteURL
gebied richt. - MTOM of SwaRef: plaats het
blob
achtervoegsel aanmtom
ofswaref
om de gegevens als overeenkomstig gehechtheidstype met gehechtheids terug te keren herkenningsteken opBLOB.MTOM
ofBLOB.swaRef
gebieden is teruggekeerd. Gebruik de native API van het SOAP-framework om de gegevens in de bijlage te lezen.
BLOB
-object vult door de setBinaryData
-methode aan te roepen. Anders is het mogelijk dat een OutOfMemory
-uitzondering optreedt.OutOfMemory
-uitzondering.MTOM transmissie van base64-Gecodeerde byteseries
Naast het object BLOB
ondersteunt het MTOM-protocol alle byte-arrayparameters of byte-arrayvelden van een complex type. Dit betekent dat client-SOAP frameworks die MTOM ondersteunen, elk xsd:base64Binary
-element kunnen verzenden als een MTOM-bijlage (in plaats van een base64-gecodeerde tekst). AEM Forms SOAP eindpunten kunnen dit type byte-array-codering lezen. De AEM Forms-service retourneert echter altijd een byte-arraytype als een base64-gecodeerde tekst. De bytearray-parameters van de uitvoer bieden geen ondersteuning voor MTOM.
AEM Forms-services die een grote hoeveelheid binaire gegevens retourneren, gebruiken het type Document/BLOB in plaats van het type byte-array. Het documenttype is veel efficiënter voor het verzenden van grote hoeveelheden gegevens.
Webservicetypen web-service-data-types
In de volgende tabel worden de gegevenstypen van Java weergegeven en het overeenkomstige gegevenstype van de webservice.
java.lang.byte[]
xsd:base64Binary
java.lang.Boolean
xsd:boolean
java.util.Date
Het DATE
type, dat als volgt in de dienstWSDL wordt bepaald:
<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>
Als een AEM Forms-servicebewerking een java.util.Date
-waarde als invoer gebruikt, moet de SOAP clienttoepassing de datum doorgeven in het DATE.date
-veld. Als u in dit geval het veld DATE.calendar
instelt, treedt een runtime-uitzondering op. Als de service een java.util.Date
retourneert, wordt de datum geretourneerd in het veld DATE.date
.
java.util.Calendar
Het DATE
type, dat als volgt in de dienstWSDL wordt bepaald:
<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>
Als een AEM Forms-servicebewerking een java.util.Calendar
-waarde als invoer gebruikt, moet de SOAP clienttoepassing de datum doorgeven in het DATE.caledendar
-veld. Als u in dit geval het veld DATE.date
instelt, treedt een runtime-uitzondering op. Als de service een java.util.Calendar
retourneert, wordt de datum geretourneerd in het veld DATE.calendar
.
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
De apachesoap:Map
, die als volgt in een service-WSDL wordt gedefinieerd:
<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>
De Kaart wordt vertegenwoordigd als opeenvolging van sleutel/waardeparen.
java.lang.Object
$1
java.lang.Short
xsd:short
java.lang.String
xsd:string
org.w3c.dom.Document
Het type van XML, dat in de dienst WSDL als volgt wordt bepaald:
<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>
Als een AEM Forms-servicebewerking een org.w3c.dom.Document
-waarde accepteert, geeft u de XML-gegevens door in het XML.document
-veld.
Als u het veld XML.element
instelt, treedt een runtime-uitzondering op. Als de service een org.w3c.dom.Document
retourneert, worden de XML-gegevens geretourneerd in het veld XML.document
.
org.w3c.dom.Element
Het type van XML, dat in de dienst WSDL als volgt wordt bepaald:
<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>
Als een AEM Forms-servicebewerking een org.w3c.dom.Element
-invoer vereist, geeft u de XML-gegevens door in het veld XML.element
.
Als u het veld XML.document
instelt, treedt een runtime-uitzondering op. Als de service een org.w3c.dom.Element
retourneert, worden de XML-gegevens in het veld XML.element
geretourneerd.
Java-proxyklassen maken met JAX-WS creating-java-proxy-classes-using-jax-ws
U kunt JAX-WS gebruiken om een Forms-service-WSDL om te zetten in Java-proxyklassen. Met deze klassen kunt u AEM Forms-services aanroepen. Met Apache Ant kunt u een constructiescript maken waarmee Java-proxyklassen worden gegenereerd door te verwijzen naar een AEM Forms-service WSDL. U kunt JAX-WS-proxybestanden genereren door de volgende stappen uit te voeren:
-
Installeer Apache Ant op de clientcomputer. (Zie https://ant.apache.org/bindownload.cgi.)
- Voeg de binmap toe aan het klassepad.
- Stel de omgevingsvariabele
ANT_HOME
in op de map waarin u Ant hebt geïnstalleerd.
-
Installeer JDK 1.6 of later.
- Voeg de JDK bin-map toe aan het klassepad.
- Voeg de binmap JRE toe aan het klassepad. Dit vak staat in de map
[JDK_INSTALL_LOCATION]/jre
. - Stel de omgevingsvariabele
JAVA_HOME
in op de map waarin u de JDK hebt geïnstalleerd.
JDK 1.6 omvat het havenprogramma dat in het build.xml- dossier wordt gebruikt. JDK 1.5 omvat dat programma niet.
-
Installeer JAX-WS op de clientcomputer. (Zie Java API voor de Diensten van het Web van XML.)
-
Gebruik JAX-WS en Apache Ant om Java-proxyklassen te genereren. Maak een Ant-constructiescript om deze taak uit te voeren. Het volgende script is een voorbeeldscript voor Ant-build met de naam 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>
In dit Ant-constructiescript verwijst de eigenschap
url
naar de WSDL van de coderingsservice die op localhost wordt uitgevoerd. De eigenschappenusername
enpassword
moeten zijn ingesteld op een geldige gebruikersnaam en wachtwoord voor AEM formulieren. De URL bevat het kenmerklc_version
. Als u de optielc_version
niet opgeeft, kunt u geen nieuwe AEM Forms-servicebewerkingen aanroepen.note note NOTE Vervang EncryptionService
met de de dienstnaam van AEM Forms die u het gebruiken van de volmachtsklassen van Java wilt aanhalen. Als u bijvoorbeeld Java-proxyklassen wilt maken voor de service Rights Management, geeft u het volgende op:code language-java http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
-
Maak een BAT bestand om het Ant-constructiescript uit te voeren. De volgende opdracht kan worden gevonden in een BAT bestand dat verantwoordelijk is voor het uitvoeren van het Ant-constructiescript:
code language-java ant -buildfile "build.xml" wsdl
Plaats het bouwstijlmanuscript van de ANE in de folder C:\Program Files\Java\jaxws-ri\bin. Het script schrijft de JAVA-bestanden naar de ./classes. Het script genereert JAVA-bestanden die de service kunnen aanroepen.
-
Plaats de JAVA-bestanden in een JAR-bestand. Voer de volgende stappen uit als u werkt aan Eclipse:
- Maak een Java-project dat wordt gebruikt om de JAVA-proxybestanden in te pakken in een JAR-bestand.
- Maak een bronmap in het project.
- Maak een
com.adobe.idp.services
-pakket in de map Source. - Selecteer het
com.adobe.idp.services
-pakket en importeer de JAVA-bestanden vanuit de map adobe/idp/services naar het pakket. - Maak indien nodig een
org/apache/xml/xmlsoap
-pakket in de map Source. - Selecteer de bronmap en importeer de JAVA-bestanden vanuit de map org/apache/xml/xmlsoap.
- Stel het compatibiliteitsniveau van de Java-compiler in op 5.0 of hoger.
- Bouw het project.
- Exporteer het project als een JAR-bestand.
- Importeer dit JAR-bestand in het klassepad van een clientproject. Bovendien importeert u alle JAR-bestanden in <Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty.
note note NOTE Alle Java-webservices worden snel gestart (behalve de Forms-service) bij Programmeren met AEM formulieren. U maakt Java-proxybestanden met JAX-WS. Bovendien begint alle Java-webservice snel met SwaRef. (Zie het Aanhalen AEM Forms gebruikend SwaRef.)
zie ook
Java-proxyklassen maken met Apache Axis
AEM Forms aanroepen met Base64-codering
Java-proxyklassen maken met Apache Axis creating-java-proxy-classes-using-apache-axis
Met het hulpprogramma Apache Axis WSDL2Java kunt u een Forms-service converteren naar Java-proxyklassen. Met deze klassen kunt u Forms-servicebewerkingen aanroepen. Met Apache Ant kunt u Axis-bibliotheekbestanden genereren van een service-WSDL. U kunt Apache As bij URL https://ws.apache.org/axis/downloaden.
U kunt Java-bibliotheekbestanden van de as genereren door de volgende stappen uit te voeren:
-
Installeer Apache Ant op de clientcomputer. Het is beschikbaar in https://ant.apache.org/bindownload.cgi.
- Voeg de binmap toe aan het klassepad.
- Stel de omgevingsvariabele
ANT_HOME
in op de map waarin u Ant hebt geïnstalleerd.
-
Installeer Apache Axis 1.4 op de clientcomputer. Het is beschikbaar in https://ws.apache.org/axis/.
-
Opstelling de klassenweg om de dossiers van Axis JAR in uw cliënt van de Webdienst te gebruiken, zoals die in de installatie van de As instructies in https://ws.apache.org/axis/java/install.htmlwordt beschreven.
-
Gebruik Apache WSDL2Java in As om Java-proxyklassen te genereren. Maak een Ant-constructiescript om deze taak uit te voeren. Het volgende script is een voorbeeldscript voor Ant-build met de naam 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>
In dit Ant-constructiescript verwijst de eigenschap
url
naar de WSDL van de coderingsservice die op localhost wordt uitgevoerd. De eigenschappenusername
enpassword
moeten zijn ingesteld op een geldige gebruikersnaam en wachtwoord voor AEM formulieren. -
Maak een BAT bestand om het Ant-constructiescript uit te voeren. De volgende opdracht kan worden gevonden in een BAT bestand dat verantwoordelijk is voor het uitvoeren van het Ant-constructiescript:
code language-java ant -buildfile "build.xml" encryption-wsdl2java-client
De JAVA-bestanden worden naar de map C:\JavaFiles geschreven, zoals opgegeven door de eigenschap
output
. Als u de Forms-service wilt aanroepen, importeert u deze JAVA-bestanden in het klassepad.Deze bestanden behoren standaard tot een Java-pakket met de naam
com.adobe.idp.services
. U wordt aangeraden deze JAVA-bestanden in een JAR-bestand te plaatsen. Importeer vervolgens het JAR-bestand in het klassepad van de clienttoepassing.note note NOTE Er zijn verschillende manieren om .JAVA-bestanden in een JAR te plaatsen. Een manier is het gebruik van een Java IDE zoals Eclipse. Creeer een project van Java en creeer a com.adobe.idp.services
pakket (alle .JAVA dossiers behoren tot dit pakket). Importeer vervolgens alle .JAVA-bestanden in het pakket. Exporteer het project als een JAR-bestand. -
Wijzig de URL in de klasse
EncryptionServiceLocator
om het coderingstype op te geven. Als u bijvoorbeeld base64 wilt gebruiken, geeft u?blob=base64
op om ervoor te zorgen dat hetBLOB
-object binaire gegevens retourneert. In deEncryptionServiceLocator
-klasse wordt dus de volgende coderegel gezocht:code language-java http://localhost:8080/soap/services/EncryptionService;
en wijzig deze in:
code language-java http://localhost:8080/soap/services/EncryptionService?blob=base64;
-
Voeg de volgende Axis JAR-bestanden toe aan het klassepad van uw Java-project:
- activation.jar
- axis.jar
- commons-codec-1.3.jar
- commons-collections-3.1.jar
- commons-discovery.jar
- commons-logging.jar
- dom3-xml-apis-2.5.0.jar
- jai_imageio.jar
- jaxen-1,1-bèta-9.jar
- jaxrpc.jar
- log4j.jar
- mail.jar
- saaj.jar
- wsdl4j.jar
- xalan.jar
- xbean.jar
- xercesImpl.jar
Deze JAR-bestanden staan in de map
[install directory]/Adobe/Adobe Experience Manager Forms/sdk/lib/thirdparty
.
zie ook
Java-proxyklassen maken met JAX-WS
AEM Forms aanroepen met Base64-codering invoking-aem-forms-using-base64-encoding
U kunt de dienst van AEM Forms aanhalen gebruikend het coderen Base64. Base64-codering codeert bijlagen die worden verzonden met een aanroepingsverzoek voor een webservice. Dat wil zeggen dat BLOB
-gegevens Base64-gecodeerd zijn, niet het hele SOAP.
"Het aanroepen van AEM Forms gebruikend het Coderen Base64"bespreekt het aanhalen van het volgende kortstondige proces van AEM Forms genoemd MyApplication/EncryptDocument
door het gebruiken van het coderen Base64.
MyApplication/EncryptDocument
met Workbench. (Zie Gebruikend Workbench.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze handeling is gebaseerd op de bewerking
SetValue
. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze handeling is gebaseerd op de bewerking
PasswordEncryptPDF
. Het met wachtwoord gecodeerde PDF-document wordt geretourneerd in een procesvariabele met de naamoutDoc
.
Creërend een .NET cliëntassemblage die het coderen Base64 gebruikt creating-a-net-client-assembly-that-uses-base64-encoding
U kunt een .NET cliëntassemblage tot stand brengen om de dienst van Forms van een project van Microsoft Visual Studio .NET aan te halen. Om een .NET cliëntassemblage tot stand te brengen die base64 het coderen gebruikt, voer de volgende stappen uit:
- Maak een proxyklasse op basis van een AEM Forms-oproepings-URL.
- Creeer een project van Microsoft Visual Studio .NET dat de .NET cliëntassemblage veroorzaakt.
Creërend een volmachtsklasse
U kunt een volmachtsklasse tot stand brengen die wordt gebruikt om de .NET cliëntassemblage tot stand te brengen door een hulpmiddel te gebruiken dat Microsoft Visual Studio begeleidt. De naam van het hulpmiddel is wsdl.exe en het is in de installatiemap van Microsoft Visual Studio. Als u een proxyklasse wilt maken, opent u de opdrachtprompt en navigeert u naar de map die het bestand wsdl.exe bevat. Voor meer informatie over het hulpmiddel wsdl.exe, zie de Hulp MSDN.
Ga het volgende bevel bij de bevelherinnering in:
wsdl https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
Standaard maakt u met dit gereedschap een CS-bestand in dezelfde map die is gebaseerd op de naam van de WSDL. In deze situatie, leidt het tot een dossier van CS genoemd EncryptDocumentService.cs. Met dit CS-bestand kunt u een proxyobject maken waarmee u de service kunt aanroepen die is opgegeven in de oproepings-URL.
Wijzig de URL in de proxyklasse zodat deze ?blob=base64
bevat, zodat het BLOB
-object binaire gegevens retourneert. Zoek in de proxyklasse de volgende coderegel:
"https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument";
en wijzig deze in:
"https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";
Het aanhalen van AEM Forms die Base64 het Coderen sectie gebruikt MyApplication/EncryptDocument
als voorbeeld. Als u een .NET cliëntassemblage voor een andere dienst van Forms creeert, zorg ervoor dat u MyApplication/EncryptDocument
met de naam van de dienst vervangt.
ontwikkelend de .NET cliëntassemblage
Creeer een project van de Bibliotheek van de Klasse van Visual Studio dat een .NET cliëntassemblage veroorzaakt. Het CS- dossier dat u gebruikend wsdl.exe creeerde kan in dit project worden ingevoerd. Dit project veroorzaakt een Dll- dossier (de .NET cliëntassemblage) dat u in andere projecten van Visual Studio .NET kunt gebruiken om de dienst aan te halen.
- Start Microsoft Visual Studio .NET.
- Creeer een project van de Bibliotheek van de Klasse en noem het DocumentService.
- Importeer het CS-bestand dat u hebt gemaakt met wsdl.exe.
- In het menu van het Project, uitgezocht voeg Verwijzing toe.
- In Add de dialoogdoos van de Verwijzing, uitgezocht System.Web.Services.dll.
- Klik Uitgezocht en klik dan O.K. .
- Compileer en bouw het project.
MyApplication/EncryptDocument
dienst te verzenden.?blob=base64
aan URL in de volmachtsklasse toevoegde die wordt gebruikt om de .NET cliëntassemblage tot stand te brengen. Anders kunt u geen binaire gegevens ophalen uit het BLOB
-object.Verwijzend de .NET cliëntassemblage
Plaats uw onlangs gecreeerde .NET cliëntassemblage op de computer waar u uw cliënttoepassing ontwikkelt. Nadat u de .NET cliëntassemblage in een folder plaatst, kunt u het van een project van verwijzingen voorzien. Verwijs ook naar de System.Web.Services
bibliotheek van uw project. Als u niet naar deze bibliotheek van verwijzingen voorziet, kunt u niet de .NET cliëntassemblage gebruiken om de dienst aan te halen.
- In het menu van het Project, uitgezocht voeg Verwijzing toe.
- Klik .NET tabel.
- Klik doorbladeren en van het dossier de plaats bepalen DocumentService.dll.
- Klik Uitgezocht en klik dan O.K. .
het aanhalen van de dienst die een .NET cliëntassemblage gebruikt die Base64 het coderen gebruikt
U kunt de MyApplication/EncryptDocument
dienst (die in Workbench) werd gebouwd aanhalen gebruikend een .NET cliëntassemblage die Base64 het coderen gebruikt. Voer de volgende stappen uit om de service MyApplication/EncryptDocument
aan te roepen:
- Creeer een Microsoft .NET cliëntassemblage die de
MyApplication/EncryptDocument
dienst WSDL verbruikt. - Creeer een project van Microsoft .NET van de cliënt. Verwijs de de cliëntassemblage van Microsoft .NET in het cliëntproject. Verwijs ook naar
System.Web.Services
. - Gebruikend de Microsoft .NET cliëntassemblage, creeer een
MyApplication_EncryptDocumentService
voorwerp door zijn standaardaannemer aan te halen. - Stel de eigenschap
Credentials
van hetMyApplication_EncryptDocumentService
-object in met eenSystem.Net.NetworkCredential
-object. Geef binnen de constructorSystem.Net.NetworkCredential
een gebruikersnaam voor AEM formulier en het bijbehorende wachtwoord op. Plaats authentificatiewaarden om uw .NET cliënttoepassing toe te laten om SOAP berichten met AEM Forms met succes uit te wisselen. - Maak een
BLOB
-object met behulp van de constructor. HetBLOB
-object wordt gebruikt om een PDF-document op te slaan dat aan hetMyApplication/EncryptDocument
-proces is doorgegeven. - Maak een
System.IO.FileStream
-object door de constructor ervan aan te roepen. Geef een tekenreekswaarde door die staat voor de bestandslocatie van het PDF-document en de modus waarin het bestand moet worden geopend. - Maak een bytearray waarin de inhoud van het object
System.IO.FileStream
wordt opgeslagen. U kunt de grootte van de bytearray bepalen door de eigenschapLength
van het objectSystem.IO.FileStream
op te halen. - Vul de bytearray met streamgegevens door de methode
Read
van het objectSystem.IO.FileStream
aan te roepen. Geef de bytearray, de startpositie en de streamlengte door om te lezen. - Vul het object
BLOB
door de eigenschapbinaryData
ervan toe te wijzen met de inhoud van de bytearray. - Roep het
MyApplication/EncryptDocument
-proces aan door de methodeMyApplication_EncryptDocumentService
objectinvoke
aan te roepen en hetBLOB
-object dat het PDF-document bevat, door te geven. Dit proces retourneert een gecodeerd PDF-document binnen eenBLOB
-object. - Maak een
System.IO.FileStream
-object door de constructor ervan aan te roepen en een tekenreekswaarde door te geven die de bestandslocatie van het met wachtwoord gecodeerde document vertegenwoordigt. - Maak een bytearray waarin de gegevensinhoud wordt opgeslagen van het object
BLOB
dat door de methodeMyApplicationEncryptDocumentService
objectinvoke
wordt geretourneerd. Vul de bytearray met de waarde van het gegevenslidbinaryData
van het objectBLOB
. - Maak een
System.IO.BinaryWriter
-object door de constructor ervan aan te roepen en hetSystem.IO.FileStream
-object door te geven. - Schrijf de inhoud van de bytearray naar een PDF-bestand door de methode
Write
van het objectSystem.IO.BinaryWriter
aan te roepen en de bytearray door te geven.
Een service aanroepen met Java-proxyklassen en Base64-codering invoking-a-service-using-java-proxy-classes-and-base64-encoding
U kunt de dienst van AEM Forms aanhalen gebruikend de volmachtsklassen van Java en Base64. Voer de volgende stappen uit om de service MyApplication/EncryptDocument
aan te roepen met Java-proxyklassen:
-
Maak Java-proxyklassen met JAX-WS die de
MyApplication/EncryptDocument
service WSDL gebruiken. Gebruik het volgende eindpunt van WSDL:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
note note NOTE Vervang hiro-xp
met het IP adres van de J2EE toepassingsserver die AEM Forms ontvangen. -
Plaats de Java-proxyklassen die met JAX-WS zijn gemaakt in een JAR-bestand.
-
Neem het JAR-bestand voor Java-proxy's en de JAR-bestanden op in het volgende pad:
<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
in het klassenpad van uw Java-clientproject.
-
Maak een
MyApplicationEncryptDocumentService
-object met behulp van de constructor. -
Maak een
MyApplicationEncryptDocument
-object door de methodeMyApplicationEncryptDocumentService
objectgetEncryptDocument
aan te roepen. -
Stel de verbindingswaarden in die nodig zijn om AEM Forms aan te roepen door waarden toe te wijzen aan de volgende gegevensleden:
-
Wijs het eindpunt WSDL en het coderingstype toe aan het veld
ENDPOINT_ADDRESS_PROPERTY
van het objectjavax.xml.ws.BindingProvider
. Als u de serviceMyApplication/EncryptDocument
wilt aanroepen met behulp van Base64-codering, geeft u de volgende URL-waarde op:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64
-
Wijs de gebruiker van het AEM formulier toe aan het veld
USERNAME_PROPERTY
van het objectjavax.xml.ws.BindingProvider
. -
Wijs de bijbehorende wachtwoordwaarde toe aan het veld
PASSWORD_PROPERTY
van hetjavax.xml.ws.BindingProvider
-object.
In het volgende codevoorbeeld wordt deze toepassingslogica getoond:
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);
-
-
Haal het PDF-document op dat u naar het
MyApplication/EncryptDocument
-proces wilt verzenden door eenjava.io.FileInputStream
-object te maken met de constructor ervan. Geef een tekenreekswaarde door die de locatie van het PDF-document aangeeft. -
Maak een bytearray en vul deze met de inhoud van het
java.io.FileInputStream
-object. -
Maak een
BLOB
-object met behulp van de constructor. -
Vul het object
BLOB
door de methodesetBinaryData
ervan aan te roepen en de bytearray door te geven. HetBLOB
-objectsetBinaryData
is de methode die moet worden aangeroepen wanneer Base64-codering wordt gebruikt. Zie BLOB-objecten leveren in serviceaanvragen. -
Roep het
MyApplication/EncryptDocument
-proces aan door de methodeMyApplicationEncryptDocument
objectinvoke
aan te roepen. Geef hetBLOB
-object dat het PDF-document bevat door. De aanroepmethode retourneert eenBLOB
-object dat het gecodeerde PDF-document bevat. -
Maak een bytearray die het gecodeerde PDF-document bevat door de methode
getBinaryData
van het objectBLOB
aan te roepen. -
Sla het gecodeerde PDF-document op als een PDF-bestand. Schrijf de bytearray naar een bestand.
zie ook
Snel starten: een service aanroepen met Java-proxybestanden en Base64-codering
Creërend een .NET cliëntassemblage die het coderen Base64 gebruikt
AEM Forms aanroepen met MTOM invoking-aem-forms-using-mtom
U kunt de diensten van AEM Forms aanhalen door de standaardMTOM van de Webdienst te gebruiken. Deze norm bepaalt hoe binaire gegevens, zoals een document van PDF, over Internet of Intranet worden overgebracht. Een functie van MTOM is het gebruik van het element XOP:Include
. This element is defined in the XML Binary Optimized Packaging (XOP) specification to reference the binary attachments of a SOAP message.
Het gaat hier om het gebruik van MTOM om het volgende kortstondige AEM Forms-proces met de naam MyApplication/EncryptDocument
aan te roepen.
MyApplication/EncryptDocument
met Workbench. (Zie Gebruikend Workbench.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze handeling is gebaseerd op de bewerking
SetValue
. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze handeling is gebaseerd op de bewerking
PasswordEncryptPDF
. Het met wachtwoord gecodeerde PDF-document wordt geretourneerd in een procesvariabele met de naamoutDoc
.
OutOfMemory
-uitzondering.De bespreking hier is over het gebruiken van MTOM binnen een project van Microsoft .NET om de diensten van AEM Forms aan te halen. Het .NET gebruikte kader is 3.5, en het ontwikkelmilieu is Visual Studio 2008. Als u de Verbeteringen van de Dienst van het Web (WSE) hebt die op uw ontwikkelingscomputer worden geïnstalleerd, verwijder het. .NET 3.5 kader steunt een SOAP kader genoemd Communicatie van Vensters Stichting (WCF). Wanneer het aanhalen van AEM Forms door MTOM te gebruiken, slechts WCF (niet WSE) wordt gesteund.
Creërend een .NET project dat de dienst aanhaalt gebruikend MTOM creating-a-net-project-that-invokes-a-service-using-mtom
U kunt een Microsoft .NET project tot stand brengen dat de dienst van AEM Forms kan aanhalen gebruikend de Webdiensten. Eerst, creeer een project van Microsoft .NET door Visual Studio 2008 te gebruiken. Om de dienst van AEM Forms aan te halen, creeer de Verwijzing van de Dienst naar de dienst van AEM Forms die u binnen uw project wilt aanhalen. Wanneer u een Verwijzing van de Dienst creeert, specificeer een URL aan de dienst van AEM Forms:
http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
Vervang localhost
door het IP-adres van de J2EE-toepassingsserver die als host fungeert voor AEM Forms. Vervang MyApplication/EncryptDocument
door de naam van de AEM Forms-service die u wilt aanroepen. Als u bijvoorbeeld een Rights Management wilt aanroepen, geeft u het volgende op:
http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
De optie lc_version
zorgt ervoor dat AEM Forms-functionaliteit, zoals MTOM, beschikbaar is. Als u de optie lc_version
niet opgeeft, kunt u AEM Forms niet aanroepen met MTOM.
Nadat u een Verwijzing van de Dienst creeert, zijn de gegevenstypes verbonden aan de dienst van AEM Forms beschikbaar voor gebruik binnen uw .NET project. Om een .NET project tot stand te brengen dat de dienst van AEM Forms aanhaalt, voer de volgende stappen uit:
-
Creeer een .NET project gebruikend Microsoft Visual Studio 2008.
-
In het menu van het Project, uitgezocht voeg de Verwijzing van de Dienst toe.
-
In het de dialoogvakje van het Adres, specificeer WSDL aan de dienst van AEM Forms. Bijvoorbeeld:
code language-java http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
-
Klik gaan en klik dan O.K. .
Het aanhalen van de dienst die MTOM in een .NET project gebruikt invoking-a-service-using-mtom-in-a-net-project
Neem bijvoorbeeld het MyApplication/EncryptDocument
-proces dat een onbeveiligd PDF-document accepteert en een met een wachtwoord gecodeerd PDF-document retourneert. Voer de volgende stappen uit om het MyApplication/EncryptDocument
-proces (dat in Workbench is ingebouwd) aan te roepen met behulp van MTOM:
-
Maak een Microsoft .NET-project.
-
Maak een
MyApplication_EncryptDocumentClient
-object met de standaardconstructor. -
Maak een
MyApplication_EncryptDocumentClient.Endpoint.Address
-object met deSystem.ServiceModel.EndpointAddress
-constructor. Geef een tekenreekswaarde die de WSDL opgeeft door aan de AEM Forms-service en het coderingstype:code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
U hoeft het attribuut
lc_version
niet te gebruiken. Dit kenmerk wordt gebruikt wanneer u een serviceverwijzing maakt. Zorg er echter voor dat u?blob=mtom
opgeeft.note note NOTE Vervang hiro-xp
met het IP adres van de J2EE toepassingsserver die AEM Forms ontvangen. -
Maak een
System.ServiceModel.BasicHttpBinding
-object door de waarde van hetEncryptDocumentClient.Endpoint.Binding
-gegevenslid op te halen. De geretourneerde waarde wordt gecast naarBasicHttpBinding
. -
Stel het gegevenslid
MessageEncoding
van hetSystem.ServiceModel.BasicHttpBinding
-object in opWSMessageEncoding.Mtom
. Deze waarde zorgt ervoor dat MTOM wordt gebruikt. -
Laat basisauthentificatie van HTTP door de volgende taken uit te voeren toe:
- Wijs de gebruikersnaam van het AEM aan het gegevenslid
MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName
toe. - Wijs de overeenkomstige wachtwoordwaarde toe aan het gegevenslid
MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password
. - Wijs de constante waarde
HttpClientCredentialType.Basic
toe aan het gegevenslidBasicHttpBindingSecurity.Transport.ClientCredentialType
. - Wijs de constante waarde
BasicHttpSecurityMode.TransportCredentialOnly
toe aan het gegevenslidBasicHttpBindingSecurity.Security.Mode
.
In het volgende codevoorbeeld worden deze taken getoond.
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;
- Wijs de gebruikersnaam van het AEM aan het gegevenslid
-
Maak een
BLOB
-object met behulp van de constructor. HetBLOB
-object wordt gebruikt om een PDF-document op te slaan dat aan hetMyApplication/EncryptDocument
-proces wordt doorgegeven. -
Maak een
System.IO.FileStream
-object door de constructor ervan aan te roepen. Geef een tekenreekswaarde door die staat voor de bestandslocatie van het PDF-document en de modus waarin het bestand moet worden geopend. -
Maak een bytearray waarin de inhoud van het object
System.IO.FileStream
wordt opgeslagen. U kunt de grootte van de bytearray bepalen door de eigenschapLength
van het objectSystem.IO.FileStream
op te halen. -
Vul de bytearray met streamgegevens door de methode
Read
van het objectSystem.IO.FileStream
aan te roepen. Geef de bytearray, de startpositie en de streamlengte door om te lezen. -
Vul het
BLOB
-object door hetMTOM
-gegevenslid toe te wijzen aan de inhoud van de bytearray. -
Roep het
MyApplication/EncryptDocument
-proces aan door de methodeMyApplication_EncryptDocumentClient
objectinvoke
aan te roepen. Geef hetBLOB
-object dat het PDF-document bevat door. Dit proces retourneert een gecodeerd PDF-document binnen eenBLOB
-object. -
Maak een
System.IO.FileStream
-object door de constructor ervan aan te roepen en een tekenreekswaarde door te geven die de bestandslocatie van het beveiligde PDF-document vertegenwoordigt. -
Maak een bytearray waarin de gegevensinhoud wordt opgeslagen van het object
BLOB
dat door de methodeinvoke
is geretourneerd. Vul de bytearray met de waarde van het gegevenslidMTOM
van het objectBLOB
. -
Maak een
System.IO.BinaryWriter
-object door de constructor ervan aan te roepen en hetSystem.IO.FileStream
-object door te geven. -
Schrijf de inhoud van de bytearray naar een PDF-bestand door de methode
Write
van het objectSystem.IO.BinaryWriter
aan te roepen en de bytearray door te geven.
zie ook
Snel Begin: Het aanhalen van de dienst die MTOM in een .NET project gebruikt
Toegang tot meerdere services via webservices
Een ASP.NET-webtoepassing maken die een menselijk-centrisch proces van lange duur oproept
AEM Forms aanroepen met SwaRef invoking-aem-forms-using-swaref
U kunt de diensten van AEM Forms aanhalen gebruikend SwaRef. De inhoud van het XML-element wsi:swaRef
wordt verzonden als een bijlage binnen een SOAP die de verwijzing naar de bijlage opslaat. Wanneer het aanhalen van de dienst van Forms door SwaRef te gebruiken, creeer de volmachtsklassen van Java door Java API voor de Diensten van het Web van XML te gebruiken (JAX-WS). (Zie Java API voor de Diensten van het Web van XML.)
De discussie gaat hier over het aanroepen van het volgende kortstondige Forms-proces met de naam MyApplication/EncryptDocument
door gebruik te maken van SwaRef.
MyApplication/EncryptDocument
met Workbench. (Zie Gebruikend Workbench.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze handeling is gebaseerd op de bewerking
SetValue
. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze handeling is gebaseerd op de bewerking
PasswordEncryptPDF
. Het met wachtwoord gecodeerde PDF-document wordt geretourneerd in een procesvariabele met de naamoutDoc
.
Hieronder wordt beschreven hoe u Forms-services kunt aanroepen met SwaRef in een Java-clienttoepassing. De Java-toepassing gebruikt proxyklassen die met JAX-WS zijn gemaakt.
Roep de dienst aan gebruikend JAX-WS bibliotheekdossiers die SwaRef gebruiken invoke-a-service-using-jax-ws-library-files-that-use-swaref
Voer de volgende stappen uit om het MyApplication/EncryptDocument
-proces aan te roepen met Java-proxybestanden die zijn gemaakt met JAX-WS en SwaRef:
-
Maak Java-proxyklassen met JAX-WS die de
MyApplication/EncryptDocument
service WSDL gebruiken. Gebruik het volgende eindpunt van WSDL:code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
Voor informatie, zie Creërend de volmachtsklassen van Java gebruikend JAX-WS.
note note NOTE Vervang hiro-xp
met het IP adres van de J2EE toepassingsserver die AEM Forms ontvangen. -
Plaats de Java-proxyklassen die met JAX-WS zijn gemaakt in een JAR-bestand.
-
Neem het JAR-bestand voor Java-proxy's en de JAR-bestanden op in het volgende pad:
<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
in het klassenpad van uw Java-clientproject.
-
Maak een
MyApplicationEncryptDocumentService
-object met behulp van de constructor. -
Maak een
MyApplicationEncryptDocument
-object door de methodeMyApplicationEncryptDocumentService
objectgetEncryptDocument
aan te roepen. -
Stel de verbindingswaarden in die nodig zijn om AEM Forms aan te roepen door waarden toe te wijzen aan de volgende gegevensleden:
-
Wijs het eindpunt WSDL en het coderingstype toe aan het veld
ENDPOINT_ADDRESS_PROPERTY
van het objectjavax.xml.ws.BindingProvider
. Als u de serviceMyApplication/EncryptDocument
wilt aanroepen met SwaRef-codering, geeft u de volgende URL-waarde op:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref
-
Wijs de gebruiker van het AEM formulier toe aan het veld
USERNAME_PROPERTY
van het objectjavax.xml.ws.BindingProvider
. -
Wijs de bijbehorende wachtwoordwaarde toe aan het veld
PASSWORD_PROPERTY
van hetjavax.xml.ws.BindingProvider
-object.
In het volgende codevoorbeeld wordt deze toepassingslogica getoond:
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);
-
-
Haal het PDF-document op dat u naar het
MyApplication/EncryptDocument
-proces wilt verzenden door eenjava.io.File
-object te maken met de constructor ervan. Geef een tekenreekswaarde door die de locatie van het PDF-document aangeeft. -
Maak een
javax.activation.DataSource
-object met deFileDataSource
-constructor. Geef het objectjava.io.File
door. -
Maak een
javax.activation.DataHandler
-object door de constructor ervan te gebruiken en hetjavax.activation.DataSource
-object door te geven. -
Maak een
BLOB
-object met behulp van de constructor. -
Vul het object
BLOB
door de methodesetSwaRef
ervan aan te roepen en het objectjavax.activation.DataHandler
door te geven. -
Roep het
MyApplication/EncryptDocument
-proces aan door de methodeMyApplicationEncryptDocument
objectinvoke
aan te roepen en hetBLOB
-object dat het PDF-document bevat, door te geven. De aanroepmethode retourneert eenBLOB
-object dat een gecodeerd PDF-document bevat. -
Vul een
javax.activation.DataHandler
-object door de methodeBLOB
objectgetSwaRef
aan te roepen. -
Zet het
javax.activation.DataHandler
-object om in eenjava.io.InputSteam
-instantie door de methodegetInputStream
van hetjavax.activation.DataHandler
-object aan te roepen. -
Schrijf de
java.io.InputSteam
-instantie naar een PDF-bestand dat het gecodeerde PDF-document vertegenwoordigt.
zie ook
Snel starten: Een service aanroepen met SwaRef in een Java-project
AEM Forms aanroepen met behulp van BLOB-gegevens via HTTP invoking-aem-forms-using-blob-data-over-http
U kunt AEM Forms-services aanroepen met behulp van webservices en BLOB-gegevens doorgeven via HTTP. Het overbrengen van BLOB-gegevens via HTTP is een alternatieve techniek in plaats van het gebruik van base64-codering, DIME of MIME. Bijvoorbeeld, kunt u gegevens over HTTP in een Microsoft .NET project overgaan dat de Verbetering 3.0 van de Dienst van het Web gebruikt, die geen DIME of MIME steunt. Wanneer u BLOB-gegevens via HTTP gebruikt, worden de invoergegevens geüpload voordat de AEM Forms-service wordt aangeroepen.
"AEM Forms aanroepen met behulp van BLOB-gegevens via HTTP" bespreekt het aanroepen van het volgende kortstondige AEM Forms-proces met de naam MyApplication/EncryptDocument
door BLOB-gegevens via HTTP door te geven.
MyApplication/EncryptDocument
met Workbench. (Zie Gebruikend Workbench.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze handeling is gebaseerd op de bewerking
SetValue
. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze handeling is gebaseerd op de bewerking
PasswordEncryptPDF
. Het met wachtwoord gecodeerde PDF-document wordt geretourneerd in een procesvariabele met de naamoutDoc
.
Creërend een .NET cliëntassemblage die gegevens over HTTP gebruikt creating-a-net-client-assembly-that-uses-data-over-http
Om een cliëntassemblage tot stand te brengen die gegevens over HTTP gebruikt, volg het proces dat in wordt gespecificeerd het Aanhalen van AEM Forms gebruikend het coderen Base64. Wijzig de URL in de proxyklasse echter zodanig dat deze ?blob=http
in plaats van ?blob=base64
bevat. Deze actie zorgt ervoor dat de gegevens over HTTP worden overgegaan. Zoek in de proxyklasse de volgende coderegel:
"http://localhost:8080/soap/services/MyApplication/EncryptDocument";
en wijzig deze in:
"http://localhost:8080/soap/services/MyApplication/EncryptDocument?blob=http";
Verwijzend de .NET assemblage ClienMyApplication/EncryptDocument
Plaats uw nieuwe .NET cliëntassemblage op de computer waar u uw cliënttoepassing ontwikkelt. Nadat u de .NET cliëntassemblage in een folder plaatst, kunt u het van een project van verwijzingen voorzien. Verwijs naar de System.Web.Services
bibliotheek van uw project. Als u niet naar deze bibliotheek van verwijzingen voorziet, kunt u niet de .NET cliëntassemblage gebruiken om de dienst aan te halen.
- In het menu van het Project, uitgezocht voeg Verwijzing toe.
- Klik .NET tabel.
- Klik doorbladeren en van het dossier de plaats bepalen DocumentService.dll.
- Klik Uitgezocht en klik dan O.K. .
aanroepend de dienst die een .NET cliëntassemblage gebruikt die BLOB gegevens over HTTP gebruikt
U kunt de MyApplication/EncryptDocument
dienst (die in Workbench) werd gebouwd aanhalen gebruikend een .NET cliëntassemblage die gegevens over HTTP gebruikt. Voer de volgende stappen uit om de service MyApplication/EncryptDocument
aan te roepen:
- Creeer de .NET cliëntassemblage.
- Verwijs naar de Microsoft .NET cliëntassemblage. Creeer een project van Microsoft .NET van de cliënt. Verwijs de de cliëntassemblage van Microsoft .NET in het cliëntproject. Verwijs ook naar
System.Web.Services
. - Gebruikend de Microsoft .NET cliëntassemblage, creeer een
MyApplication_EncryptDocumentService
voorwerp door zijn standaardaannemer aan te halen. - Stel de eigenschap
Credentials
van hetMyApplication_EncryptDocumentService
-object in met eenSystem.Net.NetworkCredential
-object. Geef binnen de constructorSystem.Net.NetworkCredential
een gebruikersnaam voor AEM formulier en het bijbehorende wachtwoord op. Plaats authentificatiewaarden om uw .NET cliënttoepassing toe te laten om SOAP berichten met AEM Forms met succes uit te wisselen. - Maak een
BLOB
-object met behulp van de constructor. HetBLOB
-object wordt gebruikt om gegevens door te geven aan hetMyApplication/EncryptDocument
-proces. - Wijs een koordwaarde aan het
remoteURL
gegevenslid van hetBLOB
voorwerp toe dat de plaats van URI van een document van PDF om tot deMyApplication/EncryptDocument
dienst specificeert over te gaan. - Roep het
MyApplication/EncryptDocument
-proces aan door de methodeMyApplication_EncryptDocumentService
objectinvoke
aan te roepen en hetBLOB
-object door te geven. Dit proces retourneert een gecodeerd PDF-document binnen eenBLOB
-object. - Maak een
System.UriBuilder
-object door de constructor ervan te gebruiken en de waarde van het gegevenslid van het geretourneerdeBLOB
objectremoteURL
door te geven. - Zet het object
System.UriBuilder
om in een objectSystem.IO.Stream
. (Het snelle Begin C# dat deze lijst volgt illustreert hoe te om deze taak uit te voeren.) - Maak een bytearray en vul deze met de gegevens in het
System.IO.Stream
-object. - Maak een
System.IO.BinaryWriter
-object door de constructor ervan aan te roepen en hetSystem.IO.FileStream
-object door te geven. - Schrijf de inhoud van de bytearray naar een PDF-bestand door de methode
Write
van het objectSystem.IO.BinaryWriter
aan te roepen en de bytearray door te geven.
Een service aanroepen met Java-proxyklassen en BLOB-gegevens via HTTP invoking-a-service-using-java-proxy-classes-and-blob-data-over-http
U kunt een AEM Forms-service aanroepen met Java-proxyklassen en BLOB-gegevens via HTTP. Voer de volgende stappen uit om de service MyApplication/EncryptDocument
aan te roepen met Java-proxyklassen:
-
Maak Java-proxyklassen met JAX-WS die de
MyApplication/EncryptDocument
service WSDL gebruiken. Gebruik het volgende eindpunt van WSDL:code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
Voor informatie, zie Creërend de volmachtsklassen van Java gebruikend JAX-WS.
note note NOTE Vervang hiro-xp
met het IP adres van de J2EE toepassingsserver die AEM Forms ontvangen. -
Plaats de Java-proxyklassen die met JAX-WS zijn gemaakt in een JAR-bestand.
-
Neem het JAR-bestand voor Java-proxy's en de JAR-bestanden op in het volgende pad:
<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
in het klassenpad van uw Java-clientproject.
-
Maak een
MyApplicationEncryptDocumentService
-object met behulp van de constructor. -
Maak een
MyApplicationEncryptDocument
-object door de methodeMyApplicationEncryptDocumentService
objectgetEncryptDocument
aan te roepen. -
Stel de verbindingswaarden in die nodig zijn om AEM Forms aan te roepen door waarden toe te wijzen aan de volgende gegevensleden:
-
Wijs het eindpunt WSDL en het coderingstype toe aan het veld
ENDPOINT_ADDRESS_PROPERTY
van het objectjavax.xml.ws.BindingProvider
. Als u de serviceMyApplication/EncryptDocument
wilt aanroepen met BLOB via HTTP-codering, geeft u de volgende URL-waarde op:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http
-
Wijs de gebruiker van het AEM formulier toe aan het veld
USERNAME_PROPERTY
van het objectjavax.xml.ws.BindingProvider
. -
Wijs de bijbehorende wachtwoordwaarde toe aan het veld
PASSWORD_PROPERTY
van hetjavax.xml.ws.BindingProvider
-object.
In het volgende codevoorbeeld wordt deze toepassingslogica getoond:
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);
-
-
Maak een
BLOB
-object met behulp van de constructor. -
Vul het object
BLOB
door de methodesetRemoteURL
ervan aan te roepen. Geef een tekenreekswaarde door die de URI-locatie opgeeft van een PDF-document dat moet worden doorgegeven aan deMyApplication/EncryptDocument
-service. -
Roep het
MyApplication/EncryptDocument
-proces aan door de methodeMyApplicationEncryptDocument
objectinvoke
aan te roepen en hetBLOB
-object dat het PDF-document bevat, door te geven. Dit proces retourneert een gecodeerd PDF-document binnen eenBLOB
-object. -
Maak een bytearray om de gegevensstroom op te slaan die het gecodeerde PDF-document vertegenwoordigt. Roep de methode
getRemoteURL
van hetBLOB
-object aan (gebruik hetBLOB
-object dat door de methodeinvoke
wordt geretourneerd). -
Maak een
java.io.File
-object met behulp van de constructor. Dit object staat voor het gecodeerde PDF-document. -
Maak een
java.io.FileOutputStream
-object door de constructor ervan te gebruiken en hetjava.io.File
-object door te geven. -
Roep de methode
write
van het objectjava.io.FileOutputStream
aan. Geef de bytearray door die de gegevensstroom bevat die het gecodeerde PDF-document vertegenwoordigt.
AEM Forms aanroepen met DIME invoking-aem-forms-using-dime
U kunt AEM Forms-services aanroepen met behulp van SOAP met bijlagen. AEM Forms ondersteunt zowel MIME- als DIME-webservicenormen. Met DIME kunt u binaire bijlagen verzenden, zoals PDF-documenten, samen met aanroepingsverzoeken in plaats van de bijlage te coderen. Het aanhalen van AEM Forms die sectie gebruikt van DIME bespreekt het aanhalen van het volgende kortstondige proces van AEM Forms genoemd MyApplication/EncryptDocument
gebruikend DIME.
Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze handeling is gebaseerd op de bewerking
SetValue
. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze handeling is gebaseerd op de bewerking
PasswordEncryptPDF
. Het met wachtwoord gecodeerde PDF-document wordt geretourneerd in een procesvariabele met de naamoutDoc
.
Dit proces is niet gebaseerd op een bestaand AEM Forms-proces. Als u de codevoorbeelden wilt volgen, maakt u een proces met de naam MyApplication/EncryptDocument
met Workbench. (Zie Gebruikend Workbench.)
Creërend een .NET project dat DIME gebruikt creating-a-net-project-that-uses-dime
Om een .NET project tot stand te brengen dat de dienst van Forms kan aanhalen gebruikend DIME, voer de volgende taken uit:
- Installeer de Verbeteringen 2.0 van de Diensten van het Web op uw ontwikkelingscomputer.
- Van binnen uw .NET project, creeer een Webverwijzing naar de dienst van FormsAEM Forms.
Installing de Verbeteringen 2.0 van de Diensten van het Web
Installeer de Verbeteringen 2.0 van de Diensten van het Web op uw ontwikkelingscomputer en integreer het met Microsoft Visual Studio .NET. U kunt de Verbeteringen 2.0 van de Diensten van het Web van het Centrum van de Download van Microsoft downloaden.
Van deze Web-pagina, onderzoek naar de Verbeteringen van de Diensten van het Web 2.0 en download het op uw ontwikkelingscomputer. Met deze download plaatst u een bestand met de naam Microsoft WSE 2.0 SPI.msi op uw computer. Voer het installatieprogramma uit en volg de online instructies.
Creërend een Webverwijzing naar de dienst van AEM Forms
Nadat u de Verbeteringen 2.0 van de Diensten van het Web op uw ontwikkelingscomputer installeert en een project van Microsoft .NET creeert, creeer een Webverwijzing naar de dienst van Forms. Als u bijvoorbeeld een webverwijzing naar het MyApplication/EncryptDocument
-proces wilt maken en ervan uitgaande dat Forms op de lokale computer is geïnstalleerd, geeft u de volgende URL op:
http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL
Nadat u een Webverwijzing creeert, zijn de volgende twee types van volmachtsgegevens beschikbaar voor u binnen uw .NET project te gebruiken: EncryptDocumentService
en EncryptDocumentServiceWse
. Als u het MyApplication/EncryptDocument
-proces wilt aanroepen met DIME, gebruikt u het EncryptDocumentServiceWse
-type.
Verwijzing de bibliotheek van WSE
- Selecteer Referentie toevoegen in het menu Project.
- Selecteer Microsoft.Web.Services2.dll in het dialoogvenster Referentie toevoegen.
- Selecteer System.Web.Services.dll.
- Klik op Selecteren en vervolgens op OK.
creeer een Webverwijzing naar de dienst van Forms
- Selecteer Webverwijzing toevoegen in het menu Project.
- Geef in het dialoogvenster URL de URL voor de Forms-service op.
- Klik op Ga en vervolgens op Referentie toevoegen.
aanroepend de dienst die DIME in een .NET project gebruikt
U kunt een Forms-service aanroepen met DIME. Neem bijvoorbeeld het MyApplication/EncryptDocument
-proces dat een onbeveiligd PDF-document accepteert en een met een wachtwoord gecodeerd PDF-document retourneert. Voer de volgende stappen uit om het MyApplication/EncryptDocument
-proces met DIME aan te roepen:
-
Creeer een Microsoft .NET project dat u toelaat om de dienst van Forms aan te halen gebruikend DIME. Zorg ervoor dat u de Verbeteringen 2.0 van de Diensten van het Web omvat en creeer een Webverwijzing naar de dienst van AEM Forms.
-
Nadat u een webverwijzing naar het
MyApplication/EncryptDocument
-proces hebt ingesteld, maakt u eenEncryptDocumentServiceWse
-object met behulp van de standaardconstructor. -
Stel het gegevenslid
Credentials
van hetEncryptDocumentServiceWse
-object in met eenSystem.Net.NetworkCredential
-waarde die de gebruikersnaam en het wachtwoord voor het AEM formulier opgeeft. -
Maak een
Microsoft.Web.Services2.Dime.DimeAttachment
-object door de constructor ervan te gebruiken en de volgende waarden door te geven:- Een koordwaarde die een waarde GUID specificeert. U kunt een waarde GUID verkrijgen door de
System.Guid.NewGuid.ToString
methode aan te halen. - Een tekenreekswaarde die het inhoudstype opgeeft. Voor dit proces is een PDF-document vereist. Geef daarom
application/pdf
op. - Een opsommingswaarde
TypeFormat
. GeefTypeFormat.MediaType
op. - Een tekenreekswaarde die de locatie opgeeft van het PDF-document dat aan het AEM Forms-proces moet worden doorgegeven.
- Een koordwaarde die een waarde GUID specificeert. U kunt een waarde GUID verkrijgen door de
-
Maak een
BLOB
-object met behulp van de constructor. -
Voeg de DIME-bijlage toe aan het
BLOB
-object door de gegevenslidwaarde vanMicrosoft.Web.Services2.Dime.DimeAttachment
objectId
toe te wijzen aan het gegevenslid vanBLOB
objectattachmentID
. -
Roep de methode
EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add
aan en geef het objectMicrosoft.Web.Services2.Dime.DimeAttachment
door. -
Roep het
MyApplication/EncryptDocument
-proces aan door de methodeEncryptDocumentServiceWse
objectinvoke
aan te roepen en hetBLOB
-object dat de DIME-bijlage bevat, door te geven. Dit proces retourneert een gecodeerd PDF-document binnen eenBLOB
-object. -
Haal de waarde van de bijlage-id op door de waarde op te halen van het gegevenslid
attachmentID
van het geretourneerdeBLOB
-object. -
Doorloop de bijlagen in
EncryptDocumentServiceWse.ResponseSoapContext.Attachments
en gebruik de waarde van de bijlage-id om het versleutelde PDF-document te verkrijgen. -
Haal een
System.IO.Stream
-object op door de waarde van het gegevenslid van hetAttachment
objectStream
op te halen. -
Maak een bytearray en geef die bytearray door aan de methode
Read
van het objectSystem.IO.Stream
. Met deze methode wordt de bytearray gevuld met een gegevensstroom die het gecodeerde PDF-document vertegenwoordigt. -
Maak een
System.IO.FileStream
-object door de constructor ervan aan te roepen en een tekenreekswaarde door te geven die een locatie van een PDF-bestand vertegenwoordigt. Dit object staat voor het gecodeerde PDF-document. -
Maak een
System.IO.BinaryWriter
-object door de constructor ervan aan te roepen en hetSystem.IO.FileStream
-object door te geven. -
Schrijf de inhoud van de bytearray naar het PDF-bestand door de methode
Write
van het objectSystem.IO.BinaryWriter
aan te roepen en de bytearray door te geven.
Apache Axis Java-proxyklassen maken die gebruikmaken van DIME creating-apache-axis-java-proxy-classes-that-use-dime
Met het hulpprogramma Apache Axis WSDL2Java kunt u een service-WSDL converteren naar Java-proxyklassen, zodat u servicebewerkingen kunt activeren. Met Apache Ant kunt u Axis-bibliotheekbestanden genereren vanuit een AEM Forms-service WSDL waarmee u de service kunt aanroepen. (Zie Creërend de volmachtsklassen van Java gebruikend de As van Apache.)
Met het hulpprogramma Apache Axis WSDL2Java worden JAVA-bestanden gegenereerd die methoden bevatten die worden gebruikt om SOAP aanvragen naar een service te verzenden. SOAP verzoeken die door de dienst worden ontvangen worden gedecodeerd door de as-geproduceerde bibliotheken en terug in de methodes en de argumenten teruggezet.
Voer de volgende stappen uit om de service MyApplication/EncryptDocument
aan te roepen (die in Workbench is ingebouwd) met behulp van door as gegenereerde bibliotheekbestanden en DIME:
-
Maak Java-proxyklassen die de
MyApplication/EncryptDocument
service WSDL gebruiken met Apache Axis. (Zie Creërend de volmachtsklassen van Java gebruikend de As van Apache.) -
Neem de Java-proxyklassen op in het klassepad.
-
Maak een
MyApplicationEncryptDocumentServiceLocator
-object met behulp van de constructor. -
Maak een
URL
-object door de constructor ervan te gebruiken en een tekenreekswaarde door te geven die de WSDL-definitie van de AEM Forms-service aangeeft. Zorg ervoor dat u?blob=dime
opgeeft aan het einde van de URL van het SOAP eindpunt. Gebruik bijvoorbeeldcode language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
-
Maak een
EncryptDocumentSoapBindingStub
-object door de constructor ervan aan te roepen en hetMyApplicationEncryptDocumentServiceLocator
-object en hetURL
-object door te geven. -
Stel de gebruikersnaam en het wachtwoord voor AEM formulieren in door de methoden
setUsername
ensetPassword
van het objectEncryptDocumentSoapBindingStub
aan te roepen.code language-java encryptionClientStub.setUsername("administrator"); encryptionClientStub.setPassword("password");
-
Haal het PDF-document op dat u naar de
MyApplication/EncryptDocument
-service wilt verzenden door eenjava.io.File
-object te maken. Geef een tekenreekswaarde door die de locatie van het PDF-document aangeeft. -
Maak een
javax.activation.DataHandler
-object door de constructor ervan te gebruiken en eenjavax.activation.FileDataSource
-object door te geven. Hetjavax.activation.FileDataSource
-object kan worden gemaakt door de constructor ervan te gebruiken en hetjava.io.File
-object door te geven dat het PDF-document vertegenwoordigt. -
Maak een
org.apache.axis.attachments.AttachmentPart
-object door de constructor ervan te gebruiken en hetjavax.activation.DataHandler
-object door te geven. -
Koppel de bijlage door de methode
addAttachment
van het objectEncryptDocumentSoapBindingStub
aan te roepen en het objectorg.apache.axis.attachments.AttachmentPart
door te geven. -
Maak een
BLOB
-object met behulp van de constructor. Vul hetBLOB
-object met de waarde van de bijlage-id door de methodeBLOB
objectsetAttachmentID
aan te roepen en de waarde van de bijlage-id door te geven. Deze waarde kan worden verkregen door de methodegetContentId
van het objectorg.apache.axis.attachments.AttachmentPart
aan te roepen. -
Roep het
MyApplication/EncryptDocument
-proces aan door de methodeEncryptDocumentSoapBindingStub
objectinvoke
aan te roepen. Geef hetBLOB
-object door dat de DIME-bijlage bevat. Dit proces retourneert een gecodeerd PDF-document binnen eenBLOB
-object. -
Haal de waarde van de bijlage-id op door de methode
getAttachmentID
van het geretourneerdeBLOB
-object aan te roepen. Deze methode retourneert een tekenreekswaarde die de id-waarde van de geretourneerde bijlage vertegenwoordigt. -
Haal de bijlagen op door de methode
getAttachments
van het objectEncryptDocumentSoapBindingStub
aan te roepen. Deze methode retourneert een arrayObjects
die de bijlagen vertegenwoordigt. -
Doorloop de bijlagen (de array
Object
) en gebruik de waarde van de bijlage-id om het gecodeerde PDF-document te verkrijgen. Elk element is eenorg.apache.axis.attachments.AttachmentPart
-object. -
Haal het
javax.activation.DataHandler
-object dat aan de bijlage is gekoppeld op door de methodeorg.apache.axis.attachments.AttachmentPart
objectgetDataHandler
aan te roepen. -
Haal een
java.io.FileStream
-object op door de methodejavax.activation.DataHandler
objectgetInputStream
aan te roepen. -
Maak een bytearray en geef die bytearray door aan de methode
read
van het objectjava.io.FileStream
. Met deze methode wordt de bytearray gevuld met een gegevensstroom die het gecodeerde PDF-document vertegenwoordigt. -
Maak een
java.io.File
-object met behulp van de constructor. Dit object staat voor het gecodeerde PDF-document. -
Maak een
java.io.FileOutputStream
-object door de constructor ervan te gebruiken en hetjava.io.File
-object door te geven. -
Roep de methode
write
van het objectjava.io.FileOutputStream
aan en geef de bytearray door die de gegevensstroom bevat die het gecodeerde PDF-document vertegenwoordigt.
zie ook
Snel starten: Een service aanroepen met DIME in een Java-project
Op SAML gebaseerde verificatie gebruiken using-saml-based-authentication
AEM Forms ondersteunt verschillende verificatiemodi voor webservices bij het aanroepen van services. Één authentificatiemodus specificeert zowel een gebruikersnaam als wachtwoordwaarde gebruikend een basisvergunningskopbal in de vraag van de Webdienst. AEM Forms ondersteunt ook SAML-verificatie op basis van bevestiging. Wanneer een clienttoepassing een AEM Forms-service aanroept met behulp van een webservice, kan de clienttoepassing op een van de volgende manieren verificatiegegevens opgeven:
- Bevoegdheden doorgeven als onderdeel van de basisautorisatie
- Gebruikersnaam-token doorgeven als onderdeel van de WS-Security-header
- Het overgaan van een bevestiging van SAML als deel van WS-Veiligheid kopbal
- Het overgaan van het teken Kerberos als deel van WS-Veiligheid kopbal
AEM Forms biedt geen ondersteuning voor standaardverificatie op basis van certificaten, maar wel voor verificatie op basis van certificaten in een ander formulier.
De identiteit van AEM formuliergebruikers kan worden weergegeven via een SAML-bevestiging die is ondertekend met een geheime sleutel. De volgende code van XML toont een voorbeeld van een bewering van SAML.
<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>
Deze voorbeeldbewering wordt uitgegeven voor een beheerdergebruiker. Deze bewering bevat de volgende opvallende items:
- Deze is gedurende een bepaalde periode geldig.
- Het wordt uitgegeven voor een bepaalde gebruiker.
- Het is digitaal ondertekend. Elke wijziging die er wordt aangebracht, zou dus de handtekening breken.
- Het kan aan AEM Forms als teken van de identiteit van de gebruiker gelijkend op gebruikersnaam en wachtwoord worden voorgesteld.
Een clienttoepassing kan de bevestiging ophalen vanuit elke AEM Forms AuthenticationManager-API die een AuthResult
-object retourneert. U kunt een AuthResult
-instantie verkrijgen door een van de volgende twee methoden uit te voeren:
- Het verifiëren van de gebruiker die om het even welke authentiek methodes gebruikt die door AuthenticationManager API worden blootgesteld. Doorgaans wordt de gebruikersnaam en het wachtwoord gebruikt, maar u kunt ook de certificaatverificatie gebruiken.
- De methode
AuthenticationManager.getAuthResultOnBehalfOfUser
gebruiken. Met deze methode kan een clienttoepassing eenAuthResult
-object ophalen voor elke gebruiker van AEM formulier.
Een gebruiker van AEM formulieren kan worden geverifieerd met een SAML-token dat is verkregen. Deze bevestiging van SAML (xml- fragment) kan als deel van de WS-Veiligheid kopbal met de vraag van de Webdienst voor gebruikersauthentificatie worden verzonden. Een clienttoepassing heeft doorgaans een gebruiker geverifieerd, maar heeft de gebruikersgegevens niet opgeslagen. (Of de gebruiker heeft het programma geopend aan die cliënt door een ander mechanisme dan het gebruiken van een gebruikersnaam en een wachtwoord.) In deze situatie moet de clienttoepassing AEM Forms aanroepen en zich een specifieke gebruiker voorstellen die AEM Forms mag aanroepen.
Als u een bepaalde gebruiker wilt verpersoonlijken, roept u de methode AuthenticationManager.getAuthResultOnBehalfOfUser
aan met behulp van een webservice. Deze methode retourneert een AuthResult
-instantie die de SAML-bewering voor die gebruiker bevat.
Daarna, gebruik die bevestiging SAML om het even welke dienst aan te halen die authentificatie vereist. Deze actie omvat het verzenden van de bewering als onderdeel van de SOAP header. Wanneer met deze bewering een webserviceaanroep wordt gemaakt, identificeert AEM Forms de gebruiker als de gebruiker die door die bewering wordt vertegenwoordigd. Namelijk is de gebruiker die in de bewering wordt gespecificeerd de gebruiker die de dienst aanhaalt.
Het gebruiken van de klassen van de As van Apache en op SAML-Gebaseerde authentificatie using-apache-axis-classes-and-saml-based-authentication
U kunt een AEM Forms-service aanroepen door Java-proxyklassen die zijn gemaakt met de Axis-bibliotheek. (Zie Creërend de volmachtsklassen van Java gebruikend de As van Apache.)
Wanneer het gebruiken van AXIS die op SAML-Gebaseerde authentificatie gebruikt, registreer de verzoek en reactiemanager met As. Apache Axis roept de handler aan voordat een aanroepingsverzoek naar AEM Forms wordt verzonden. Maak een Java-klasse die org.apache.axis.handlers.BasicHandler
uitbreidt om een handler te registreren.
creeer een AssertionHandler met As
De volgende Java-klasse met de naam AssertionHandler.java
toont een voorbeeld van een Java-klasse die org.apache.axis.handlers.BasicHandler
uitbreidt.
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);
}
}
}
registreer de manager
Om een manager bij As te registreren, creeer een cliënt-config.wsdd- dossier. Standaard zoekt Axis naar een bestand met deze naam. De volgende XML-code is een voorbeeld van een client-config.wsdd-bestand. Zie de documentatie van de As voor meer informatie.
<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>
Roep de dienst van AEM Forms aan
Het volgende codevoorbeeld roept de dienst van AEM Forms gebruikend op SAML-Gebaseerde authentificatie aan.
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());
}
}
Het gebruiken van een .NET cliëntassemblage en op SAML-Gebaseerde authentificatie using-a-net-client-assembly-and-saml-based-authentication
U kunt de dienst van Forms aanhalen door een .NET cliëntassemblage en op SAML-Gebaseerde authentificatie te gebruiken. Om dit te doen, moet u de Verbeteringen 3.0 van de Dienst van het Web (WSE) gebruiken. Voor informatie over het creëren van een .NET cliëntassemblage die WSE gebruikt, zie Creërend een .NET project dat DIMEgebruikt.
De architectuur WSE gebruikt Beleid, Assertions, en de gegevenstypes SecurityToken. Geef voor een webserviceaanroep kort een beleid op. Een beleid kan meerdere beweringen hebben. Elke bewering kan filters bevatten. Een filter wordt aangehaald in bepaalde stadia in een vraag van de Webdienst en, op dat ogenblik, kunnen zij het SOAP verzoek wijzigen. Voor volledige details, zie de Verbeteringen 3.0 van de Dienst van het Web documentatie.
creeer de Bevestiging en de Filter
In het volgende C#-codevoorbeeld worden filter- en assertieklassen gemaakt. In dit codevoorbeeld wordt een SamlAssertionOutputFilter gemaakt. Dit filter wordt aangeroepen door het kader van WSE alvorens het SOAP verzoek wordt verzonden naar 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);
}
}
creeer de Token van SAML
Creeer een klasse om de bewering van SAML te vertegenwoordigen. De belangrijkste taak die deze klasse uitvoert, is het omzetten van gegevenswaarden van tekenreeks in xml en het behouden van witruimte. Deze bewering-xml wordt later geïmporteerd in het SOAP-verzoek.
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);
}
. . .
}
Roep de dienst van AEM Forms aan
Het volgende C# codevoorbeeld roept de dienst van Forms door op SAML-Gebaseerde authentificatie te gebruiken aan.
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);
}
}
Verwante overwegingen bij het gebruik van webservices related-considerations-when-using-web-services
Soms treden problemen op wanneer het aanhalen van bepaalde de dienstenverrichtingen van AEM Forms door de Webdiensten te gebruiken. Het doel van deze discussie is om die kwesties te identificeren en een oplossing te bieden, als die beschikbaar is.
Asynchroon dienstenbewerkingen aanroepen invoking-service-operations-asynchronously
Als u probeert een AEM Forms-servicebewerking, zoals de bewerking PDF genereren htmlToPDF
, asynchroon aan te roepen, treedt een SoapFaultException
op. U lost dit probleem op door een XML-bestand met aangepaste binding te maken waarin het element ExportPDF_Result
en andere elementen in verschillende klassen worden ingedeeld. De volgende XML vertegenwoordigt een aangepast bindingsbestand.
<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>
Gebruik dit XML-bestand wanneer u Java-proxybestanden maakt met JAX-WS. (Zie Creërend de volmachtsklassen van Java gebruikend JAX-WS.)
Verwijs naar dit dossier van XML wanneer het uitvoeren van het hulpmiddel JAX-WS (wsimport.exe) door - te gebruiken de optie van de bevellijn b
. Werk het element wsdlLocation
in het XML-bindingsbestand bij om de URL van AEM Forms op te geven.
Om ervoor te zorgen dat asynchrone aanroep werkt, wijzigt u de waarde voor de URL van het eindpunt en geeft u async=true
op. Geef bijvoorbeeld voor Java-proxybestanden die met JAX-WS zijn gemaakt het volgende op voor de BindingProvider.ENDPOINT_ADDRESS_PROPERTY
.
https://server:port/soap/services/ServiceName?wsdl&async=true&lc_version=9.0.0
In de volgende lijst worden andere services opgegeven waarvoor een aangepast bindingsbestand nodig is wanneer dit asynchroon wordt aangeroepen:
- PDF3D
- Taakbeheer
- Toepassingsbeheer
- Directorybeheer
- Distiller
- Rights Management
- Documentbeheer
Verschillen in J2EE-toepassingsservers differences-in-j2ee-application-servers
Soms wordt AEM Forms die wordt gehost op een andere J2EE-toepassingsserver, niet aangeroepen door een proxybibliotheek die is gemaakt met een specifieke J2EE-toepassingsserver. Overweeg een volmachtsbibliotheek die gebruikend AEM Forms wordt geproduceerd die op WebSphere wordt opgesteld. Deze volmachtsbibliotheek kan de diensten van AEM Forms niet met succes aanhalen die op de Server van de Toepassing JBoss worden opgesteld.
Sommige complexe gegevenstypen van AEM Forms, zoals PrincipalReference
, worden anders gedefinieerd wanneer AEM Forms op WebSphere wordt geïmplementeerd dan op de JBoss-toepassingsserver. Verschillen in JDKs die door de verschillende J2EE toepassingsdiensten worden gebruikt zijn de reden waarom er verschillen in WSDL definities zijn. Het resultaat is dat u proxybibliotheken gebruikt die op dezelfde J2EE-toepassingsserver worden gegenereerd.
Toegang tot meerdere services via webservices accessing-multiple-services-using-web-services
Vanwege naamruimteconflicten kunnen gegevensobjecten niet worden gedeeld tussen meerdere service-WSDL's. De verschillende diensten kunnen gegevenstypes delen en, daarom delen de diensten de definitie van deze types in WSDLs. Bijvoorbeeld, kunt u niet twee .NET cliëntassemblage toevoegen die een BLOB
gegevenstype aan het zelfde .NET cliëntproject bevat. Als u dit probeert, treedt er een compilatiefout op.
De volgende lijst specificeert gegevenstypes die niet tussen veelvoudige dienst WSDLs kunnen worden gedeeld:
User
Principals
PrincipalReference
Groups
Roles
BLOB
Om dit probleem te voorkomen, wordt aanbevolen de gegevenstypen volledig te kwalificeren. Bijvoorbeeld, overweeg een .NET toepassing die zowel de dienst van Forms als de dienst van de Handtekening gebruikend een de dienstverwijzing van verwijzingen voorziet. Beide serviceverwijzingen bevatten een BLOB
-klasse. Als u een BLOB
-instantie wilt gebruiken, kwalificeert u het BLOB
-object volledig wanneer u het declareert. Deze benadering wordt getoond in het volgende codevoorbeeld. Voor informatie over dit codevoorbeeld, zie digitaal het Ondertekenen Interactieve Forms.
Het volgende C# codevoorbeeld ondertekent een interactief formulier dat door de dienst van Forms wordt teruggegeven. De clienttoepassing heeft twee serviceverwijzingen. De BLOB
-instantie die aan de Forms-service is gekoppeld, behoort tot de naamruimte SignInteractiveForm.ServiceReference2
. Op dezelfde manier behoort de instantie BLOB
die aan de handtekeningservice is gekoppeld, tot de naamruimte SignInteractiveForm.ServiceReference1
. Het ondertekende interactieve formulier wordt opgeslagen als een PDF-bestand met de naam 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 an 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 an 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);
}
}
}
}
Services die beginnen met de letter I produceren ongeldige proxybestanden services-starting-with-the-letter-i-produce-invalid-proxy-files
De naam van sommige door AEM Forms gegenereerde proxyklassen is onjuist wanneer u Microsoft.Net 3.5 en WCF gebruikt. Dit probleem doet zich voor wanneer proxyklassen worden gemaakt voor de IBMFilenetContentRepositoryConnector, IDPSchedulerService of een andere service waarvan de naam begint met de letter I. De naam van de gegenereerde client als er bijvoorbeeld IBMFileNetContentRepositoryConnector is, is BMFileNetContentRepositoryConnectorClient
. De letter I ontbreekt in de gegenereerde proxyklasse.