AEM Forms aanroepen met webservices invoking-aem-forms-using-web-services
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. Dientengevolge, kunnen de diensten van AEM Forms de volgende berichten van de ZEEP ruilen en verwerken:
- SOAP-verzoek: Verzonden naar een Forms-service door een clienttoepassing die een handeling aanvraagt.
- SOAP-reactie: Verzonden naar een clienttoepassing door een Forms-service nadat een SOAP-aanvraag is 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 protocol van de ZEEP en zijn volgzaam WSI BasisProfiel 1.1. De Interoperabiliteit van de Diensten van het Web (WSI) is een open normenorganisatie die Webdienst interoperabiliteit over platforms bevordert. Zie voor meer informatie https://www.ws-i.org/.
AEM Forms ondersteunt de volgende webservicenormen:
- Codering: Ondersteunt alleen document- en letterlijke codering (dit is de voorkeurscodering volgens het WSI Basic Profile). (Zie AEM Forms aanroepen met Base64-codering.)
- MTOM: Vertegenwoordigt een manier om gehechtheid met de verzoeken van de ZEEP te coderen. (Zie AEM Forms aanroepen met MTOM.)
- SwaRef: Vertegenwoordigt een andere manier om gehechtheid met de verzoeken van de ZEEP te coderen. (Zie AEM Forms aanroepen met SwaRef.)
- SOAP met bijlagen: Steunt zowel MIME als DIME (de Directe Inkapseling van het Bericht van Internet). Deze protocollen zijn standaardmanieren om gehechtheid over ZEEP te verzenden. Microsoft Visual Studio .NET-toepassingen gebruiken DIME. (Zie AEM Forms aanroepen met Base64-codering.)
- WS-beveiliging: Ondersteunt een symbolisch profiel voor een wachtwoord voor een gebruikersnaam. Dit is een standaardmanier om gebruikersnamen en wachtwoorden als onderdeel van de WS Security SOAP-header te verzenden. AEM Forms ondersteunt ook HTTP-basisverificatie.
Als u AEM Forms-services wilt aanroepen met behulp van een webservice, maakt u doorgaans een proxybibliotheek die de service WSDL gebruikt. De AEM Forms aanroepen met webservices de sectie gebruikt JAX-WS om de volmachtsklassen van Java tot stand te brengen om de diensten aan te halen. (Zie Java-proxyklassen maken met 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 als host fungeert voor AEM Forms.
- your_port vertegenwoordigt de haven van HTTP die de J2EE toepassingsserver gebruikt.
- service_name staat voor de servicenaam.
- versie vertegenwoordigt de doelversie van de dienst (de recentste de dienstversie wordt gebruikt door gebrek).
async
geeft de waarde optrue
om extra bewerkingen voor asynchrone aanroep in te schakelen (false
standaard).- lc_version vertegenwoordigt de versie van AEM Forms die u wilt aanroepen.
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
AEM Forms Process WSDL-definities
U moet de naam van de Toepassing en de naam van het Proces binnen de definitie van WSDL specificeren om tot WSDL toegang te hebben die tot een proces behoort dat in Workbench wordt gecreeerd. Stel dat de naam van de toepassing MyApplication
en de naam van het proces is EncryptDocument
. In dit geval, specificeer de volgende definitie WSDL:
http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl
MyApplication/EncryptDocument
kortstondig proces, zie Voorbeeld van een kortlopend proces. http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl
Toegang krijgen tot nieuwe functionaliteit met behulp van webservices
Nieuwe AEM Forms-servicefuncties zijn toegankelijk via webservices. In AEM Forms is bijvoorbeeld de mogelijkheid geïntroduceerd om bijlagen te coderen met MTOM. (Zie AEM Forms aanroepen met MTOM.)
Als u toegang wilt tot nieuwe functies die in AEM Forms zijn geïntroduceerd, geeft u de opdracht lc_version
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
gebruiken. 9.0.1 is bijvoorbeeld gelijk aan versie 9.0.Web service BLOB, 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 com.adobe.idp.Document
wanneer u werkt met AEM Forms Java API's. (Zie Gegevens doorgeven aan AEM Forms-services met de Java API.)
A BLOB
Het object verzendt en haalt binaire gegevens op (bijvoorbeeld PDF-bestanden, XML-gegevens enzovoort) naar en van AEM Forms-services. De BLOB
Het type wordt als volgt gedefinieerd in een dienst 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 MTOM
en swaRef
velden worden alleen ondersteund in AEM Forms. U kunt deze nieuwe velden alleen gebruiken als u een URL opgeeft die de lc_version
eigenschap.
BLOB-objecten leveren in serviceaanvragen
Als een AEM Forms-servicebewerking een BLOB
Als een invoerwaarde typt, maakt u een instantie van de BLOB
typt u de logica van uw toepassing. (Veel webservices beginnen snel in Programmeren met AEM formulieren tonen hoe te met een BLOB gegevenstype te werken.)
Waarden toewijzen aan velden die bij de BLOB
instantie als volgt:
- Base64: Als u gegevens wilt doorgeven als tekst die is gecodeerd in een Base64-indeling, stelt u de gegevens in in het dialoogvenster
BLOB.binaryData
en stel het gegevenstype in de MIME-indeling in (bijvoorbeeldapplication/pdf
) in deBLOB.contentType
veld. (Zie AEM Forms aanroepen met Base64-codering.) - MTOM: Als u binaire gegevens in een MTOM-bijlage wilt doorgeven, stelt u de gegevens in de
BLOB.MTOM
veld. 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 AEM Forms aanroepen met MTOM.) - SwaRef: Om binaire gegevens in een WS-I SwaRef gehechtheid over te gaan, plaats de gegevens in
BLOB.swaRef
veld. Deze instelling koppelt de gegevens aan het SOAP-verzoek met behulp van het Java JAX-WS-framework. (Zie AEM Forms aanroepen met SwaRef.) - MIME- of DIME-bijlage: Als u gegevens wilt doorgeven in een MIME- of DIME-bijlage, voegt u de gegevens toe aan de SOAP-aanvraag met de native API van het SOAP-framework. De id van de bijlage instellen in het dialoogvenster
BLOB.attachmentID
veld. (Zie AEM Forms aanroepen met Base64-codering.) - Externe URL: Als gegevens worden gehost op een webserver en toegankelijk zijn via een HTTP-URL, stelt u de HTTP-URL in het dialoogvenster
BLOB.remoteURL
veld. (Zie AEM Forms aanroepen met behulp van BLOB-gegevens via HTTP.)
Toegang verkrijgen tot gegevens in BLOB-objecten die zijn geretourneerd door services
Het transmissieprotocol voor teruggekeerde BLOB
objecten zijn afhankelijk van verschillende factoren, die in de volgende volgorde worden beschouwd en die stoppen wanneer aan de hoofdvoorwaarde wordt voldaan:
-
Doel-URL specificeert transmissieprotocol. Als de doel-URL die bij de SOAP-aanroep is opgegeven, de parameter bevat
blob="
BLOB_TYPE", dan BLOB_TYPE bepaalt het transmissieprotocol. BLOB_TYPE is een plaatsaanduiding voor base64, dime, mime, http, mtom of swaref. -
Het eindpunt van de ZEEP van de dienst is Slim. Als aan de volgende voorwaarden wordt voldaan, worden de uitvoerdocumenten geretourneerd met hetzelfde verzendprotocol als de invoerdocumenten:
-
De het eindpuntparameterStandaardprotocol van de ZEEP van de dienst voor de Voorwerpen van de Klodder van de Output wordt geplaatst aan Slim.
Voor elke dienst met een eindpunt van de ZEEP, staat de beleidsconsole u toe om het transmissieprotocol voor om het even welke teruggekeerde blobs te specificeren. (Zie administratie Help.)
-
AEM Forms-service neemt een of meer documenten op als invoer.
-
-
Het eindpunt van de ZEEP van de dienst is niet Slim. Het gevormde protocol bepaalt het protocol van de documenttransmissie, en de gegevens zijn teruggekeerd in het overeenkomstige
BLOB
veld. Bijvoorbeeld, als het eindpunt van de ZEEP aan DIME wordt geplaatst, dan is de teruggekeerde blob inblob.attachmentID
, ongeacht het verzendprotocol van een invoerdocument. -
Anders. Als een service het documenttype niet als invoer gebruikt, worden de uitvoerdocumenten geretourneerd in het dialoogvenster
BLOB.remoteURL
in het HTTP-protocol.
Zoals beschreven in de eerste voorwaarde, kunt u het transmissietype voor om het even welke teruggekeerde documenten verzekeren door het eindpunt URL van de ZEEP 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-indeling: Stel de
blob
achtervoegsel totbase64
om de gegevens in deBLOB.binaryData
veld. - MIME- of DIME-bijlage: Stel de
blob
achtervoegsel totDIME
ofMIME
om de gegevens te retourneren als een corresponderend type bijlage met de bijlage-id die in het dialoogvensterBLOB.attachmentID
veld. Gebruik de eigen API van het SOAP-framework om de gegevens in de bijlage te lezen. - Externe URL: Stel de
blob
achtervoegsel tothttp
om de gegevens op de toepassingsserver te houden en de URL die naar de gegevens in deBLOB.remoteURL
veld. - MTOM of SwaRef: Stel de
blob
achtervoegsel totmtom
ofswaref
om de gegevens te retourneren als een corresponderend type bijlage met de bijlage-id die in het dialoogvensterBLOB.MTOM
ofBLOB.swaRef
velden. Gebruik de native API van het SOAP-framework om de gegevens in de bijlage te lezen.
BLOB
object aanroepen setBinaryData
methode. Anders bestaat de mogelijkheid dat OutOfMemory
* er treedt een uitzondering op.*OutOfMemory
* uitzondering.*MTOM-transmissie van bytearrays met base64-codering
Naast de BLOB
-object, ondersteunt het MTOM-protocol alle byte-arrayparameters of byte-arrayvelden van een complex type. Dit betekent dat SOAP-frameworks van clients die MTOM ondersteunen, alle xsd:base64Binary
element as an MTOM gehechtheid (in plaats van een base64-Gecodeerde tekst). AEM Forms SOAP-eindpunten kunnen dit type byte-arraycodering lezen. De AEM Forms-service retourneert echter altijd een byte-arraytype als een base64-gecodeerde tekst. De bytearray-uitvoerparameters ondersteunen MTOM niet.
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
De DATE
type, dat in de dienst WSDL als volgt 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, moet de SOAP cliënttoepassing de datum in DATE.date
veld. De instelling DATE.calendar
in dit geval veroorzaakt een runtime-uitzondering. Als de dienst a terugkeert java.util.Date
, wordt de datum geretourneerd in de DATE.date
veld.
java.util.Calendar
De DATE
type, dat in de dienst WSDL als volgt 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, moet de SOAP cliënttoepassing de datum in DATE.caledendar
veld. De instelling DATE.date
veroorzaakt in dit geval een runtime uitzondering. Als de dienst a terugkeert java.util.Calendar
, dan is de datum teruggekeerd in DATE.calendar
veld.
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 in een dienst WSDL als volgt 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, geef de XML-gegevens door in de XML.document
veld.
De instelling XML.element
veroorzaakt een runtime uitzondering. Als de dienst een org.w3c.dom.Document
, dan worden de XML-gegevens geretourneerd in de XML.document
veld.
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
Als invoer, geeft u de XML-gegevens door in de XML.element
veld.
De instelling XML.document
veroorzaakt een runtime uitzondering. Als de dienst een org.w3c.dom.Element
, worden de XML-gegevens geretourneerd in het dialoogvenster XML.element
veld.
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 bewerkingen in 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
ANT_HOME
omgevingsvariabele voor 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 bevindt zich in het dialoogvenster [JDK_INSTALL_LOCATION]/jre directory.
- Stel de
JAVA_HOME
omgevingsvariabele naar 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 XML-webservices.)
-
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-as3 <?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 ziet u dat de
url
eigenschap wordt ingesteld om te verwijzen naar de WSDL van de coderingsservice die op localhost wordt uitgevoerd. Deusername
enpassword
eigenschappen moeten worden ingesteld op een geldige gebruikersnaam en wachtwoord voor AEM formulieren. De URL bevat delc_version
kenmerk. Zonder hetlc_version
kunt u geen nieuwe AEM Forms-servicebewerkingen aanroepen.note note NOTE Vervangen EncryptionService
* met de AEM Forms-servicenaam die u wilt aanroepen met Java-proxyklassen. Als u bijvoorbeeld Java-proxyklassen voor de service Rights Management wilt maken, geeft u op:*code language-as3 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-as3 ant -buildfile "build.xml" wsdl
Plaats het bouwstijlmanuscript van de ANE in C:\Program Files\Java\jaxws-ri\bin directory. 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 nieuw Java-project dat wordt gebruikt om de JAVA-proxybestanden in te pakken in een JAR-bestand.
- Maak een bronmap in het project.
- Een
com.adobe.idp.services
in de map Source. - Selecteer
com.adobe.idp.services
verpakken en vervolgens de JAVA-bestanden vanuit de map adobe/idp/services in het pakket importeren. - Maak indien nodig een
org/apache/xml/xmlsoap
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) in Programmeren met AEM formulieren. U maakt Java-proxybestanden met JAX-WS. Bovendien begint alle Java-webservice snel met SwaRef. (Zie AEM Forms aanroepen met SwaRef.)
Zie ook
Java-proxyklassen maken met Apache Axis
AEM Forms aanroepen met Base64-codering
AEM Forms aanroepen met behulp van BLOB-gegevens via HTTP
AEM Forms aanroepen met SwaRef
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 op basis van een service-WSDL. U kunt Apache Axis downloaden via de URL https://ws.apache.org/axis/.
U kunt Java-bibliotheekbestanden van de as genereren door de volgende stappen uit te voeren:
-
Installeer Apache Ant op de clientcomputer. Het is beschikbaar op https://ant.apache.org/bindownload.cgi.
- Voeg de binmap toe aan het klassepad.
- Stel de
ANT_HOME
omgevingsvariabele voor de map waarin u Ant hebt geïnstalleerd.
-
Installeer Apache Axis 1.4 op de clientcomputer. Het is beschikbaar op https://ws.apache.org/axis/.
-
Stel het klassepad in om de Axis JAR-bestanden te gebruiken in uw webserviceclient, zoals wordt beschreven in de installatie-instructies voor de as op https://ws.apache.org/axis/java/install.html.
-
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-as3 <?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 ziet u dat de
url
eigenschap wordt ingesteld om te verwijzen naar de WSDL van de coderingsservice die op localhost wordt uitgevoerd. Deusername
enpassword
eigenschappen moeten worden 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-as3 ant -buildfile "build.xml" encryption-wsdl2java-client
De JAVA-bestanden worden geschreven naar C:\JavaFiles folder as specified by the
output
eigenschap. 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. Een Java-project maken en een com.adobe.idp.services
* (alle .JAVA-bestanden behoren tot dit pakket). Importeer vervolgens alle .JAVA-bestanden in het pakket. Exporteer het project ten slotte als een JAR-bestand.* -
Wijzig de URL in het dialoogvenster
EncryptionServiceLocator
-klasse om het coderingstype op te geven. Als u bijvoorbeeld base64 wilt gebruiken, geeft u?blob=base64
om ervoor te zorgen datBLOB
object retourneert binaire gegevens. Dat wil zeggen, in deEncryptionServiceLocator
-klasse, zoekt u de volgende coderegel:code language-as3 http://localhost:8080/soap/services/EncryptionService;
en wijzig deze in:
code language-as3 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 bevinden zich in het dialoogvenster [installatiemap]/Adobe/Adobe Experience Manager Forms/sdk/lib/third party directory.
Zie ook
Java-proxyklassen maken met JAX-WS
AEM Forms aanroepen met Base64-codering
AEM Forms aanroepen met behulp van BLOB-gegevens via HTTP
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: BLOB
gegevens zijn Base64 gecodeerd, niet het volledige bericht van de ZEEP.
‘AEM Forms aanroepen met Base64-codering’ bespreekt het aanroepen van het volgende kortstondige AEM Forms-proces met de naam MyApplication/EncryptDocument
door Base64-codering te gebruiken.
MyApplication/EncryptDocument
met Workbench. (Zie Workbench gebruiken.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze actie is gebaseerd op de
SetValue
bewerking. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze actie is gebaseerd op de
PasswordEncryptPDF
bewerking. 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.
Een proxyklasse maken
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 wordt gevestigd 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 Help bij 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 dat geval wordt een CS-bestand gemaakt met de naam EncryptDocumentService.cs. Met dit CS-bestand kunt u een proxyobject maken waarmee u de service kunt aanroepen die is opgegeven in de oproepings-URL.
De URL in de proxyklasse wijzigen en opnemen ?blob=base64
om ervoor te zorgen dat BLOB
object retourneert binaire gegevens. 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";
De AEM Forms aanroepen met Base64-codering sectiegebruik MyApplication/EncryptDocument
als voorbeeld. Als u een .NET cliëntassemblage voor een andere dienst van Forms creeert, zorg ervoor dat u vervangt MyApplication/EncryptDocument
met de naam van de dienst.
Het ontwikkelen van 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 de Project menu, selecteert u Referentie toevoegen.
- Selecteer in het dialoogvenster Referentie toevoegen de optie System.Web.Services.dll.
- Klikken Selecteren en klik vervolgens op OK.
- Compileer en bouw het project.
MyApplication/EncryptDocument
service.?blob=base64
aan URL in de volmachtsklasse die wordt gebruikt om de .NET cliëntassemblage tot stand te brengen. Anders kunt u geen binaire gegevens ophalen uit de 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 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 de Project menu, selecteert u Referentie toevoegen.
- Klik op de knop .NET tab.
- Klikken Bladeren en zoek het bestand DocumentService.dll.
- Klikken Selecteren en klik vervolgens op OK.
Het aanhalen van de dienst die een .NET cliëntassemblage gebruikt die het coderen Base64 gebruikt
U kunt de MyApplication/EncryptDocument
de dienst (die in Workbench) gebruikend een .NET cliëntassemblage werd gebouwd die het coderen Base64 gebruikt. Om het MyApplication/EncryptDocument
Voer de volgende stappen uit:
- Creeer een Microsoft .NET cliëntassemblage die verbruikt
MyApplication/EncryptDocument
service WSDL. - Creeer een project van Microsoft .NET van de cliënt. Verwijs de de cliëntassemblage van Microsoft .NET in het cliëntproject. Ook verwijzing
System.Web.Services
. - Gebruikend de de cliëntassemblage van Microsoft .NET, creeer een
MyApplication_EncryptDocumentService
object door de standaardconstructor aan te roepen. - Stel de
MyApplication_EncryptDocumentService
objectCredentials
eigenschap met eenSystem.Net.NetworkCredential
object. Binnen deSystem.Net.NetworkCredential
-constructor, geeft u een gebruikersnaam voor AEM formulieren en het bijbehorende wachtwoord op. Stel verificatiewaarden in om uw .NET-clienttoepassing in te schakelen voor het uitwisselen van SOAP-berichten met AEM Forms. - Een
BLOB
object met behulp van de constructor. DeBLOB
-object wordt gebruikt om een PDF-document op te slaan dat aan deMyApplication/EncryptDocument
proces. - 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 de
System.IO.FileStream
object. U kunt de grootte van de bytearray bepalen door deSystem.IO.FileStream
objectLength
eigenschap. - De bytearray vullen met streamgegevens door de
System.IO.FileStream
objectRead
methode. Geef de bytearray, de startpositie en de streamlengte door om te lezen. - Vul de
BLOB
object door het toe te wijzenbinaryData
eigenschap met de inhoud van de bytearray. - De
MyApplication/EncryptDocument
proces door hetMyApplication_EncryptDocumentService
objectinvoke
en het doorgeven van deBLOB
object dat het PDF-document bevat. Met dit proces wordt een versleuteld PDF-document binnen eenBLOB
object. - Een
System.IO.FileStream
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 van de
BLOB
object geretourneerd doorMyApplicationEncryptDocumentService
objectinvoke
methode. Vul de bytearray met de waarde van deBLOB
objectbinaryData
lid. - Een
System.IO.BinaryWriter
object door de constructor aan te roepen en deSystem.IO.FileStream
object. - Schrijf de inhoud van de bytearray naar een PDF-bestand door het
System.IO.BinaryWriter
objectWrite
en geeft u de bytearray door.
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. Om het MyApplication/EncryptDocument
Voer de volgende stappen uit met Java-proxyklassen:
-
Java-proxyklassen maken met JAX-WS die het
MyApplication/EncryptDocument
service WSDL. Gebruik het volgende eindpunt van WSDL:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
note note NOTE Vervangen hiro-xp
* met het IP-adres van de J2EE-toepassingsserver die als host fungeert voor AEM Forms. * -
Plaats de Java-proxyklassen die met JAX-WS zijn gemaakt in een JAR-bestand.
-
Neem het JAR-bestand voor de Java-proxy 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.
-
Een
MyApplicationEncryptDocumentService
object met behulp van de constructor. -
Een
MyApplicationEncryptDocument
door het object aan te roepenMyApplicationEncryptDocumentService
objectgetEncryptDocument
methode. -
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 aan WSDL toe
javax.xml.ws.BindingProvider
objectENDPOINT_ADDRESS_PROPERTY
veld. Om hetMyApplication/EncryptDocument
Geef de volgende URL-waarde op met behulp van Base64-codering:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64
-
Wijs de gebruiker van AEM formulieren toe aan de
javax.xml.ws.BindingProvider
objectUSERNAME_PROPERTY
veld. -
Wijs de overeenkomstige wachtwoordwaarde aan toe
javax.xml.ws.BindingProvider
objectPASSWORD_PROPERTY
veld.
In het volgende codevoorbeeld wordt deze toepassingslogica getoond:
code language-as3 //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);
-
-
Hiermee wordt het PDF-document opgehaald dat naar de
MyApplication/EncryptDocument
door eenjava.io.FileInputStream
object met behulp van de constructor. Geef een tekenreekswaarde door die de locatie van het PDF-document aangeeft. -
Een bytearray maken en deze vullen met de inhoud van het dialoogvenster
java.io.FileInputStream
object. -
Een
BLOB
object met behulp van de constructor. -
Vul de
BLOB
object aanroepensetBinaryData
en geeft u de bytearray door. DeBLOB
objectsetBinaryData
is de methode om te roepen wanneer het gebruiken van het coderen Base64. Zie BLOB-objecten leveren in serviceaanvragen. -
De
MyApplication/EncryptDocument
proces door hetMyApplicationEncryptDocument
objectinvoke
methode. Geef deBLOB
object dat het PDF-document bevat. De methode invoke retourneert eenBLOB
object dat het gecodeerde PDF-document bevat. -
Maak een bytearray die het gecodeerde PDF-document bevat door het
BLOB
objectgetBinaryData
methode. -
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 eigenschap van MTOM is het gebruik van XOP:Include
element. Dit element wordt bepaald in de Binary Optimized Packaging (XOP) specificatie van XML om de binaire gehechtheid van een bericht van de ZEEP van verwijzingen te voorzien.
De discussie gaat hier over het gebruik van MTOM om het volgende kortstondige AEM Forms-proces met de naam MyApplication/EncryptDocument
.
MyApplication/EncryptDocument
met Workbench. (Zie Workbench gebruiken.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze actie is gebaseerd op de
SetValue
bewerking. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze actie is gebaseerd op de
PasswordEncryptPDF
bewerking. 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 kader van de ZEEP 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
Vervangen localhost
met het IP-adres van de J2EE-toepassingsserver die als host fungeert voor AEM Forms. Vervangen MyApplication/EncryptDocument
met de naam van de AEM Forms-service die moet worden aangeroepen. 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 lc_version
zorgt ervoor dat AEM Forms-functionaliteit, zoals MTOM, beschikbaar is. Zonder het lc_version
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 de Project menu, selecteert u Serviceverwijzing toevoegen.
-
In de Adres geeft u de WSDL op voor de AEM Forms-service. Bijvoorbeeld,
code language-as3 http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
-
Klikken Ga en klik vervolgens op OK.
Het aanhalen van de dienst die MTOM in een .NET project gebruikt invoking-a-service-using-mtom-in-a-net-project
Neem de MyApplication/EncryptDocument
proces dat een onbeveiligd document van de PDF goedkeurt en een wachtwoord-gecodeerd document van de PDF terugkeert. Om het MyApplication/EncryptDocument
-proces (dat in Workbench is ingebouwd) met MTOM, voert u de volgende stappen uit:
-
Maak een Microsoft .NET-project.
-
Een
MyApplication_EncryptDocumentClient
object met de standaardconstructor. -
Een
MyApplication_EncryptDocumentClient.Endpoint.Address
object gebruikenSystem.ServiceModel.EndpointAddress
constructor. Geef een tekenreekswaarde die de WSDL opgeeft door aan de AEM Forms-service en het coderingstype:code language-as3 https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
U hoeft de
lc_version
kenmerk. Dit kenmerk wordt gebruikt wanneer u een serviceverwijzing maakt. Zorg er echter voor dat u?blob=mtom
.note note NOTE Vervangen hiro-xp
* met het IP-adres van de J2EE-toepassingsserver die als host fungeert voor AEM Forms. * -
Een
System.ServiceModel.BasicHttpBinding
object door de waarde van het object op te halenEncryptDocumentClient.Endpoint.Binding
lid. De geretourneerde waarde omzetten inBasicHttpBinding
. -
Stel de
System.ServiceModel.BasicHttpBinding
objectMessageEncoding
lid van de gegevens aanWSMessageEncoding.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 de AEM aan het gegevenslid toe
MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName
. - Wijs de overeenkomstige wachtwoordwaarde aan het gegevenslid toe
MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password
. - De constante waarde toewijzen
HttpClientCredentialType.Basic
aan het gegevenslidBasicHttpBindingSecurity.Transport.ClientCredentialType
. - De constante waarde toewijzen
BasicHttpSecurityMode.TransportCredentialOnly
aan het gegevenslidBasicHttpBindingSecurity.Security.Mode
.
In het volgende codevoorbeeld worden deze taken getoond.
code language-as3 //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 de AEM aan het gegevenslid toe
-
Een
BLOB
object met behulp van de constructor. DeBLOB
-object wordt gebruikt om een PDF-document op te slaan dat aan hetMyApplication/EncryptDocument
proces. -
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 de
System.IO.FileStream
object. U kunt de grootte van de bytearray bepalen door deSystem.IO.FileStream
objectLength
eigenschap. -
De bytearray vullen met streamgegevens door de
System.IO.FileStream
objectRead
methode. Geef de bytearray, de startpositie en de streamlengte door om te lezen. -
Vul de
BLOB
object door het toe te wijzenMTOM
lid data met de inhoud van de bytearray. -
De
MyApplication/EncryptDocument
proces door hetMyApplication_EncryptDocumentClient
objectinvoke
methode. Geef deBLOB
object dat het PDF-document bevat. Met dit proces wordt een versleuteld PDF-document binnen eenBLOB
object. -
Een
System.IO.FileStream
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 van de
BLOB
object dat is geretourneerd door deinvoke
methode. Vul de bytearray met de waarde van deBLOB
objectMTOM
lid. -
Een
System.IO.BinaryWriter
object door de constructor aan te roepen en deSystem.IO.FileStream
object. -
Schrijf de inhoud van de bytearray naar een PDF-bestand door het
System.IO.BinaryWriter
objectWrite
en geeft u de bytearray door.
Zie ook
Snel starten: Het aanhalen van de dienst die MTOM in een .NET project gebruikt
Toegang tot meerdere services via webservices
Creërend een Asp.net- Webtoepassing die een mens-centric langlevend proces aanhaalt
AEM Forms aanroepen met SwaRef invoking-aem-forms-using-swaref
U kunt AEM Forms-services aanroepen met SwaRef. De inhoud van de wsi:swaRef
Het element van XML wordt verzonden als gehechtheid binnen een lichaam van de ZEEP dat de verwijzing naar de gehechtheid 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 XML-webservices.)
Het gaat hier om het aanroepen van het volgende kortstondige Forms-proces, genaamd MyApplication/EncryptDocument
door SwaRef te gebruiken.
MyApplication/EncryptDocument
met Workbench. (Zie Workbench gebruiken.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze actie is gebaseerd op de
SetValue
bewerking. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze actie is gebaseerd op de
PasswordEncryptPDF
bewerking. 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
Om het MyApplication/EncryptDocument
Voer de volgende stappen uit door Java-proxybestanden te gebruiken die zijn gemaakt met JAX-WS en SwaRef:
-
Java-proxyklassen maken met JAX-WS die het
MyApplication/EncryptDocument
service WSDL. Gebruik het volgende eindpunt van WSDL:code language-as3 https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
Zie voor meer informatie Java-proxyklassen maken met JAX-WS.
note note NOTE Vervangen hiro-xp
* met het IP-adres van de J2EE-toepassingsserver die als host fungeert voor AEM Forms. * -
Plaats de Java-proxyklassen die met JAX-WS zijn gemaakt in een JAR-bestand.
-
Neem het JAR-bestand voor de Java-proxy 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.
-
Een
MyApplicationEncryptDocumentService
object met behulp van de constructor. -
Een
MyApplicationEncryptDocument
door het object aan te roepenMyApplicationEncryptDocumentService
objectgetEncryptDocument
methode. -
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 aan WSDL toe
javax.xml.ws.BindingProvider
objectENDPOINT_ADDRESS_PROPERTY
veld. Om hetMyApplication/EncryptDocument
Geef de volgende URL-waarde op met SwaRef-codering:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref
-
Wijs de gebruiker van AEM formulieren toe aan de
javax.xml.ws.BindingProvider
objectUSERNAME_PROPERTY
veld. -
Wijs de overeenkomstige wachtwoordwaarde aan toe
javax.xml.ws.BindingProvider
objectPASSWORD_PROPERTY
veld.
In het volgende codevoorbeeld wordt deze toepassingslogica getoond:
code language-as3 //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);
-
-
Hiermee wordt het PDF-document opgehaald dat naar de
MyApplication/EncryptDocument
door eenjava.io.File
object met behulp van de constructor. Geef een tekenreekswaarde door die de locatie van het PDF-document aangeeft. -
Een
javax.activation.DataSource
object gebruikenFileDataSource
constructor. Geef dejava.io.File
object. -
Een
javax.activation.DataHandler
object door de constructor ervan te gebruiken en door te gevenjavax.activation.DataSource
object. -
Een
BLOB
object met behulp van de constructor. -
Vul de
BLOB
object aanroepensetSwaRef
en het doorgeven van dejavax.activation.DataHandler
object. -
De
MyApplication/EncryptDocument
proces door hetMyApplicationEncryptDocument
objectinvoke
en het doorgeven van deBLOB
object dat het PDF-document bevat. De methode invoke retourneert eenBLOB
object dat een versleuteld PDF-document bevat. -
Een
javax.activation.DataHandler
door het object aan te roepenBLOB
objectgetSwaRef
methode. -
Zet de
javax.activation.DataHandler
object naar eenjava.io.InputSteam
instantie door dejavax.activation.DataHandler
objectgetInputStream
methode. -
Schrijf de
java.io.InputSteam
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 BLOB Data 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 Workbench gebruiken.)Wanneer dit proces wordt aangeroepen, worden de volgende handelingen uitgevoerd:
- Verkrijgt het onbeveiligde document van de PDF dat tot het proces wordt overgegaan. Deze actie is gebaseerd op de
SetValue
bewerking. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze actie is gebaseerd op de
PasswordEncryptPDF
bewerking. 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 AEM Forms aanroepen met Base64-codering. Wijzig de URL in de proxyklasse echter zodanig dat deze ook ?blob=http
in plaats van ?blob=base64
. 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";
Verwijzen naar de .NET clientMyApplication/EncryptDocument-verzameling
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 de Project menu, selecteert u Referentie toevoegen.
- Klik op de knop .NET tab.
- Klikken Bladeren en zoek het bestand DocumentService.dll.
- Klikken Selecteren en klik vervolgens op OK.
Het aanhalen van de dienst die een .NET cliëntassemblage gebruikt die gegevens BLOB over HTTP gebruikt
U kunt de MyApplication/EncryptDocument
de dienst (die in Workbench) gebruikend een .NET cliëntassemblage werd gebouwd die gegevens over HTTP gebruikt. Om het MyApplication/EncryptDocument
Voer de volgende stappen uit:
- 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. Ook verwijzing
System.Web.Services
. - Gebruikend de de cliëntassemblage van Microsoft .NET, creeer een
MyApplication_EncryptDocumentService
object door de standaardconstructor aan te roepen. - Stel de
MyApplication_EncryptDocumentService
objectCredentials
eigenschap met eenSystem.Net.NetworkCredential
object. Binnen deSystem.Net.NetworkCredential
-constructor, geeft u een gebruikersnaam voor AEM formulieren en het bijbehorende wachtwoord op. Stel verificatiewaarden in om uw .NET-clienttoepassing in te schakelen voor het uitwisselen van SOAP-berichten met AEM Forms. - Een
BLOB
object met behulp van de constructor. DeBLOB
object wordt gebruikt om gegevens door te geven aanMyApplication/EncryptDocument
proces. - Wijs een tekenreekswaarde toe aan de
BLOB
objectremoteURL
gegevenslid dat de plaats van URI van een PDF- document specificeert om tot hetMyApplication/EncryptDocument
service. - De
MyApplication/EncryptDocument
proces door hetMyApplication_EncryptDocumentService
objectinvoke
en het doorgeven van deBLOB
object. Met dit proces wordt een versleuteld PDF-document binnen eenBLOB
object. - Een
System.UriBuilder
object door de constructor ervan te gebruiken en de waarde van het geretourneerde object door te gevenBLOB
objectremoteURL
lid. - Zet de
System.UriBuilder
object naar eenSystem.IO.Stream
object. (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 dialoogvenster
System.IO.Stream
object. - Een
System.IO.BinaryWriter
object door de constructor aan te roepen en deSystem.IO.FileStream
object. - Schrijf de inhoud van de bytearray naar een PDF-bestand door het
System.IO.BinaryWriter
objectWrite
en geeft u de bytearray door.
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. Om het MyApplication/EncryptDocument
Voer de volgende stappen uit met Java-proxyklassen:
-
Java-proxyklassen maken met JAX-WS die het
MyApplication/EncryptDocument
service WSDL. Gebruik het volgende eindpunt van WSDL:code language-as3 https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
Zie voor meer informatie Java-proxyklassen maken met JAX-WS.
note note NOTE Vervangen hiro-xp
* met het IP-adres van de J2EE-toepassingsserver die als host fungeert voor AEM Forms. * -
Plaats de Java-proxyklassen die met JAX-WS zijn gemaakt in een JAR-bestand.
-
Neem het JAR-bestand voor de Java-proxy 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.
-
Een
MyApplicationEncryptDocumentService
object met behulp van de constructor. -
Een
MyApplicationEncryptDocument
door het object aan te roepenMyApplicationEncryptDocumentService
objectgetEncryptDocument
methode. -
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 aan WSDL toe
javax.xml.ws.BindingProvider
objectENDPOINT_ADDRESS_PROPERTY
veld. Om hetMyApplication/EncryptDocument
Geef de volgende URL-waarde op met BLOB via HTTP-codering:https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http
-
Wijs de gebruiker van AEM formulieren toe aan de
javax.xml.ws.BindingProvider
objectUSERNAME_PROPERTY
veld. -
Wijs de overeenkomstige wachtwoordwaarde aan toe
javax.xml.ws.BindingProvider
objectPASSWORD_PROPERTY
veld.
In het volgende codevoorbeeld wordt deze toepassingslogica getoond:
code language-as3 //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);
-
-
Een
BLOB
object met behulp van de constructor. -
Vul de
BLOB
object aanroepensetRemoteURL
methode. Geef een tekenreekswaarde door die de URI-locatie opgeeft van een PDF-document dat moet worden doorgegeven aan hetMyApplication/EncryptDocument
service. -
De
MyApplication/EncryptDocument
proces door hetMyApplicationEncryptDocument
objectinvoke
en het doorgeven van deBLOB
object dat het PDF-document bevat. Met dit proces wordt een versleuteld PDF-document binnen eenBLOB
object. -
Maak een bytearray om de gegevensstroom op te slaan die het gecodeerde PDF-document vertegenwoordigt. De
BLOB
objectgetRemoteURL
methode (gebruik deBLOB
object geretourneerd doorinvoke
methode). -
Een
java.io.File
object met behulp van de constructor. Dit object staat voor het gecodeerde PDF-document. -
Een
java.io.FileOutputStream
object door de constructor ervan te gebruiken en door te gevenjava.io.File
object. -
De
java.io.FileOutputStream
objectwrite
methode. 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. De AEM Forms aanroepen met DIME sectie bespreekt het aanhalen van het volgende kortstondige proces van AEM Forms genoemd MyApplication/EncryptDocument
met 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 actie is gebaseerd op de
SetValue
bewerking. De invoerparameter voor dit proces is eendocument
procesvariabele met de naaminDoc
. - Hiermee versleutelt u het PDF-document met een wachtwoord. Deze actie is gebaseerd op de
PasswordEncryptPDF
bewerking. 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. Om samen met de codevoorbeelden te volgen, creeer een proces genoemd MyApplication/EncryptDocument
**gebruiken van Workbench. (Zie Workbench gebruiken.)
Het creëren van 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.
Verbeteringen voor webservices 2.0 installeren
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 Microsoft Download Center.
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.
Een webverwijzing naar een AEM Forms-service maken
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 wilt maken naar de MyApplication/EncryptDocument
Geef de volgende URL op, ervan uitgaande dat Forms op de lokale computer is geïnstalleerd:
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
. Om het MyApplication/EncryptDocument
proces met DIME, gebruik EncryptDocumentServiceWse
type.
Verwijzen naar de WSE-bibliotheek
- 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.
Een webverwijzing naar een Forms-service maken
- 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.
Het aanhalen van de dienst die DIME in een .NET project gebruikt
U kunt een Forms-service aanroepen met DIME. Neem de MyApplication/EncryptDocument
proces dat een onbeveiligd document van de PDF goedkeurt en een wachtwoord-gecodeerd document van de PDF terugkeert. Om het MyApplication/EncryptDocument
met DIME te verwerken, voert u de volgende stappen uit:
-
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 hebt ingesteld naar de
MyApplication/EncryptDocument
proces, eenEncryptDocumentServiceWse
object met de standaardconstructor. -
Stel de
EncryptDocumentServiceWse
objectCredentials
lid van de gegevens met eenSystem.Net.NetworkCredential
waarde die de gebruikersnaam en de wachtwoordwaarde voor AEM formulieren opgeeft. -
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 verkrijgen GUID door te roepen
System.Guid.NewGuid.ToString
methode. - Een tekenreekswaarde die het inhoudstype opgeeft. Omdat voor dit proces een PDF-document vereist is, geeft u
application/pdf
. - A
TypeFormat
opsommingswaarde. Geef het volgende opTypeFormat.MediaType
. - 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 verkrijgen GUID door te roepen
-
Een
BLOB
object met behulp van de constructor. -
De DIME-bijlage toevoegen aan de
BLOB
object door deMicrosoft.Web.Services2.Dime.DimeAttachment
objectId
gegevenslidwaarde voor deBLOB
objectattachmentID
lid. -
De
EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add
en geeft deMicrosoft.Web.Services2.Dime.DimeAttachment
object. -
De
MyApplication/EncryptDocument
proces door hetEncryptDocumentServiceWse
objectinvoke
en het doorgeven van deBLOB
object dat de DIME-bijlage bevat. Met dit proces wordt een versleuteld PDF-document binnen eenBLOB
object. -
Verkrijg de waarde van gehechtheids herkenningsteken door de waarde van teruggekeerde te krijgen
BLOB
objectattachmentID
lid. -
Doorlopen van de bijlagen in
EncryptDocumentServiceWse.ResponseSoapContext.Attachments
en gebruik de waarde van de gehechtheid herkenningsteken om het gecodeerde document van de PDF te verkrijgen. -
Vraag een
System.IO.Stream
object door de waarde van het object op te halenAttachment
objectStream
lid. -
Maak een bytearray en geef die bytearray door aan de
System.IO.Stream
objectRead
methode. Met deze methode wordt de bytearray gevuld met een gegevensstroom die het gecodeerde PDF-document vertegenwoordigt. -
Een
System.IO.FileStream
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. -
Een
System.IO.BinaryWriter
object door de constructor aan te roepen en deSystem.IO.FileStream
object. -
Schrijf de inhoud van de bytearray naar het PDF-bestand door het
System.IO.BinaryWriter
objectWrite
en geeft u de bytearray door.
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 Java-proxyklassen maken met Apache Axis.)
Met het hulpprogramma Apache Axis WSDL2Java worden JAVA-bestanden gegenereerd die methoden bevatten die worden gebruikt om SOAP-aanvragen naar een service te verzenden. De verzoeken van de ZEEP die door de dienst worden ontvangen worden gedecodeerd door de as-Gegenereerde bibliotheken en worden terug gezet in de methodes en de argumenten.
Om het MyApplication/EncryptDocument
De dienst (die in Workbench) gebruikend Axis-geproduceerde bibliotheekdossiers en DIME werd gebouwd, voert de volgende stappen uit:
-
Java-proxyklassen maken die de
MyApplication/EncryptDocument
service-WSDL met Apache Axis. (Zie Java-proxyklassen maken met Apache Axis.) -
Neem de Java-proxyklassen op in het klassepad.
-
Een
MyApplicationEncryptDocumentServiceLocator
object met behulp van de constructor. -
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 opgeeft?blob=dime
aan het eind van het eindpunt van de ZEEP URL. Gebruik bijvoorbeeldcode language-as3 https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
-
Een
EncryptDocumentSoapBindingStub
object door de constructor aan te roepen en deMyApplicationEncryptDocumentServiceLocator
enURL
object. -
Stel de gebruikersnaam en het wachtwoord voor AEM formulieren in door het
EncryptDocumentSoapBindingStub
objectsetUsername
ensetPassword
methoden.code language-as3 encryptionClientStub.setUsername("administrator"); encryptionClientStub.setPassword("password");
-
Hiermee wordt het PDF-document opgehaald dat naar de
MyApplication/EncryptDocument
service door eenjava.io.File
object. Geef een tekenreekswaarde door die de locatie van het PDF-document aangeeft. -
Een
javax.activation.DataHandler
object door de constructor ervan te gebruiken en een object door te gevenjavax.activation.FileDataSource
object. Dejavax.activation.FileDataSource
object kan worden gemaakt door de constructor ervan te gebruiken en het object door te gevenjava.io.File
object dat staat voor het PDF-document. -
Een
org.apache.axis.attachments.AttachmentPart
object door de constructor ervan te gebruiken en door te gevenjavax.activation.DataHandler
object. -
Koppel de bijlage door de
EncryptDocumentSoapBindingStub
objectaddAttachment
en het doorgeven van deorg.apache.axis.attachments.AttachmentPart
object. -
Een
BLOB
object met behulp van de constructor. Vul deBLOB
object met de waarde van de bijlage-id door deBLOB
objectsetAttachmentID
en geeft u de waarde van de bijlage-id door. Deze waarde kan worden verkregen door hetorg.apache.axis.attachments.AttachmentPart
objectgetContentId
methode. -
De
MyApplication/EncryptDocument
proces door hetEncryptDocumentSoapBindingStub
objectinvoke
methode. Geef deBLOB
object dat de DIME-bijlage bevat. Met dit proces wordt een versleuteld PDF-document binnen eenBLOB
object. -
Haal de waarde van de gehechtherkenner door teruggekeerde aan te halen
BLOB
objectgetAttachmentID
methode. Deze methode retourneert een tekenreekswaarde die de id-waarde van de geretourneerde bijlage vertegenwoordigt. -
Haal de bijlagen op door de
EncryptDocumentSoapBindingStub
objectgetAttachments
methode. Deze methode retourneert een array metObjects
die de bijlagen vertegenwoordigen. -
Doorlopen van de bijlagen (de
Object
(array) en gebruik de waarde van de bijlage-id om het gecodeerde PDF-document te verkrijgen. Elk element is eenorg.apache.axis.attachments.AttachmentPart
object. -
Verkrijg
javax.activation.DataHandler
object dat aan de bijlage is gekoppeld door hetorg.apache.axis.attachments.AttachmentPart
objectgetDataHandler
methode. -
Vraag een
java.io.FileStream
door het object aan te roepenjavax.activation.DataHandler
objectgetInputStream
methode. -
Maak een bytearray en geef die bytearray door aan de
java.io.FileStream
objectread
methode. Met deze methode wordt de bytearray gevuld met een gegevensstroom die het gecodeerde PDF-document vertegenwoordigt. -
Een
java.io.File
object met behulp van de constructor. Dit object staat voor het gecodeerde PDF-document. -
Een
java.io.FileOutputStream
object door de constructor ervan te gebruiken en door te gevenjava.io.File
object. -
De
java.io.FileOutputStream
objectwrite
en geeft u 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 van elke AEM Forms AuthenticationManager-API die een AuthResult
object. U kunt een AuthResult
instantie 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. nochtans, kunt u de certificaatauthentificatie ook gebruiken.
- Met de
AuthenticationManager.getAuthResultOnBehalfOfUser
methode. Met deze methode kan een clienttoepassing eenAuthResult
-object voor alle gebruikers van AEM formulieren.
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 specifieke gebruiker wilt verpersoonlijken, roept u de AuthenticationManager.getAuthResultOnBehalfOfUser
met een webservice. Deze methode retourneert een AuthResult
instantie die de bevestiging SAML 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 bevestiging als deel van de kopbal van de ZEEP. 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 Java-proxyklassen maken met Apache Axis.)
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. Om een manager te registreren, creeer een klasse van Java die uitbreidt org.apache.axis.handlers.BasicHandler
.
Creeer een AssertionHandler met As
De volgende Java-klasse, genaamd AssertionHandler.java
toont een voorbeeld van een Java-klasse die een uitbreiding vormt org.apache.axis.handlers.BasicHandler
.
public class AssertionHandler extends BasicHandler {
public void invoke(MessageContext ctx) throws AxisFault {
String assertion = (String) ctx.getProperty(LC_ASSERTION);
//no assertion hence nothing to insert
if(assertion == null) return;
try {
MessageElement samlElement = new MessageElement(convertToXML(assertion));
SOAPHeader header = (SOAPHeader) ctx.getRequestMessage().getSOAPHeader();
//Create the wsse:Security element which would contain the SAML element
SOAPElement wsseHeader = header.addChildElement("Security", "wsse", WSSE_NS);
wsseHeader.appendChild(samlElement);
//remove the actor attribute as in LC we do not specify any actor. This would not remove the actor attribute though
//it would only remove it from the soapenv namespace
wsseHeader.getAttributes().removeNamedItem("actor");
} catch (SOAPException e) {
throw new AxisFault("Error occured while adding the assertion to the SOAP Header",e);
}
}
}
De handler registreren
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>
Een AEM Forms-service aanroepen
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 Het creëren van een .NET project dat DIME gebruikt.
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 verzoek van de ZEEP wijzigen. Voor volledige details, zie de Verbeteringen 3.0 van de Dienst van het Web documentatie.
De bevestiging en het filter maken
In het volgende C#-codevoorbeeld worden filter- en assertieklassen gemaakt. In dit codevoorbeeld wordt een SamlAssertionOutputFilter gemaakt. Dit filter wordt aangehaald door het kader van WSE alvorens het verzoek van de ZEEP 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);
}
}
SAML-token maken
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 de SOAP-aanvraag.
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);
}
. . .
}
Een AEM Forms-service aanroepen
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 om een de dienstverrichting van AEM Forms, zoals te asynchroon aan te halen genereert PDF htmlToPDF
operation, a SoapFaultException
voorkomt. Om dit probleem op te lossen, maakt u een XML-bestand met aangepaste binding dat het ExportPDF_Result
element en andere elementen in verschillende klassen. 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 Java-proxyklassen maken met JAX-WS.)
Verwijs dit dossier van XML wanneer het uitvoeren van het JAX-WS hulpmiddel (wsimport.exe) door - te gebruiken b
opdrachtregeloptie. Werk de wsdlLocation
-element in het XML-bindingsbestand om de URL van AEM Forms op te geven.
Om ervoor te zorgen dat asynchrone aanroep werkt, wijzigt u de URL-eindpuntwaarde en geeft u async=true
. Voor Java-proxybestanden die met JAX-WS zijn gemaakt, geeft u bijvoorbeeld 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:
- PDFG3D
- 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 AEM Forms-gegevenstypen, zoals PrincipalReference
, worden anders gedefinieerd wanneer AEM Forms op WebSphere wordt geïmplementeerd in vergelijking met 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 bevat BLOB
gegevenstype aan het zelfde .NET cliëntproject. 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 u aangeraden 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 de dienstverwijzingen zullen bevatten BLOB
klasse. Als u een BLOB
-instantie volledig te kwalificeren BLOB
-object wanneer u het declareert. Deze benadering wordt getoond in het volgende codevoorbeeld. Voor informatie over dit codevoorbeeld, zie Interactieve Forms digitaal ondertekenen.
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 SignInteractiveForm.ServiceReference2
naamruimte. Evenzo geldt dat de BLOB
-instantie die is gekoppeld aan de handtekeningservice behoort tot de SignInteractiveForm.ServiceReference1
naamruimte. 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 a XML form data
string path = "C:\\Adobe\Loan.xml";
FileStream fs = new FileStream(path, FileMode.Open);
//Get the length of the file stream
int len = (int)fs.Length;
byte[] ByteArray = new byte[len];
fs.Read(ByteArray, 0, len);
formData.MTOM = ByteArray;
//Specify a XML form data
string path2 = "C:\\Adobe\LoanSigXFA.pdf";
FileStream fs2 = new FileStream(path2, FileMode.Open);
//Get the length of the file stream
int len2 = (int)fs2.Length;
byte[] ByteArray2 = new byte[len2];
fs2.Read(ByteArray2, 0, len2);
pdfForm.MTOM = ByteArray2;
PDFFormRenderSpec renderSpec = new PDFFormRenderSpec();
renderSpec.generateServerAppearance = true;
//Set out parameter values
long pageCount = 1;
String localValue = "en_US";
FormsResult result = new FormsResult();
//Render an interactive PDF form
formsClient.renderPDFForm2(
pdfForm,
formData,
renderSpec,
null,
null,
out pageCount,
out localValue,
out result);
//Write the data stream to the BLOB object
SignInteractiveForm.ServiceReference2.BLOB outForm = result.outputContent;
return outForm;
}
catch (Exception ee)
{
Console.WriteLine(ee.Message);
}
return null;
}
//Sign the form -- invoke the Signature service
private static void SignForm(SignInteractiveForm.ServiceReference1.BLOB inDoc)
{
try
{
//Create a SignatureServiceClient object
SignatureServiceClient signatureClient = new SignatureServiceClient();
signatureClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/SignatureService?blob=mtom");
//Enable BASIC HTTP authentication
BasicHttpBinding b = (BasicHttpBinding)signatureClient.Endpoint.Binding;
b.MessageEncoding = WSMessageEncoding.Mtom;
signatureClient.ClientCredentials.UserName.UserName = "administrator";
signatureClient.ClientCredentials.UserName.Password = "password";
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
b.MaxReceivedMessageSize = 2000000;
b.MaxBufferSize = 2000000;
b.ReaderQuotas.MaxArrayLength = 2000000;
//Specify the name of the signature field
string fieldName = "form1[0].grantApplication[0].page1[0].SignatureField1[0]";
//Create a Credential object
Credential myCred = new Credential();
myCred.alias = "secure";
//Specify the reason to sign the document
string reason = "The document was reviewed";
//Specify the location of the signer
string location = "New York HQ";
//Specify contact information
string contactInfo = "Tony Blue";
//Create a PDFSignatureAppearanceOptions object
//and show date information
PDFSignatureAppearanceOptionSpec appear = new PDFSignatureAppearanceOptionSpec();
appear.showDate = true;
//Sign the PDF document
SignInteractiveForm.ServiceReference1.BLOB signedDoc = signatureClient.sign(
inDoc,
fieldName,
myCred,
HashAlgorithm.SHA1,
reason,
location,
contactInfo,
appear,
true,
null,
null,
null);
//Populate a byte array with BLOB data that represents the signed form
byte[] outByteArray = signedDoc.MTOM;
//Save the signed PDF document
string fileName = "C:\\Adobe\LoanXFASigned.pdf";
FileStream fs2 = new FileStream(fileName, FileMode.OpenOrCreate);
//Create a BinaryWriter object
BinaryWriter w = new BinaryWriter(fs2);
w.Write(outByteArray);
w.Close();
fs2.Close();
}
catch (Exception ee)
{
Console.WriteLine(ee.Message);
}
}
}
}
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 in het geval van IBMFileNetContentRepositoryConnector is bijvoorbeeld BMFileNetContentRepositoryConnectorClient
. De letter I ontbreekt in de gegenereerde proxyklasse.