Show Menu
TEMAS×

Invocación de AEM Forms mediante servicios Web

La mayoría de los servicios de AEM Forms del contenedor de servicios están configurados para exponer un servicio Web, con compatibilidad total con la generación del lenguaje de definición de servicio Web (WSDL). Es decir, puede crear objetos proxy que consuman la pila de SOAP nativa de un servicio de AEM Forms. Como resultado, los servicios de AEM Forms pueden intercambiar y procesar los siguientes mensajes SOAP:
  • Solicitud SOAP: Enviado a un servicio de Forms por una aplicación cliente que solicita una acción.
  • Respuesta SOAP: Enviado a una aplicación cliente por un servicio de Forms después de procesar una solicitud SOAP.
Con los servicios Web, puede realizar las mismas operaciones de servicios de AEM Forms que con la API de Java. Una ventaja de utilizar servicios Web para invocar servicios de AEM Forms es que puede crear una aplicación cliente en un entorno de desarrollo que admita SOAP. Una aplicación cliente no está vinculada a un entorno de desarrollo o lenguaje de programación específicos. Por ejemplo, puede crear una aplicación cliente utilizando Microsoft Visual Studio .NET y C# como lenguaje de programación.
Los servicios de AEM Forms se exponen a través del protocolo SOAP y son compatibles con WSI Basic Perfil 1.1. La interoperabilidad de los servicios Web (WSI) es una organización de estándares abiertos que promueve la interoperabilidad de los servicios Web entre plataformas. Para obtener más información, consulte https://www.ws-i.org/ .
AEM Forms admite los siguientes estándares de servicio Web:
  • Codificación : Solo admite codificación de documento y literal (que es la codificación preferida según el Perfil básico de WSI). (Consulte Invocación de AEM Forms mediante codificación Base64).
  • MTOM : Representa una forma de codificar datos adjuntos con solicitudes SOAP. (Consulte Invocación de AEM Forms mediante MTOM ).
  • SwaRef : Representa otra forma de codificar datos adjuntos con solicitudes SOAP. (Consulte Invocación de AEM Forms mediante SwaRef ).
  • SOAP con datos adjuntos : Admite MIME y DIME (Encapsulación directa de mensajes de Internet). Estos protocolos son formas estándar de enviar archivos adjuntos a través de SOAP. Las aplicaciones Microsoft Visual Studio .NET utilizan DIME. (Consulte Invocación de AEM Forms mediante codificación Base64).
  • WS-Security : Admite un perfil de token de contraseña de nombre de usuario, que es una forma estándar de enviar nombres de usuario y contraseñas como parte del encabezado SOAP de seguridad de WS. AEM Forms también admite la autenticación básica HTTP. (Consulte Paso de credenciales mediante encabezados WS-Security).
Para invocar servicios de AEM Forms mediante un servicio Web, normalmente se crea una biblioteca proxy que consume el servicio WSDL. La sección Invocar AEM Forms mediante servicios Web utiliza JAX-WS para crear clases proxy de Java e invocar servicios. (Consulte Creación de clases proxy de Java mediante JAX-WS ).
Puede recuperar un WDSL de servicio especificando la siguiente definición de URL (los elementos entre corchetes son opcionales):
 https://<your_serverhost>:<your_port>/soap/services/<service_name>?wsdl[&version=<version>][&async=true|false][lc_version=<lc_version>]

donde:
  • your_serverhost representa la dirección IP del servidor de aplicaciones J2EE que aloja AEM Forms.
  • your_port representa el puerto HTTP que utiliza el servidor de aplicaciones J2EE.
  • service_name representa el nombre del servicio.
  • la versión representa la versión de destinatario de un servicio (se utiliza la última versión de servicio de forma predeterminada).
  • async especifica el valor true para habilitar operaciones adicionales para la invocación asincrónica ( false de forma predeterminada).
  • lc_version representa la versión de AEM Forms que desea invocar.
La tabla siguiente lista las definiciones de WSDL del servicio (suponiendo que AEM Forms se implementa en el host local y que el anuncio es 8080).
Servicio
Definición WSDL
Ensamblador
http://localhost:8080/soap/services/ AssemblerService?wsdl
Atrás y restaurar
http://localhost:8080/soap/services/BackupService?wsdl
formularios con códigos de barras
http://localhost:8080/soap/services/ BarcodedFormsService?wsdl
Convertir PDF
http://localhost:8080/soap/services/ ConvertPDFService?wsdl
Distiller
http://localhost:8080/soap/services/ DistillerService?wsdl
DocConverter
http://localhost:8080/soap/services/DocConverterService?WSDL
DocumentManagement
http://localhost:8080/soap/services/DocumentManagementService?WSDL
Cifrado
http://localhost:8080/soap/services/EncryptionService?wsdl
Forms
http://localhost:8080/soap/services/FormsService?wsdl
Integración de datos de formulario
http://localhost:8080/soap/services/FormDataIntegration?wsdl
Generar PDF
http://localhost:8080/soap/services/ GeneratePDFService?wsdl
Generar PDF 3D
http://localhost:8080/soap/services/Generate3dPDFService?WSDL
Salida
http://localhost:8080/soap/services/ OutputService?wsdl
Utilidades de PDF
http://localhost:8080/soap/services/ PDFUtilityService?wsdl
Extensiones de Acrobat Reader DC
http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl
Repositorio
http://localhost:8080/soap/services/ RepositoryService?wsdl
Rights Management
http://localhost:8080/soap/services/ RightsManagementService?wsdl
Firma
http://localhost:8080/soap/services/ SignatureService?wsdl
XMP Utilidades
http://localhost:8080/soap/services/ XMPUtilityService?wsdl
Definiciones de WSDL del proceso de AEM Forms
Debe especificar el nombre de la aplicación y el nombre del proceso en la definición WSDL para acceder a un WSDL que pertenece a un proceso creado en Workbench. Supongamos que el nombre de la aplicación es MyApplication y que el nombre del proceso es EncryptDocument . En este caso, especifique la siguiente definición WSDL:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl

Para obtener más información sobre el proceso de corta duración de ejemplo MyApplication/EncryptDocument , consulte Ejemplo Explicación de los procesos de AEM Forms de proceso de corta duración.
Una aplicación puede contener carpetas. En este caso, especifique los nombres de carpeta en la definición WSDL:
 http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl

Acceso a nuevas funciones mediante servicios Web
Se puede acceder a la nueva funcionalidad de servicio de AEM Forms mediante los servicios Web. Por ejemplo, en AEM Forms, se introduce la capacidad de codificar archivos adjuntos mediante MTOM. (Consulte Invocación de AEM Forms mediante MTOM ).
Para acceder a las nuevas funciones introducidas en AEM Forms, especifique el lc_version atributo en la definición WSDL. Por ejemplo, para acceder a la nueva funcionalidad de servicio (incluida la compatibilidad con MTOM), especifique la siguiente definición WSDL:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl&lc_version=9.0.1

Al configurar el lc_version atributo, asegúrese de que utiliza tres dígitos. Por ejemplo, 9.0.1 es igual a la versión 9.0.
Tipo de datos BLOB de servicio Web
Los WSDL del servicio AEM Forms definen muchos tipos de datos. Uno de los tipos de datos más importantes expuestos en un servicio Web es un BLOB tipo. Este tipo de datos se asigna a la com.adobe.idp.Document clase cuando se trabaja con las API de Java de AEM Forms. (Consulte Paso de datos a servicios de AEM Forms mediante la API de Java).
Un BLOB objeto envía y recupera datos binarios (por ejemplo, archivos PDF, datos XML, etc.) desde y hacia los servicios de AEM Forms. El tipo BLOB se define en un WSDL de servicio de la siguiente manera:
 <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>

Los campos MTOM y swaRef solo se admiten en AEM Forms. Estos campos nuevos solo se pueden usar si se especifica una URL que incluya la lc_version propiedad.
Suministro de objetos BLOB en solicitudes de servicio
Si una operación de servicio de AEM Forms requiere un BLOB tipo como valor de entrada, cree una instancia del BLOB tipo en la lógica de la aplicación. (Muchos de los inicios rápidos del servicio Web ubicados en Programación con formularios AEM muestran cómo trabajar con un tipo de datos BLOB).
Asigne valores a los campos que pertenecen a la BLOB instancia de la siguiente manera:
  • Base64 : Para pasar datos como texto codificado en formato Base64, establezca los datos en el BLOB.binaryData campo y defina el tipo de datos en formato MIME (por ejemplo application/pdf ) en el BLOB.contentType campo. (Consulte Invocación de AEM Forms mediante codificación Base64).
  • MTOM : Para pasar datos binarios en un archivo adjunto MTOM, establezca los datos en el BLOB.MTOM campo. Esta configuración adjunta los datos a la solicitud SOAP mediante el marco JAX-WS de Java o la API nativa del marco SOAP. (Consulte Invocación de AEM Forms mediante MTOM ).
  • SwaRef : Para pasar datos binarios en un archivo adjunto WS-I SwaRef, establezca los datos en el BLOB.swaRef campo. Esta configuración adjunta los datos a la solicitud SOAP mediante el marco JAX-WS de Java. (Consulte Invocación de AEM Forms mediante SwaRef ).
  • Datos adjuntos MIME o DIME: Para pasar datos en un archivo adjunto MIME o DIME, adjunte los datos a la solicitud SOAP mediante la API nativa del marco SOAP. Establezca el identificador de datos adjuntos en el BLOB.attachmentID campo. (Consulte Invocación de AEM Forms mediante codificación Base64).
  • Dirección URL remota: Si los datos están alojados en un servidor web y se puede acceder a ellos a través de una URL HTTP, establezca la URL HTTP en el BLOB.remoteURL campo. (Consulte Invocación de AEM Forms mediante datos BLOB a través de HTTP ).
Acceso a datos en objetos BLOB devueltos por servicios
El protocolo de transmisión de los objetos devueltos BLOB depende de varios factores, que se consideran en el siguiente orden, que se detienen cuando se cumple la condición principal:
  1. La URL de destinatario especifica el protocolo de transmisión. Si la URL de destinatario especificada en la invocación SOAP contiene el parámetro blob=" BLOB_TYPE ", BLOB_TYPE determina el protocolo de transmisión. BLOB_TYPE es un marcador de posición para base64, DIME, Mime, http, Mtom o swaref.
  2. El extremo SOAP de servicio es inteligente . Si las condiciones siguientes son verdaderas, los documentos de salida se devuelven utilizando el mismo protocolo de transmisión que los documentos de entrada:
    • El parámetro de extremo SOAP del servicio Protocolo predeterminado para objetos de blob de salida se establece en Smart.
      Para cada servicio con un extremo SOAP, la consola de administración permite especificar el protocolo de transmisión para cualquier blobs devuelto. (Consulte la ayuda de administración).
    • El servicio AEM Forms toma uno o más documentos como entrada.
  3. El extremo SOAP de servicio no es inteligente . El protocolo configurado determina el protocolo de transmisión de documento y los datos se devuelven en el BLOB campo correspondiente. Por ejemplo, si el punto final de SOAP está establecido en DIME, el botón devuelto estará en el blob.attachmentID campo independientemente del protocolo de transmisión de cualquier documento de entrada.
  4. De lo contrario . Si un servicio no toma el tipo de documento como entrada, se devuelven los documentos de salida en el BLOB.remoteURL campo sobre el protocolo HTTP.
Como se describe en la primera condición, puede garantizar el tipo de transmisión para cualquier documentos devuelto extendiendo la dirección URL del extremo SOAP con un sufijo como se indica a continuación:
     https://<your_serverhost>:<your_port>/soap/services/<service
     name>?blob=base64|dime|mime|http|mtom|swaref

Esta es la correlación entre los tipos de transmisión y el campo desde el cual se obtienen los datos:
  • Formato Base64: Configure el blob sufijo para que base64 devuelva los datos en el BLOB.binaryData campo.
  • Datos adjuntos MIME o DIME: Establezca el blob sufijo en DIME o MIME para devolver los datos como un tipo de datos adjuntos correspondiente con el identificador de datos adjuntos devuelto en el BLOB.attachmentID campo. Utilice la API patentada del marco SOAP para leer los datos del archivo adjunto.
  • Dirección URL remota: Establezca el blob sufijo para http mantener los datos en el servidor de aplicaciones y devolver la URL que apunta a los datos del BLOB.remoteURL campo.
  • MTOM o SwaRef : Establezca el blob sufijo en mtom o swaref para devolver los datos como un tipo de datos adjuntos correspondiente con el identificador de datos adjuntos devuelto en los BLOB.MTOM campos o BLOB.swaRef . Utilice la API nativa del marco SOAP para leer los datos del archivo adjunto.
Se recomienda no superar los 30 MB al rellenar un BLOB objeto invocando su setBinaryData método. De lo contrario, existe la posibilidad de que se produzca una OutOfMemory excepción.
Las aplicaciones basadas en JAX WS que utilizan el protocolo de transmisión MTOM están limitadas a 25 MB de datos enviados y recibidos. Esta limitación se debe a un error en JAX-WS. Si el tamaño combinado de los archivos enviados y recibidos supera los 25 MB, utilice el protocolo de transmisión SwaRef en lugar del MTOM. De lo contrario, existe la posibilidad de una OutOfMemory excepción.
Transmisión MTOM de matrices de bytes con codificación base64
Además del BLOB objeto, el protocolo MTOM admite cualquier parámetro de matriz de bytes o campo de matriz de bytes de un tipo complejo. Esto significa que los marcos SOAP de cliente que admiten MTOM pueden enviar cualquier xsd:base64Binary elemento como datos adjuntos MTOM (en lugar de un texto con codificación base64). Los extremos SOAP de AEM Forms pueden leer este tipo de codificación de matriz de bytes. Sin embargo, el servicio AEM Forms siempre devuelve un tipo de matriz de bytes como texto codificado en base64. Los parámetros de matriz de bytes de salida no admiten MTOM.
Los servicios de AEM Forms que devuelven una gran cantidad de datos binarios utilizan el tipo Documento/BLOB en lugar del tipo de matriz de bytes. El tipo de Documento es mucho más eficaz para transmitir grandes cantidades de datos.

Tipos de datos del servicio Web

La siguiente tabla lista los tipos de datos Java y muestra el tipo de datos correspondiente del servicio Web.
Tipo de datos Java
Tipo de datos del servicio Web
java.lang.byte[]
xsd:base64Binary
java.lang.Boolean
xsd:boolean
java.util.Date
El DATE tipo, que se define en un WSDL de servicio de la siguiente manera:
<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>
Si una operación de servicio de AEM Forms toma un java.util.Date valor como entrada, la aplicación cliente SOAP debe pasar la fecha en el DATE.date campo. Si se establece el DATE.calendar campo en este caso, se produce una excepción de tiempo de ejecución. Si el servicio devuelve un valor java.util.Date , la fecha se devuelve en el DATE.date campo.
java.util.Calendar
El DATE tipo, que se define en un WSDL de servicio de la siguiente manera:
<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>
Si una operación de servicio de AEM Forms toma un java.util.Calendar valor como entrada, la aplicación cliente SOAP debe pasar la fecha en el DATE.caledendar campo. Si se establece el DATE.date campo en este caso, se produce una excepción en tiempo de ejecución. Si el servicio devuelve un java.util.Calendar , la fecha se devuelve en el DATE.calendar campo.
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
El apachesoap:Map , que se define en un WSDL de servicio de la siguiente manera:
<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>
El mapa se representa como una secuencia de pares clave/valor.
java.lang.Object
$1
java.lang.Short
xsd:short
java.lang.String
xsd:string
org.w3c.dom.Document
El tipo XML, que se define en un WSDL de servicio de la siguiente manera:
<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>
Si una operación de servicio de AEM Forms acepta un org.w3c.dom.Document valor, pase los datos XML en el XML.document campo.
La configuración del XML.element campo provoca una excepción de tiempo de ejecución. Si el servicio devuelve un org.w3c.dom.Document , los datos XML se devuelven en el XML.document campo.
org.w3c.dom.Element
El tipo XML, que se define en un WSDL de servicio de la siguiente manera:
<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>
Si una operación de servicio de AEM Forms toma una entrada org.w3c.dom.Element como entrada, pase los datos XML en el XML.element campo.
La configuración del XML.document campo provoca una excepción de tiempo de ejecución. Si el servicio devuelve un org.w3c.dom.Element , los datos XML se devuelven en el XML.element campo.
Sitio web de Adobe Developer
El sitio web de desarrolladores de Adobe contiene el siguiente artículo que analiza la invocación de servicios de AEM Forms mediante la API de servicio web:
Al invocar servicios Web mediante componentes personalizados, se describe cómo crear un componente de AEM Forms que invoque servicios Web de terceros.

Creación de clases proxy de Java mediante JAX-WS

Puede utilizar JAX-WS para convertir un servicio de Forms WSDL a clases proxy de Java. Estas clases le permiten invocar operaciones de servicios de AEM Forms. Apache Ant permite crear una secuencia de comandos de compilación que genera clases proxy de Java haciendo referencia a un WSDL de servicio de AEM Forms. Puede generar archivos proxy JAX-WS siguiendo estos pasos:
  1. Instale Apache Ant en el equipo cliente. (Consulte https://ant.apache.org/bindownload.cgi ).
    • Añada el directorio bin a la ruta de clases.
    • Configure la variable de ANT_HOME entorno en el directorio donde instaló Ant.
  2. Instale JDK 1.6 o posterior.
    • Añada el directorio bin JDK a la ruta de clases.
    • Añada el directorio bin JRE a la ruta de clases. Esta bandeja se encuentra en el [JDK_INSTALL_LOCATION]/jre directorio.
    • Configure la variable de JAVA_HOME entorno en el directorio donde instaló el JDK.
    JDK 1.6 incluye el programa wsimport utilizado en el archivo build.xml. JDK 1.5 no incluye ese programa.
  3. Instale JAX-WS en el equipo cliente. (Consulte API de Java para servicios Web XML).
  4. Utilice JAX-WS y Apache Ant para generar clases proxy de Java. Cree una secuencia de comandos de creación de hormigas para llevar a cabo esta tarea. La siguiente secuencia de comandos es una secuencia de comandos de compilación de Ant de muestra denominada build.xml:
     <?xml version="1.0" encoding="UTF-8"?>
     
     <project basedir="." default="compile">
     
     <property name="port" value="8080" />
     <property name="host" value="localhost" />
     <property name="username" value="administrator" />
     <property name="password" value="password" />
     <property name="tests" value="all" />
     
     <target name="clean" >
            <delete dir="classes" />
     </target>
     
     <target name="wsdl" depends="clean">
            <mkdir dir="classes"/>
            <exec executable="wsimport" failifexecutionfails="false" failonerror="true" resultproperty="foundWSIMPORT">
                <arg line="-keep -d classes https://${host}:${port}/soap/services/EncryptionService?wsdl&lc_version=9.0.1"/>
            </exec>
            <fail unless="foundWSIMPORT">
               !!! Failed to execute JDK's wsimport tool. Make sure that JDK 1.6 (or later) is on your PATH !!!
            </fail>
     </target>
     
     <target name="compile" depends="clean, wsdl" >
          <javac destdir="./classes" fork="true" debug="true">
             <src path="./src"/>
          </javac>
     </target>
     
     <target name="run">
          <java classname="Client" fork="yes" failonerror="true" maxmemory="200M">
             <classpath>
               <pathelement location="./classes"/>
             </classpath>
             <arg value="${port}"/>
             <arg value="${host}"/>
             <arg value="${username}"/>
             <arg value="${password}"/>
             <arg value="${tests}"/>
          </java>
     </target>
     </project>
    
    
    En esta secuencia de comandos de compilación de Ant, observe que la url propiedad está establecida para hacer referencia al WSDL del servicio de cifrado que se ejecuta en localhost. Las propiedades username y password deben configurarse en un nombre de usuario y una contraseña de formularios AEM válidos. Observe que la dirección URL contiene el lc_version atributo. Sin especificar la lc_version opción, no puede invocar nuevas operaciones de servicio de AEM Forms.
    Reemplazar EncryptionService por el nombre del servicio de AEM Forms que desea invocar mediante clases proxy de Java. Por ejemplo, para crear clases proxy de Java para el servicio Rights Management, especifique:
     http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
    
    
  5. Cree un archivo BAT para ejecutar la secuencia de comandos de compilación de Ant. El siguiente comando se encuentra dentro de un archivo BAT responsable de ejecutar la secuencia de comandos de compilación de Ant:
     ant -buildfile "build.xml" wsdl
    
    
    Coloque el script de compilación ANT en el directorio C:\Program Files\Java\jaxws-ri\bin directory. El script escribe los archivos JAVA en el .carpeta /classes. La secuencia de comandos genera archivos JAVA que pueden invocar el servicio.
  6. Empaquete los archivos JAVA en un archivo JAR. Si está trabajando en Eclipse, siga estos pasos:
    • Cree un nuevo proyecto Java que se utilice para empaquetar los archivos JAVA proxy en un archivo JAR.
    • Cree una carpeta de origen en el proyecto.
    • Cree un com.adobe.idp.services paquete en la carpeta Origen.
    • Seleccione el com.adobe.idp.services paquete y, a continuación, importe los archivos JAVA de la carpeta adobe/idp/services en el paquete.
    • Si es necesario, cree un org/apache/xml/xmlsoap paquete en la carpeta Origen.
    • Seleccione la carpeta de origen y, a continuación, importe los archivos JAVA desde la carpeta org/apache/xml/xmlsoap.
    • Establezca el nivel de cumplimiento del compilador Java en 5.0 o bueno.
    • Cree el proyecto.
    • Exporte el proyecto como archivo JAR.
    • Importe este archivo JAR en la ruta de clases de un proyecto cliente. Además, importe todos los archivos JAR ubicados en <Directorio de instalación>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty.
    Todos los inicios rápidos del servicio Web Java (excepto el servicio Forms) ubicados en Programación con formularios AEM crean archivos proxy de Java mediante JAX-WS. Además, todos los inicios rápidos del servicio Web Java utilizan SwaRef. (Consulte Invocación de AEM Forms mediante SwaRef ).
Consulte también

Creación de clases proxy de Java mediante el eje Apache

Puede utilizar la herramienta Apache Axis WSDL2Java para convertir un servicio de Forms en clases proxy de Java. Estas clases le permiten invocar operaciones de servicio de Forms. Con Apache Ant, puede generar archivos de biblioteca del eje a partir de un WSDL de servicio. Puede descargar Apache Axis en la dirección URL https://ws.apache.org/axis/ .
Los inicios rápidos del servicio Web asociados con el servicio Forms utilizan clases proxy de Java creadas con el eje Apache. Los inicios rápidos del servicio Web de Forms también utilizan Base64 como tipo de codificación. (Consulte Inicios rápidos de la API de servicio de Forms).
Puede generar archivos de biblioteca de Java del eje siguiendo estos pasos:
  1. Instale Apache Ant en el equipo cliente. Está disponible en https://ant.apache.org/bindownload.cgi .
    • Añada el directorio bin a la ruta de clases.
    • Configure la variable de ANT_HOME entorno en el directorio donde instaló Ant.
  2. Instale Apache Axis 1.4 en el equipo cliente. Está disponible en https://ws.apache.org/axis/ .
  3. Configure la ruta de clases para utilizar los archivos JAR del eje en el cliente de servicios web, tal como se describe en las instrucciones de instalación del eje en https://ws.apache.org/axis/java/install.html .
  4. Utilice la herramienta Apache WSDL2Java en Axis para generar clases proxy de Java. Cree una secuencia de comandos de creación de hormigas para llevar a cabo esta tarea. La siguiente secuencia de comandos es una secuencia de comandos de compilación de Ant de muestra denominada build.xml:
     <?xml version="1.0"?>
     <project name="axis-wsdl2java">
     
     <path id="axis.classpath">
     <fileset dir="C:\axis-1_4\lib" >
         <include name="**/*.jar" />
     </fileset>
     </path>
     
     <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
     
     <target name="encryption-wsdl2java-client" description="task">
     <axis-wsdl2java
         output="C:\JavaFiles"
         testcase="false"
         serverside="false"
         verbose="true"
         username="administrator"
         password="password"
         url="http://localhost:8080/soap/services/EncryptionService?wsdl&lc_version=9.0.1" >
     </axis-wsdl2java>
     </target>
     
     </project>
    
    
    En esta secuencia de comandos de compilación de Ant, observe que la url propiedad está establecida para hacer referencia al WSDL del servicio de cifrado que se ejecuta en localhost. Las propiedades username y password deben configurarse en un nombre de usuario y una contraseña de formularios AEM válidos.
  5. Cree un archivo BAT para ejecutar la secuencia de comandos de compilación de Ant. El siguiente comando se encuentra dentro de un archivo BAT responsable de ejecutar la secuencia de comandos de compilación de Ant:
     ant -buildfile "build.xml" encryption-wsdl2java-client
    
    
    Los archivos JAVA se escriben en la propiedad C:\JavaFiles folder as specified by the output . Para invocar correctamente el servicio Forms, importe estos archivos JAVA en la ruta de clases.
    De forma predeterminada, estos archivos pertenecen a un paquete Java denominado com.adobe.idp.services . Se recomienda colocar estos archivos JAVA en un archivo JAR. A continuación, importe el archivo JAR en la ruta de clases de la aplicación cliente.
    Existen diferentes maneras de colocar archivos .JAVA en un JAR. Una forma es utilizar un IDE de Java como Eclipse. Cree un proyecto Java y un com.adobe.idp.services paquete (todos los archivos .JAVA pertenecen a este paquete). A continuación, importe todos los archivos .JAVA en el paquete. Por último, exporte el proyecto como archivo JAR.
  6. Modifique la dirección URL en la EncryptionServiceLocator clase para especificar el tipo de codificación. Por ejemplo, para utilizar base64, especifique ?blob=base64 para asegurarse de que el BLOB objeto devuelve datos binarios. Es decir, en la EncryptionServiceLocator clase, busque la siguiente línea de código:
     http://localhost:8080/soap/services/EncryptionService;
    
    
    y cambiarlo a:
     http://localhost:8080/soap/services/EncryptionService?blob=base64;
    
    
  7. Añada los siguientes archivos JAR del eje a la ruta de clases del proyecto Java:
    • activation.jar
    • axis.jar
    • commons-codec-1.3.jar
    • commons-collection-3.1.jar
    • commons-discovery.jar
    • commons-logging.jar
    • dom3-xml-apis-2.5.0.jar
    • jai_imageio.jar
    • jaxen-1.1-beta-9.jar
    • jaxrpc.jar
    • log4j.jar
    • mail.jar
    • saaj.jar
    • wsdl4j.jar
    • xalan.jar
    • xbean.jar
    • xercesImpl.jar
    Estos archivos JAR están en el [install directory]/Adobe/Adobe Experience Manager Forms/sdk/lib/thirdparty directorio.
Consulte también

Invocación de AEM Forms mediante codificación Base64

Puede invocar un servicio de AEM Forms mediante la codificación Base64. La codificación Base64 codifica los datos adjuntos que se envían con una solicitud de invocación de servicio Web. Es decir, BLOB los datos están codificados en Base64, no en todo el mensaje SOAP.
"Invocar AEM Forms usando la codificación Base64" explica cómo invocar el siguiente proceso de corta duración de AEM Forms llamado MyApplication/EncryptDocument mediante la codificación Base64.
Este proceso no se basa en un proceso de AEM Forms existente. Para seguir el ejemplo de código, cree un proceso denominado MyApplication/EncryptDocument mediante Workbench. (Consulte Uso de Workbench .)
Cuando se invoca este proceso, realiza las siguientes acciones:
  1. Obtiene el documento PDF no seguro que se pasa al proceso. Esta acción se basa en la SetValue operación. El parámetro de entrada para este proceso es una variable de document proceso denominada inDoc .
  2. Codifica el documento PDF con una contraseña. Esta acción se basa en la PasswordEncryptPDF operación. El documento PDF cifrado con contraseña se devuelve en una variable de proceso denominada outDoc .

Creación de un ensamblado de cliente .NET que utilice codificación Base64

Puede crear un ensamblado de cliente .NET para invocar un servicio de Forms desde un proyecto .NET de Microsoft Visual Studio. Para crear un ensamblado de cliente .NET que utilice codificación base64, lleve a cabo los siguientes pasos:
  1. Cree una clase proxy basada en una URL de invocación de AEM Forms.
  2. Cree un proyecto de Microsoft Visual Studio .NET que genere el ensamblado de cliente .NET.
Creación de una clase proxy
Puede crear una clase proxy que se utilice para crear el ensamblado de cliente .NET mediante una herramienta que acompañe a Microsoft Visual Studio. El nombre de la herramienta es wsdl.exe y se encuentra en la carpeta de instalación de Microsoft Visual Studio. Para crear una clase proxy, abra el símbolo del sistema y navegue a la carpeta que contiene el archivo wsdl.exe. Para obtener más información sobre la herramienta wsdl.exe, consulte la Ayuda de MSDN .
Introduzca el siguiente comando en el símbolo del sistema:
 wsdl https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

De forma predeterminada, esta herramienta crea un archivo CS en la misma carpeta que se basa en el nombre del WSDL. En este caso, crea un archivo CS denominado EncryptDocumentService.cs . Utilice este archivo CS para crear un objeto proxy que le permita invocar el servicio especificado en la URL de invocación.
Modifique la dirección URL en la clase proxy para que se incluya ?blob=base64 a fin de asegurarse de que el BLOB objeto devuelve datos binarios. En la clase proxy, busque la siguiente línea de código:
 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument";

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

La sección Invocación de AEM Forms mediante codificación Base64 utiliza MyApplication/EncryptDocument como ejemplo. Si va a crear un ensamblado de cliente .NET para otro servicio de Forms, asegúrese de reemplazar MyApplication/EncryptDocument por el nombre del servicio.
Desarrollo del ensamblado de cliente .NET
Cree un proyecto de la biblioteca de clases de Visual Studio que genere un ensamblado de cliente .NET. El archivo CS que ha creado con wsdl.exe se puede importar en este proyecto. Este proyecto produce un archivo DLL (el ensamblado de cliente .NET) que puede utilizar en otros proyectos de Visual Studio .NET para invocar un servicio.
  1. Inicio Microsoft Visual Studio .NET.
  2. Cree un proyecto de la biblioteca de clases y asígnele el nombre DocumentService.
  3. Importe el archivo CS que ha creado mediante wsdl.exe.
  4. En el menú Proyecto , seleccione Añadir referencia .
  5. En el cuadro de diálogo Añadir referencia, seleccione System.Web.Services.dll .
  6. Click Select and then click OK .
  7. Compile y construya el proyecto.
Este procedimiento crea un ensamblado de cliente .NET denominado DocumentService.dll que puede utilizar para enviar solicitudes SOAP al MyApplication/EncryptDocument servicio.
Asegúrese de agregar ?blob=base64 a la dirección URL en la clase proxy que se utiliza para crear el ensamblado de cliente .NET. De lo contrario, no se pueden recuperar datos binarios del BLOB objeto.
Referencia al ensamblado de cliente .NET
Coloque el ensamblado de cliente .NET recién creado en el equipo en el que está desarrollando la aplicación cliente. Después de colocar el ensamblado de cliente .NET en un directorio, puede hacer referencia a él desde un proyecto. También haga referencia a la System.Web.Services biblioteca del proyecto. Si no hace referencia a esta biblioteca, no puede utilizar el ensamblado de cliente .NET para invocar un servicio.
  1. En el menú Proyecto , seleccione Añadir referencia .
  2. Click the .NET tab.
  3. Haga clic en Examinar y busque el archivo DocumentService.dll.
  4. Click Select and then click OK .
Invocación de un servicio mediante un ensamblado de cliente .NET que utiliza codificación Base64
Puede invocar el MyApplication/EncryptDocument servicio (que se creó en Workbench) mediante un ensamblado de cliente .NET que utilice la codificación Base64. Para invocar el MyApplication/EncryptDocument servicio, lleve a cabo los siguientes pasos:
  1. Cree un ensamblado de cliente de Microsoft .NET que consuma el WSDL del MyApplication/EncryptDocument servicio.
  2. Cree un proyecto cliente de Microsoft .NET. Haga referencia al ensamblado de cliente de Microsoft .NET en el proyecto de cliente. También haga referencia System.Web.Services .
  3. Mediante el ensamblado de cliente de Microsoft .NET, cree un MyApplication_EncryptDocumentService objeto invocando su constructor predeterminado.
  4. Defina la MyApplication_EncryptDocumentService propiedad del Credentials objeto con un System.Net.NetworkCredential objeto. En el System.Net.NetworkCredential constructor, especifique un nombre de usuario de formularios AEM y la contraseña correspondiente. Establezca los valores de autenticación para habilitar la aplicación cliente .NET para intercambiar correctamente mensajes SOAP con AEM Forms.
  5. Cree un BLOB objeto con su constructor. El BLOB objeto se utiliza para almacenar un pase de documento PDF al MyApplication/EncryptDocument proceso.
  6. Cree un System.IO.FileStream objeto invocando su constructor. Pase un valor de cadena que represente la ubicación del archivo del documento PDF y el modo en que se abre el archivo.
  7. Cree una matriz de bytes que almacene el contenido del System.IO.FileStream objeto. Puede determinar el tamaño de la matriz de bytes obteniendo la System.IO.FileStream propiedad del Length objeto.
  8. Rellene la matriz de bytes con datos de flujo invocando el System.IO.FileStream método Read del objeto. Pase la matriz de bytes, la posición inicial y la longitud del flujo para leerlos.
  9. Rellene el BLOB objeto asignando su binaryData propiedad con el contenido de la matriz de bytes.
  10. Invoque el MyApplication/EncryptDocument proceso invocando el MyApplication_EncryptDocumentService método del invoke objeto y pasando el BLOB objeto que contiene el documento PDF. Este proceso devuelve un documento PDF cifrado dentro de un BLOB objeto.
  11. Cree un System.IO.FileStream objeto invocando su constructor y pasando un valor de cadena que representa la ubicación del archivo del documento cifrado con contraseña.
  12. Cree una matriz de bytes que almacene el contenido de datos del BLOB objeto devuelto por el MyApplicationEncryptDocumentService método invoke del objeto. Rellene la matriz de bytes obteniendo el valor del miembro de BLOB datos del binaryData objeto.
  13. Cree un System.IO.BinaryWriter objeto invocando su constructor y pasando el System.IO.FileStream objeto.
  14. Escriba el contenido de la matriz de bytes en un archivo PDF invocando el System.IO.BinaryWriter método Write del objeto y pasando la matriz de bytes.

Invocación de un servicio mediante clases proxy Java y codificación Base64

Puede invocar un servicio de AEM Forms mediante las clases proxy de Java y Base64. Para invocar el MyApplication/EncryptDocument servicio mediante clases proxy de Java, lleve a cabo los siguientes pasos:
  1. Cree clases proxy de Java mediante JAX-WS que consuma el WSDL del MyApplication/EncryptDocument servicio. Utilice el siguiente extremo WSDL:
    https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    Reemplazar hiro-xp por la dirección IP del servidor de aplicaciones J2EE que aloja AEM Forms.
  2. Empaquete las clases proxy de Java creadas con JAX-WS en un archivo JAR.
  3. Incluya el archivo JAR de proxy Java y los archivos JAR ubicados en la siguiente ruta:
    <Directorio de instalación>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    en la ruta de clases del proyecto de cliente Java.
  4. Cree un MyApplicationEncryptDocumentService objeto con su constructor.
  5. Cree un MyApplicationEncryptDocument objeto invocando el MyApplicationEncryptDocumentService método getEncryptDocument del objeto.
  6. Defina los valores de conexión necesarios para invocar AEM Forms asignando valores a los siguientes miembros de datos:
    • Asigne el extremo WSDL y el tipo de codificación al javax.xml.ws.BindingProvider campo del ENDPOINT_ADDRESS_PROPERTY objeto. Para invocar el MyApplication/EncryptDocument servicio con codificación Base64, especifique el siguiente valor de URL:
      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64
    • Asigne el usuario de formularios AEM al campo del javax.xml.ws.BindingProvider objeto USERNAME_PROPERTY .
    • Asigne el valor de contraseña correspondiente al javax.xml.ws.BindingProvider campo del PASSWORD_PROPERTY objeto.
    El siguiente ejemplo de código muestra esta lógica de aplicación:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Recupere el documento PDF para enviarlo al MyApplication/EncryptDocument proceso creando un java.io.FileInputStream objeto mediante su constructor. Pase un valor de cadena que especifique la ubicación del documento PDF.
  8. Cree una matriz de bytes y rellénela con el contenido del java.io.FileInputStream objeto.
  9. Cree un BLOB objeto con su constructor.
  10. Rellene el BLOB objeto invocando su setBinaryData método y pasando la matriz de bytes. El objeto BLOB s setBinaryData es el método al que se llama cuando se utiliza la codificación Base64. Consulte Suministro de objetos BLOB en solicitudes de servicio.
  11. Invocar el MyApplication/EncryptDocument proceso invocando el MyApplicationEncryptDocument método invoke del objeto. Pase el BLOB objeto que contiene el documento PDF. El método invoke devuelve un BLOB objeto que contiene el documento PDF cifrado.
  12. Cree una matriz de bytes que contenga el documento PDF cifrado invocando el BLOB método getBinaryData del objeto.
  13. Guarde el documento PDF codificado como archivo PDF. Escriba la matriz de bytes en un archivo.
Consulte también

Invocación de AEM Forms mediante MTOM

Puede invocar los servicios de AEM Forms utilizando el MTOM estándar de servicio Web. Este estándar define cómo se transmiten los datos binarios, como un documento PDF, a través de Internet o de la intranet. Una característica de MTOM es el uso del XOP:Include elemento . Este elemento se define en la especificación XML Binary Optimized Packaging (XOP) para hacer referencia a los archivos adjuntos binarios de un mensaje SOAP.
La discusión aquí es sobre el uso de MTOM para invocar el siguiente proceso breve de AEM Forms llamado MyApplication/EncryptDocument .
Este proceso no se basa en un proceso de AEM Forms existente. Para seguir el ejemplo de código, cree un proceso denominado MyApplication/EncryptDocument mediante Workbench. (Consulte Uso de Workbench .)
Cuando se invoca este proceso, realiza las siguientes acciones:
  1. Obtiene el documento PDF no seguro que se pasa al proceso. Esta acción se basa en la SetValue operación. El parámetro de entrada para este proceso es una variable de document proceso denominada inDoc .
  2. Codifica el documento PDF con una contraseña. Esta acción se basa en la PasswordEncryptPDF operación. El documento PDF cifrado con contraseña se devuelve en una variable de proceso denominada outDoc .
Se agregó compatibilidad con MTOM en AEM Forms, versión 9.
Las aplicaciones basadas en JAX WS que utilizan el protocolo de transmisión MTOM están limitadas a 25 MB de datos enviados y recibidos. Esta limitación se debe a un error en JAX-WS. Si el tamaño combinado de los archivos enviados y recibidos supera los 25 MB, utilice el protocolo de transmisión SwaRef en lugar del MTOM. De lo contrario, existe la posibilidad de una OutOfMemory excepción.
La discusión aquí es sobre el uso de MTOM dentro de un proyecto de Microsoft .NET para invocar servicios de AEM Forms. .NET framework utilizado es 3.5 y el entorno de desarrollo es Visual Studio 2008. Si tiene instaladas mejoras en el servicio Web (WSE) en el equipo de desarrollo, elimínelo. El marco de trabajo de .NET 3.5 admite un marco de trabajo SOAP denominado Windows Communication Foundation (WCF). Al invocar AEM Forms mediante MTOM, solo se admite WCF (no WSE).

Creación de un proyecto de .NET que invoque un servicio mediante MTOM

Puede crear un proyecto de Microsoft .NET que pueda invocar un servicio de AEM Forms mediante servicios Web. En primer lugar, cree un proyecto de Microsoft .NET mediante Visual Studio 2008. Para invocar un servicio de AEM Forms, cree una referencia de servicio al servicio de AEM Forms que desee invocar en el proyecto. Cuando cree una referencia de servicio, especifique una URL para el servicio AEM Forms:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Reemplazar localhost por la dirección IP del servidor de aplicaciones J2EE que aloja AEM Forms. Reemplazar MyApplication/EncryptDocument por el nombre del servicio de AEM Forms que se va a invocar. Por ejemplo, para invocar una operación de Rights Management, especifique:
http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
La lc_version opción garantiza que la funcionalidad de AEM Forms, como MTOM, esté disponible. Sin especificar la lc_version opción, no puede invocar AEM Forms con MTOM.
Después de crear una referencia de servicio, los tipos de datos asociados con el servicio AEM Forms están disponibles para su uso en el proyecto .NET. Para crear un proyecto .NET que invoque un servicio de AEM Forms, lleve a cabo los siguientes pasos:
  1. Cree un proyecto .NET con Microsoft Visual Studio 2008.
  2. En el menú Proyecto , seleccione Añadir referencia de servicio.
  3. En el cuadro de diálogo Dirección , especifique el WSDL en el servicio AEM Forms. Por ejemplo,
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
  4. Click Go and then click OK .

Invocación de un servicio mediante MTOM en un proyecto .NET

Considere el MyApplication/EncryptDocument proceso que acepta un documento PDF no seguro y devuelve un documento PDF con contraseña cifrada. Para invocar el MyApplication/EncryptDocument proceso (que se generó en Workbench) mediante MTOM, lleve a cabo los siguientes pasos:
  1. Crear un proyecto de Microsoft .NET.
  2. Cree un MyApplication_EncryptDocumentClient objeto utilizando su constructor predeterminado.
  3. Cree un MyApplication_EncryptDocumentClient.Endpoint.Address objeto mediante el System.ServiceModel.EndpointAddress constructor. Pase un valor de cadena que especifique el WSDL al servicio AEM Forms y el tipo de codificación:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
    
    
    No es necesario usar el lc_version atributo. Este atributo se utiliza al crear una referencia de servicio. Sin embargo, asegúrese de especificar ?blob=mtom .
    Reemplazar hiro-xp por la dirección IP del servidor de aplicaciones J2EE que aloja AEM Forms.
  4. Cree un System.ServiceModel.BasicHttpBinding objeto obteniendo el valor del miembro de EncryptDocumentClient.Endpoint.Binding datos. Convierta el valor devuelto a BasicHttpBinding .
  5. Establezca el miembro de System.ServiceModel.BasicHttpBinding datos del MessageEncoding objeto en WSMessageEncoding.Mtom . Este valor garantiza que se utilice MTOM.
  6. Habilite la autenticación HTTP básica realizando las siguientes tareas:
    • Asigne el nombre de usuario de AEM formularios al miembro de datos MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName .
    • Asigne el valor de contraseña correspondiente al miembro de datos MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password .
    • Asigne el valor constante HttpClientCredentialType.Basic al miembro de datos BasicHttpBindingSecurity.Transport.ClientCredentialType .
    • Asigne el valor constante BasicHttpSecurityMode.TransportCredentialOnly al miembro de datos BasicHttpBindingSecurity.Security.Mode .
    El siguiente ejemplo de código muestra estas tareas.
     //Enable BASIC HTTP authentication
     encryptProcess.ClientCredentials.UserName.UserName = "administrator";
     encryptProcess.ClientCredentials.UserName.Password = "password";
     b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
     b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
     b.MaxReceivedMessageSize = 4000000;
     b.MaxBufferSize = 4000000;
     b.ReaderQuotas.MaxArrayLength = 4000000;
    
    
  7. Cree un BLOB objeto con su constructor. El BLOB objeto se utiliza para almacenar un documento PDF que se pasa al MyApplication/EncryptDocument proceso.
  8. Cree un System.IO.FileStream objeto invocando su constructor. Pase un valor de cadena que represente la ubicación del archivo del documento PDF y el modo en que se abre el archivo.
  9. Cree una matriz de bytes que almacene el contenido del System.IO.FileStream objeto. Puede determinar el tamaño de la matriz de bytes obteniendo la System.IO.FileStream propiedad del Length objeto.
  10. Rellene la matriz de bytes con datos de flujo invocando el System.IO.FileStream método Read del objeto. Pase la matriz de bytes, la posición inicial y la longitud del flujo para leerlos.
  11. Rellene el BLOB objeto asignando su miembro MTOM de datos con el contenido de la matriz de bytes.
  12. Invocar el MyApplication/EncryptDocument proceso invocando el MyApplication_EncryptDocumentClient método invoke del objeto. Pase el BLOB objeto que contiene el documento PDF. Este proceso devuelve un documento PDF cifrado dentro de un BLOB objeto.
  13. Cree un System.IO.FileStream objeto invocando su constructor y pasando un valor de cadena que represente la ubicación del archivo del documento PDF protegido.
  14. Cree una matriz de bytes que almacene el contenido de datos del BLOB objeto devuelto por el invoke método. Rellene la matriz de bytes obteniendo el valor del miembro de BLOB datos del MTOM objeto.
  15. Cree un System.IO.BinaryWriter objeto invocando su constructor y pasando el System.IO.FileStream objeto.
  16. Escriba el contenido de la matriz de bytes en un archivo PDF invocando el System.IO.BinaryWriter método Write del objeto y pasando la matriz de bytes.
La mayoría de las operaciones de servicio de AEM Forms tienen un inicio rápido MTOM. Puede vista estos inicios rápidos en la sección correspondiente de inicios rápidos de un servicio. Por ejemplo, para ver la sección inicio rápido de Output, consulte Inicios rápidos de API de Output Service.
Consulte también

Invocación de AEM Forms mediante SwaRef

Puede invocar los servicios de AEM Forms mediante SwaRef. El contenido del elemento wsi:swaRef XML se envía como datos adjuntos dentro de un cuerpo SOAP que almacena la referencia al archivo adjunto. Al invocar un servicio de Forms mediante SwaRef, cree clases proxy de Java mediante la API de Java para servicios Web XML (JAX-WS). (Consulte API de Java para servicios Web XML).
La discusión aquí es sobre invocar el siguiente proceso de corta duración de Forms llamado MyApplication/EncryptDocument mediante SwaRef.
Este proceso no se basa en un proceso de AEM Forms existente. Para seguir el ejemplo de código, cree un proceso denominado MyApplication/EncryptDocument mediante Workbench. (Consulte Uso de Workbench .)
Cuando se invoca este proceso, realiza las siguientes acciones:
  1. Obtiene el documento PDF no seguro que se pasa al proceso. Esta acción se basa en la SetValue operación. El parámetro de entrada para este proceso es una variable de document proceso denominada inDoc .
  2. Codifica el documento PDF con una contraseña. Esta acción se basa en la PasswordEncryptPDF operación. El documento PDF cifrado con contraseña se devuelve en una variable de proceso denominada outDoc .
Se agregó compatibilidad con SwaRef en AEM Forms
El siguiente análisis trata sobre cómo invocar los servicios de Forms mediante SwaRef en una aplicación cliente de Java. La aplicación Java utiliza clases proxy creadas mediante JAX-WS.

Invocar un servicio mediante archivos de biblioteca JAX-WS que utilizan SwaRef

Para invocar el MyApplication/EncryptDocument proceso mediante archivos proxy de Java creados con JAX-WS y SwaRef, lleve a cabo los siguientes pasos:
  1. Cree clases proxy de Java mediante JAX-WS que consuma el WSDL del MyApplication/EncryptDocument servicio. Utilice el siguiente extremo WSDL:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
    Para obtener más información, consulte Creación de clases proxy de Java mediante JAX-WS .
    Reemplazar hiro-xp por la dirección IP del servidor de aplicaciones J2EE que aloja AEM Forms.
  2. Empaquete las clases proxy de Java creadas con JAX-WS en un archivo JAR.
  3. Incluya el archivo JAR de proxy Java y los archivos JAR ubicados en la siguiente ruta:
    <Directorio de instalación>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    en la ruta de clases del proyecto de cliente Java.
  4. Cree un MyApplicationEncryptDocumentService objeto con su constructor.
  5. Cree un MyApplicationEncryptDocument objeto invocando el MyApplicationEncryptDocumentService método getEncryptDocument del objeto.
  6. Defina los valores de conexión necesarios para invocar AEM Forms asignando valores a los siguientes miembros de datos:
    • Asigne el extremo WSDL y el tipo de codificación al javax.xml.ws.BindingProvider campo del ENDPOINT_ADDRESS_PROPERTY objeto. Para invocar el MyApplication/EncryptDocument servicio con codificación SwaRef, especifique el siguiente valor de URL:
       https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref
    • Asigne el usuario de formularios AEM al campo del javax.xml.ws.BindingProvider objeto USERNAME_PROPERTY .
    • Asigne el valor de contraseña correspondiente al javax.xml.ws.BindingProvider campo del PASSWORD_PROPERTY objeto.
    El siguiente ejemplo de código muestra esta lógica de aplicación:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Recupere el documento PDF para enviarlo al MyApplication/EncryptDocument proceso creando un java.io.File objeto mediante su constructor. Pase un valor de cadena que especifique la ubicación del documento PDF.
  8. Cree un javax.activation.DataSource objeto mediante el FileDataSource constructor. Pase el java.io.File objeto.
  9. Cree un javax.activation.DataHandler objeto utilizando su constructor y pasando el javax.activation.DataSource objeto.
  10. Cree un BLOB objeto con su constructor.
  11. Rellene el BLOB objeto invocando su setSwaRef método y pasando el javax.activation.DataHandler objeto.
  12. Invoque el MyApplication/EncryptDocument proceso invocando el MyApplicationEncryptDocument método del invoke objeto y pasando el BLOB objeto que contiene el documento PDF. El método invoke devuelve un BLOB objeto que contiene un documento PDF cifrado.
  13. Rellene un javax.activation.DataHandler objeto invocando el BLOB método getSwaRef del objeto.
  14. Convierta el javax.activation.DataHandler objeto en una java.io.InputSteam instancia invocando el javax.activation.DataHandler método getInputStream del objeto.
  15. Escriba la java.io.InputSteam instancia en un archivo PDF que represente el documento PDF cifrado.
La mayoría de las operaciones de servicio de AEM Forms tienen un inicio rápido de SwaRef. Puede vista estos inicios rápidos en la sección correspondiente de inicios rápidos de un servicio. Por ejemplo, para ver la sección inicio rápido de Output, consulte Inicios rápidos de API de Output Service.
Consulte también

Invocación de AEM Forms mediante datos BLOB a través de HTTP

Puede invocar servicios de AEM Forms mediante servicios web y pasando datos BLOB a través de HTTP. Pasar datos BLOB por HTTP es una técnica alternativa en lugar de utilizar codificación base64, DIME o MIME. Por ejemplo, puede pasar datos a través de HTTP en un proyecto de Microsoft .NET que utilice Web Service Enhancement 3.0, que no admite DIME o MIME. Al utilizar datos BLOB a través de HTTP, los datos de entrada se cargan antes de invocar el servicio AEM Forms.
"Invocar a AEM Forms usando datos de BLOB sobre HTTP" trata de invocar el siguiente proceso breve de AEM Forms llamado MyApplication/EncryptDocument pasando datos de BLOB por HTTP.
Este proceso no se basa en un proceso de AEM Forms existente. Para seguir el ejemplo de código, cree un proceso denominado MyApplication/EncryptDocument mediante Workbench. (Consulte Uso de Workbench .)
Cuando se invoca este proceso, realiza las siguientes acciones:
  1. Obtiene el documento PDF no seguro que se pasa al proceso. Esta acción se basa en la SetValue operación. El parámetro de entrada para este proceso es una variable de document proceso denominada inDoc .
  2. Codifica el documento PDF con una contraseña. Esta acción se basa en la PasswordEncryptPDF operación. El documento PDF cifrado con contraseña se devuelve en una variable de proceso denominada outDoc .
Se recomienda familiarizarse con Invocar AEM Forms mediante SOAP. (Consulte Invocación de AEM Forms mediante servicios Web).

Creación de un ensamblado de cliente .NET que utilice datos a través de HTTP

Para crear un ensamblado de cliente que utilice datos sobre HTTP, siga el proceso especificado en Invocación de AEM Forms con codificación Base64. Sin embargo, modifique la dirección URL en la clase proxy para incluirla ?blob=http en lugar de ?blob=base64 . Esta acción garantiza que los datos se pasen por HTTP. En la clase proxy, busque la siguiente línea de código:
 "http://localhost:8080/soap/services/MyApplication/EncryptDocument";

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

Referencia al ensamblado de .NET clientMyApplication/EncryptDocument
Coloque el nuevo ensamblado de cliente .NET en el equipo en el que está desarrollando la aplicación cliente. Después de colocar el ensamblado de cliente .NET en un directorio, puede hacer referencia a él desde un proyecto. Haga referencia a la System.Web.Services biblioteca del proyecto. Si no hace referencia a esta biblioteca, no puede utilizar el ensamblado de cliente .NET para invocar un servicio.
  1. En el menú Proyecto , seleccione Añadir referencia .
  2. Click the .NET tab.
  3. Haga clic en Examinar y busque el archivo DocumentService.dll.
  4. Click Select and then click OK .
Invocación de un servicio mediante un ensamblado de cliente .NET que utiliza datos BLOB a través de HTTP
Puede invocar el MyApplication/EncryptDocument servicio (que se creó en Workbench) mediante un ensamblado de cliente .NET que utiliza datos a través de HTTP. Para invocar el MyApplication/EncryptDocument servicio, lleve a cabo los siguientes pasos:
  1. Cree el ensamblado de cliente .NET.
  2. Haga referencia al ensamblado de cliente de Microsoft .NET. Cree un proyecto cliente de Microsoft .NET. Haga referencia al ensamblado de cliente de Microsoft .NET en el proyecto de cliente. También haga referencia System.Web.Services .
  3. Mediante el ensamblado de cliente de Microsoft .NET, cree un MyApplication_EncryptDocumentService objeto invocando su constructor predeterminado.
  4. Defina la MyApplication_EncryptDocumentService propiedad del Credentials objeto con un System.Net.NetworkCredential objeto. En el System.Net.NetworkCredential constructor, especifique un nombre de usuario de formularios AEM y la contraseña correspondiente. Establezca los valores de autenticación para habilitar la aplicación cliente .NET para intercambiar correctamente mensajes SOAP con AEM Forms.
  5. Cree un BLOB objeto con su constructor. El BLOB objeto se utiliza para pasar datos al MyApplication/EncryptDocument proceso.
  6. Asigne un valor de cadena al miembro de datos del BLOB objeto que especifica la ubicación URI de un documento PDF que se pasará al remoteURL MyApplication/EncryptDocument servicio.
  7. Invocar el MyApplication/EncryptDocument proceso invocando el MyApplication_EncryptDocumentService método del invoke objeto y pasando el BLOB objeto. Este proceso devuelve un documento PDF cifrado dentro de un BLOB objeto.
  8. Cree un System.UriBuilder objeto utilizando su constructor y pasando el valor del miembro de datos del BLOB objeto devuelto remoteURL .
  9. Convierta el System.UriBuilder objeto en un System.IO.Stream objeto. (El Inicio rápido de C# que sigue a esta lista ilustra cómo realizar esta tarea).
  10. Cree una matriz de bytes y rellénela con los datos ubicados en el System.IO.Stream objeto.
  11. Cree un System.IO.BinaryWriter objeto invocando su constructor y pasando el System.IO.FileStream objeto.
  12. Escriba el contenido de la matriz de bytes en un archivo PDF invocando el System.IO.BinaryWriter método Write del objeto y pasando la matriz de bytes.

Invocación de un servicio mediante clases proxy Java y datos BLOB a través de HTTP

Puede invocar un servicio de AEM Forms mediante clases proxy de Java y datos BLOB a través de HTTP. Para invocar el MyApplication/EncryptDocument servicio mediante clases proxy de Java, lleve a cabo los siguientes pasos:
  1. Cree clases proxy de Java mediante JAX-WS que consuma el WSDL del MyApplication/EncryptDocument servicio. Utilice el siguiente extremo WSDL:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
    Para obtener más información, consulte Creación de clases proxy de Java mediante JAX-WS .
    Reemplazar hiro-xp por la dirección IP del servidor de aplicaciones J2EE que aloja AEM Forms.
  2. Empaquete las clases proxy de Java creadas con JAX-WS en un archivo JAR.
  3. Incluya el archivo JAR de proxy Java y los archivos JAR ubicados en la siguiente ruta:
    <Directorio de instalación>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    en la ruta de clases del proyecto de cliente Java.
  4. Cree un MyApplicationEncryptDocumentService objeto con su constructor.
  5. Cree un MyApplicationEncryptDocument objeto invocando el MyApplicationEncryptDocumentService método getEncryptDocument del objeto.
  6. Defina los valores de conexión necesarios para invocar AEM Forms asignando valores a los siguientes miembros de datos:
    • Asigne el extremo WSDL y el tipo de codificación al javax.xml.ws.BindingProvider campo del ENDPOINT_ADDRESS_PROPERTY objeto. Para invocar el MyApplication/EncryptDocument servicio con codificación BLOB sobre HTTP, especifique el siguiente valor de URL:
      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http
    • Asigne el usuario de formularios AEM al campo del javax.xml.ws.BindingProvider objeto USERNAME_PROPERTY .
    • Asigne el valor de contraseña correspondiente al javax.xml.ws.BindingProvider campo del PASSWORD_PROPERTY objeto.
    El siguiente ejemplo de código muestra esta lógica de aplicación:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Cree un BLOB objeto con su constructor.
  8. Rellene el BLOB objeto invocando su setRemoteURL método. Pase un valor de cadena que especifica la ubicación URI de un documento PDF que se va a pasar al MyApplication/EncryptDocument servicio.
  9. Invoque el MyApplication/EncryptDocument proceso invocando el MyApplicationEncryptDocument método del invoke objeto y pasando el BLOB objeto que contiene el documento PDF. Este proceso devuelve un documento PDF cifrado dentro de un BLOB objeto.
  10. Cree una matriz de bytes para almacenar la secuencia de datos que representa el documento PDF cifrado. Invocar el BLOB método del getRemoteURL objeto (utilizar el BLOB objeto devuelto por el invoke método).
  11. Cree un java.io.File objeto con su constructor. Este objeto representa el documento PDF cifrado.
  12. Cree un java.io.FileOutputStream objeto utilizando su constructor y pasando el java.io.File objeto.
  13. Invocar el java.io.FileOutputStream método del write objeto. Pase la matriz de bytes que contiene la secuencia de datos que representa el documento PDF cifrado.

Invocación de AEM Forms mediante DIME

Puede invocar los servicios de AEM Forms mediante SOAP con archivos adjuntos. AEM Forms admite los estándares de servicio web MIME y DIME. DIME permite enviar archivos adjuntos binarios, como documentos PDF, junto con solicitudes de invocación en lugar de codificar los datos adjuntos. En la sección Invocar AEM Forms mediante DIME se explica cómo invocar el siguiente proceso de corta duración de AEM Forms denominado MyApplication/EncryptDocument mediante DIME.
Cuando se invoca este proceso, realiza las siguientes acciones:
  1. Obtiene el documento PDF no seguro que se pasa al proceso. Esta acción se basa en la SetValue operación. El parámetro de entrada para este proceso es una variable de document proceso denominada inDoc .
  2. Codifica el documento PDF con una contraseña. Esta acción se basa en la PasswordEncryptPDF operación. El documento PDF cifrado con contraseña se devuelve en una variable de proceso denominada outDoc .
Este proceso no se basa en un proceso de AEM Forms existente. Para seguir los ejemplos de código, cree un proceso denominado MyApplication/EncryptDocument mediante Workbench. (Consulte Uso de Workbench .)
La invocación de operaciones de servicio de AEM Forms mediante DIME está en desuso. Se recomienda que utilice MTOM. (Consulte Invocación de AEM Forms mediante MTOM ).

Creación de un proyecto de .NET que utilice DIME

Para crear un proyecto de .NET que pueda invocar un servicio de Forms mediante DIME, lleve a cabo las siguientes tareas:
  • Instale las mejoras de servicios Web 2.0 en el equipo de desarrollo.
  • Desde el proyecto .NET, cree una referencia web al servicio de Forms FormsAEM.
Instalación de mejoras de servicios Web 2.0
Instale las mejoras de los servicios Web 2.0 en el equipo de desarrollo e integre la aplicación con Microsoft Visual Studio .NET. Puede descargar las mejoras de servicios Web 2.0 desde el Centro de descargas de Microsoft.
En esta página web, busque las mejoras de servicios web 2.0 y descárguela en el equipo de desarrollo. Esta descarga coloca un archivo denominado Microsoft WSE 2.0 SPI.msi en el equipo. Ejecute el programa de instalación y siga las instrucciones en línea.
Las mejoras en los servicios Web 2.0 son compatibles con DIME. La versión admitida de Microsoft Visual Studio es 2003 al trabajar con las mejoras de servicios Web 2.0. Las mejoras en los servicios Web 3.0 no admiten DIME; sin embargo, admite MTOM.
Creación de una referencia web a un servicio de AEM Forms
Después de instalar las mejoras de servicios web 2.0 en el equipo de desarrollo y crear un proyecto de Microsoft .NET, cree una referencia web al servicio de Forms. Por ejemplo, para crear una referencia web al MyApplication/EncryptDocument proceso y suponiendo que Forms está instalado en el equipo local, especifique la siguiente URL:
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL

Después de crear una referencia web, los dos tipos de datos proxy siguientes están disponibles para su uso en el proyecto .NET: EncryptDocumentService y EncryptDocumentServiceWse . Para invocar el MyApplication/EncryptDocument proceso mediante DIME, utilice el EncryptDocumentServiceWse tipo .
Antes de crear una referencia web al servicio Forms, asegúrese de hacer referencia a las mejoras de servicios web 2.0 en el proyecto. (Consulte "Instalación de mejoras de servicios Web 2.0").
Referencia a la biblioteca WSE
  1. En el menú Proyecto, seleccione Añadir referencia.
  2. En el cuadro de diálogo Añadir referencia, seleccione Microsoft.Web.Services2.dll.
  3. Seleccione System.Web.Services.dll.
  4. Haga clic en Seleccionar y, a continuación, en Aceptar.
Creación de una referencia web a un servicio de Forms
  1. En el menú Proyecto, seleccione Añadir referencia web.
  2. En el cuadro de diálogo URL, especifique la URL del servicio de Forms.
  3. Haga clic en Ir y, a continuación, en Añadir referencia.
Asegúrese de activar el proyecto .NET para utilizar la biblioteca WSE. Desde el Explorador de proyectos, haga clic con el botón derecho en el nombre del proyecto y seleccione Activar WSE 2.0. Asegúrese de que la casilla de verificación del cuadro de diálogo que aparece está seleccionada.
Invocación de un servicio mediante DIME en un proyecto .NET
Puede invocar un servicio de Forms mediante DIME. Considere el MyApplication/EncryptDocument proceso que acepta un documento PDF no seguro y devuelve un documento PDF con contraseña cifrada. Para invocar el MyApplication/EncryptDocument proceso mediante DIME, lleve a cabo los siguientes pasos:
  1. Cree un proyecto de Microsoft .NET que le permita invocar un servicio de Forms mediante DIME. Asegúrese de incluir las mejoras de los servicios Web 2.0 y de crear una referencia Web al servicio AEM Forms.
  2. Después de establecer una referencia web al MyApplication/EncryptDocument proceso, cree un EncryptDocumentServiceWse objeto utilizando su constructor predeterminado.
  3. Establezca el miembro de datos del EncryptDocumentServiceWse objeto con un Credentials valor System.Net.NetworkCredential que especifique el nombre de usuario y el valor de la contraseña de los formularios AEM.
  4. Cree un Microsoft.Web.Services2.Dime.DimeAttachment objeto con su constructor y pasando los siguientes valores:
    • Un valor de cadena que especifica un valor GUID. Puede obtener un valor GUID invocando el System.Guid.NewGuid.ToString método.
    • Un valor de cadena que especifica el tipo de contenido. Dado que este proceso requiere un documento PDF, especifique application/pdf .
    • Un valor TypeFormat de lista desglosada. Especifique TypeFormat.MediaType .
    • Un valor de cadena que especifica la ubicación del documento PDF que se pasará al proceso de AEM Forms.
  5. Cree un BLOB objeto con su constructor.
  6. Añada los datos adjuntos DIME al BLOB objeto asignando el valor del miembro de datos del Microsoft.Web.Services2.Dime.DimeAttachment objeto Id al miembro de datos del BLOB objeto attachmentID .
  7. Invoque el EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add método y pase el Microsoft.Web.Services2.Dime.DimeAttachment objeto.
  8. Invoque el MyApplication/EncryptDocument proceso invocando el EncryptDocumentServiceWse método del invoke objeto y pasando el BLOB objeto que contiene el adjunto DIME. Este proceso devuelve un documento PDF cifrado dentro de un BLOB objeto.
  9. Obtenga el valor del identificador de datos adjuntos obteniendo el valor del miembro de datos del BLOB objeto attachmentID devuelto.
  10. Repita los datos adjuntos ubicados en EncryptDocumentServiceWse.ResponseSoapContext.Attachments y utilice el valor del identificador de datos adjuntos para obtener el documento PDF cifrado.
  11. Obtenga un System.IO.Stream objeto obteniendo el valor del miembro de datos del Attachment objeto Stream .
  12. Cree una matriz de bytes y pase dicha matriz de bytes al System.IO.Stream método Read del objeto. Este método rellena la matriz de bytes con un flujo de datos que representa el documento PDF cifrado.
  13. Cree un System.IO.FileStream objeto invocando su constructor y pasando un valor de cadena que represente una ubicación de archivo PDF. Este objeto representa el documento PDF cifrado.
  14. Cree un System.IO.BinaryWriter objeto invocando su constructor y pasando el System.IO.FileStream objeto.
  15. Escriba el contenido de la matriz de bytes en el archivo PDF invocando el System.IO.BinaryWriter método del Write objeto y pasando la matriz de bytes.

Creación de clases proxy Java Apache Axis que utilizan DIME

Puede utilizar la herramienta Java WSDL2Eje Apache para convertir un servicio WSDL en clases proxy de Java, de modo que pueda invocar operaciones de servicio. Con Apache Ant, puede generar archivos de biblioteca del eje desde un WSDL del servicio de AEM Forms que le permite invocar el servicio. (Consulte Creación de clases proxy de Java mediante Apache Axis ).
La herramienta Apache Axis WSDL2Java genera archivos JAVA que contienen métodos que se utilizan para enviar solicitudes SOAP a un servicio. Las solicitudes SOAP recibidas por un servicio son descodificadas por las bibliotecas generadas por el eje y devueltas a los métodos y argumentos.
Para invocar el MyApplication/EncryptDocument servicio (que se creó en Workbench) mediante archivos de biblioteca generados por el eje y DIME, lleve a cabo los siguientes pasos:
  1. Cree clases proxy de Java que consuman el MyApplication/EncryptDocument servicio WSDL mediante Apache Axis. (Consulte Creación de clases proxy de Java mediante Apache Axis ).
  2. Incluya las clases proxy de Java en la ruta de clases.
  3. Cree un MyApplicationEncryptDocumentServiceLocator objeto con su constructor.
  4. Cree un URL objeto utilizando su constructor y pasando un valor de cadena que especifica la definición WSDL del servicio de AEM Forms. Asegúrese de especificar ?blob=dime al final de la dirección URL del extremo SOAP. Por ejemplo, use
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
    
    
  5. Cree un EncryptDocumentSoapBindingStub objeto invocando su constructor y pasando el MyApplicationEncryptDocumentServiceLocator objeto y el URL objeto.
  6. Establezca el nombre de usuario y el valor de la contraseña de los formularios AEM invocando los EncryptDocumentSoapBindingStub métodos setUsername y setPassword del objeto.
     encryptionClientStub.setUsername("administrator");
     encryptionClientStub.setPassword("password");
    
    
  7. Recupere el documento PDF que se va a enviar al MyApplication/EncryptDocument servicio creando un java.io.File objeto. Pase un valor de cadena que especifique la ubicación del documento PDF.
  8. Cree un javax.activation.DataHandler objeto utilizando su constructor y pasando un javax.activation.FileDataSource objeto. El javax.activation.FileDataSource objeto se puede crear con su constructor y pasando el java.io.File objeto que representa el documento PDF.
  9. Cree un org.apache.axis.attachments.AttachmentPart objeto utilizando su constructor y pasando el javax.activation.DataHandler objeto.
  10. Adjuntar los datos adjuntos invocando el EncryptDocumentSoapBindingStub método addAttachment del objeto y pasando el org.apache.axis.attachments.AttachmentPart objeto.
  11. Cree un BLOB objeto con su constructor. Rellene el BLOB objeto con el valor del identificador de datos adjuntos invocando el método del BLOB objeto y pasando el valor del identificador setAttachmentID de datos adjuntos. Este valor se puede obtener invocando el org.apache.axis.attachments.AttachmentPart método getContentId del objeto.
  12. Invocar el MyApplication/EncryptDocument proceso invocando el EncryptDocumentSoapBindingStub método invoke del objeto. Pase el BLOB objeto que contiene el adjunto DIME. Este proceso devuelve un documento PDF cifrado dentro de un BLOB objeto.
  13. Obtenga el valor del identificador de datos adjuntos invocando el método del BLOB objeto devuelto getAttachmentID . Este método devuelve un valor de cadena que representa el valor de identificador del adjunto devuelto.
  14. Recupere los datos adjuntos invocando el EncryptDocumentSoapBindingStub método getAttachments del objeto. Este método devuelve una matriz de Objects que representan los archivos adjuntos.
  15. Repita los datos adjuntos (la Object matriz) y utilice el valor del identificador de datos adjuntos para obtener el documento PDF cifrado. Cada elemento es un org.apache.axis.attachments.AttachmentPart objeto.
  16. Obtenga el javax.activation.DataHandler objeto asociado al archivo adjunto invocando el org.apache.axis.attachments.AttachmentPart método getDataHandler del objeto.
  17. Obtenga un java.io.FileStream objeto invocando el javax.activation.DataHandler método getInputStream del objeto.
  18. Cree una matriz de bytes y pase dicha matriz de bytes al java.io.FileStream método read del objeto. Este método rellena la matriz de bytes con un flujo de datos que representa el documento PDF cifrado.
  19. Cree un java.io.File objeto con su constructor. Este objeto representa el documento PDF cifrado.
  20. Cree un java.io.FileOutputStream objeto utilizando su constructor y pasando el java.io.File objeto.
  21. Invoque el java.io.FileOutputStream método del write objeto y pase la matriz de bytes que contiene la secuencia de datos que representa el documento PDF cifrado.
Consulte también

Uso de la autenticación basada en SAML

AEM Forms admite varios modos de autenticación de servicios Web al invocar servicios. Un modo de autenticación es especificar un nombre de usuario y un valor de contraseña mediante un encabezado de autorización básico en la llamada al servicio Web. AEM Forms también admite la autenticación basada en afirmaciones SAML. Cuando una aplicación cliente invoca un servicio AEM Forms mediante un servicio Web, la aplicación cliente puede proporcionar información de autenticación de una de las siguientes formas:
  • Pasar credenciales como parte de la autorización básica
  • Pasar el token de nombre de usuario como parte del encabezado WS-Security
  • Paso de una afirmación SAML como parte del encabezado WS-Security
  • Paso del token Kerberos como parte del encabezado WS-Security
AEM Forms no admite la autenticación basada en certificados estándar, pero sí la autenticación basada en certificados en un formulario diferente.
Los inicios rápidos del servicio Web en Programación con AEM Forms especifican los valores de nombre de usuario y contraseña para realizar la autorización.
La identidad de los usuarios de formularios AEM se puede representar mediante una afirmación SAML firmada con una clave secreta. El siguiente código XML muestra un ejemplo de una afirmación 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>

Esta afirmación de ejemplo se emite para un usuario administrador. Esta afirmación contiene los siguientes elementos notables:
  • Es válido durante un tiempo determinado.
  • Se emite para un usuario en particular.
  • Se firma digitalmente. Así que cualquier modificación que se le haga rompería la firma.
  • Se puede presentar a AEM Forms como un testigo de la identidad del usuario similar al nombre de usuario y la contraseña.
Una aplicación cliente puede recuperar la afirmación de cualquier API de AEM Forms AuthenticationManager que devuelva un AuthResult objeto. Puede obtener una AuthResult instancia mediante uno de los dos métodos siguientes:
  • Autentificación del usuario mediante cualquiera de los métodos de autenticación expuestos por la API de AuthenticationManager. Normalmente, se utilizarían el nombre de usuario y la contraseña; sin embargo, también puede utilizar la autenticación de certificado.
  • Uso del AuthenticationManager.getAuthResultOnBehalfOfUser método. Este método permite que una aplicación cliente obtenga un AuthResult objeto para cualquier usuario de formularios AEM.
un usuario de formularios AEM puede autenticarse con un token SAML obtenido. Esta afirmación de SAML (fragmento xml) se puede enviar como parte del encabezado WS-Security con la llamada de servicio web para la autenticación de usuarios. Normalmente, una aplicación cliente ha autenticado a un usuario pero no ha almacenado las credenciales de usuario. (O bien, el usuario ha iniciado sesión en ese cliente mediante un mecanismo que no sea el uso de un nombre de usuario y una contraseña). En este caso, la aplicación cliente debe invocar AEM Forms y suplantar a un usuario específico que puede invocar AEM Forms.
Para suplantar a un usuario específico, invoque el AuthenticationManager.getAuthResultOnBehalfOfUser método mediante un servicio Web. Este método devuelve una AuthResult instancia que contiene la afirmación SAML para ese usuario.
A continuación, utilice esa afirmación de SAML para invocar cualquier servicio que requiera autenticación. Esta acción implica enviar la afirmación como parte del encabezado SOAP. Cuando se realiza una llamada de servicio Web con esta afirmación, AEM Forms identifica al usuario como el representado por esa afirmación. Es decir, el usuario especificado en la afirmación es el usuario que invoca el servicio.

Uso de clases Apache Axis y autenticación basada en SAML

Puede invocar un servicio de AEM Forms mediante clases proxy de Java que se crearon con la biblioteca Axis. (Consulte Creación de clases proxy de Java mediante Apache Axis ).
Cuando utilice AXIS que utilice autenticación basada en SAML, registre la solicitud y el controlador de respuesta con Axis. Apache Axis invoca al controlador antes de enviar una solicitud de invocación a AEM Forms. Para registrar un controlador, cree una clase Java que se extienda org.apache.axis.handlers.BasicHandler .
Creación de un controlador de aserción con eje
La siguiente clase Java, denominada AssertionHandler.java , muestra un ejemplo de una clase Java que se extiende 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);
            }
        }
 }

Registrar el controlador
Para registrar un controlador con Axis, cree un archivo client-config.wsdd. De forma predeterminada, Axis busca un archivo con este nombre. El siguiente código XML es un ejemplo de archivo client-config.wsdd. Consulte la documentación del eje para obtener más información.
 <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>
 

Invocar un servicio de AEM Forms
El siguiente ejemplo de código invoca un servicio de AEM Forms mediante autenticación basada en SAML.
 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());
        }
 }

Uso de un ensamblado de cliente .NET y autenticación basada en SAML

Puede invocar un servicio de Forms mediante un ensamblado de cliente .NET y una autenticación basada en SAML. Para ello, debe utilizar las mejoras del servicio Web 3.0 (WSE). Para obtener información sobre la creación de un ensamblado de cliente .NET que utilice WSE, consulte Creación de un proyecto .NET que utilice DIME .
La sección DIME utiliza WSE 2.0. Para utilizar la autenticación basada en SAML, siga las mismas instrucciones especificadas en el tema DIME. Sin embargo, sustituya WSE 2.0 por WSE 3.0. Instale las mejoras de los servicios Web 3.0 en el equipo de desarrollo e integre la aplicación con Microsoft Visual Studio .NET. Puede descargar las mejoras de servicios Web 3.0 desde el Centro de descargas de Microsoft.
La arquitectura WSE utiliza los tipos de datos Directivas, Aserciones y SecurityToken. Brevemente, para una llamada de servicio Web, especifique una política. Una política puede tener varias aserciones. Cada afirmación puede contener filtros. Un filtro se invoca en determinadas etapas de una llamada de servicio Web y, en ese momento, puede modificar la solicitud SOAP. Para obtener más información, consulte la documentación sobre las mejoras del servicio Web 3.0.
Crear la aserción y el filtro
El siguiente ejemplo de código C# crea clases de filtro y afirmación. En este ejemplo de código se crea un SamlAssertionOutputFilter. El marco de trabajo de WSE invoca este filtro antes de que la solicitud SOAP se envíe a 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);
        }
 }

Crear el autentificador SAML
Cree una clase para representar la afirmación SAML. La tarea principal que realiza esta clase es convertir valores de datos de cadena a xml y conservar espacio en blanco. Este xml de afirmación se importa posteriormente en la solicitud SOAP.
 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);
         }
        . . .
 }

Invocar un servicio de AEM Forms
El siguiente ejemplo de código C# invoca un servicio de Forms mediante la autenticación basada en SAML.
 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);
     }
 }