Web サービスを使用した AEM Forms の呼び出し

このドキュメントのサンプルと例は、JEE環境上のAEM Formsに対してのみ提供されています。

サービスコンテナ内のほとんどのAEM Formsサービスは、Webサービスを公開するように設定されており、Web Service Definition Language(WSDL)の生成を完全にサポートしています。 つまり、AEM FormsサービスのネイティブSOAPスタックを使用するプロキシオブジェクトを作成できます。 その結果、AEM Formsサービスは次のSOAPメッセージを交換して処理できます。

  • SOAP要求:アクションを要求するクライアントアプリケーションによってFormsサービスに送信されます。
  • SOAP応答:SOAP要求の処理後、Formsサービスによってクライアントアプリケーションに送信されます。

Webサービスを使用する場合は、Java APIを使用する場合と同じAEM Formsサービス操作を実行できます。 Webサービスを使用してAEM Formsサービスを呼び出す利点の1つは、SOAPをサポートする開発環境でクライアントアプリケーションを作成できることです。 クライアントアプリケーションが特定の開発環境またはプログラミング言語に結び付けられるわけではありません。 例えば、Microsoft Visual Studio .NETおよびC#をプログラミング言語として使用するクライアントアプリケーションを作成できます。

AEM FormsサービスはSOAPプロトコル経由で公開され、WSI Basicプロファイル1.1に準拠しています。 Web Services Interoperability(WSI)は、複数のプラットフォーム間でのWebサービスの相互運用性を促進するオープンスタンダード組織です。 詳しくは、https://www.ws-i.org/を参照してください。

AEM Formsは、次のウェブサービス標準をサポートしています。

  • エンコーディング:ドキュメントおよびリテラルエンコーディングのみサポートします(WSI基本プロファイルに従った推奨エンコーディング)。(「Base64エンコードを使用したAEM Formsの呼び出し」を参照)。
  • MTOM:SOAP要求で添付ファイルをエンコードする方法を表します。(MTOMを使用したAEM Formsの呼び出しを参照)。
  • SwaRef:SOAP要求で添付ファイルをエンコードする別の方法を表します。(SwaRefを使用したAEM Formsの呼び出しを参照)。
  • 添付ファイル付きSOAP:MIMEとDIME(Direct Internet Message Encapsulation)の両方をサポートします。これらのプロトコルは、標準的なSOAP経由で添付ファイルを送信する方法です。 Microsoft Visual Studio .NETアプリケーションはDIMEを使用します。 (「Base64エンコードを使用したAEM Formsの呼び出し」を参照)。
  • WS-Security:ユーザー名パスワードトークンプロファイルがサポートされます。これは、WSセキュリティSOAPヘッダーの一部として、ユーザー名とパスワードを送信する標準的な方法です。AEM Formsは、HTTP基本認証もサポートしています。 (「WS-Securityヘッダーを使用して証明書を渡す」を参照)。

Webサービスを使用してAEM Formsサービスを呼び出すには、通常、サービスWSDLを使用するプロキシライブラリを作成します。 Webサービスを使用したAEM Formsの呼び出し​セクションでは、JAX-WSを使用して、サービスを呼び出すJavaプロキシクラスを作成します。 (「JAX-WSを使用したJavaプロキシクラスの作成」を参照)。

次のURL定義を指定すると、サービスWDSLを取得できます(角括弧で囲まれた項目はオプションです)。

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

各パラメーターの意味は次のとおりです。

  • your_ serverhostresは、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスを表します。
  • your_ portは、J2EEアプリケーションサーバーが使用するHTTPポートを表します。
  • service_ nameは、サービス名を表します。
  • バージョ ンは、サービスのターゲットバージョンを表します(デフォルトでは、最新のサービスバージョンが使用されます)。
  • async 非同期呼び出し true の追加操作を有効にする値を指定します(デフォルト false )。
  • lc_ versionは、呼び出すAEM Formsのバージョンを表します。

次の表のリストは、WSDL定義をサービスします(AEM Formsがローカルホストにデプロイされ、投稿が8080である場合)。

Service

WSDLの定義

Assembler

http://localhost:8080/soap/services/ AssemblerService?wsdl

戻る/復元

http://localhost:8080/soap/services/BackupService?wsdl

barcoded forms[barcoded forms]

http://localhost:8080/soap/services/ BarcodedFormsService?wsdl

Convert 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

Encryption

http://localhost:8080/soap/services/EncryptionService?wsdl

フォーム

http://localhost:8080/soap/services/FormsService?wsdl

Form Data Integration

http://localhost:8080/soap/services/FormDataIntegration?wsdl

Generate PDF

http://localhost:8080/soap/services/ GeneratePDFService?wsdl

Generate 3D PDF

http://localhost:8080/soap/services/Generate3dPDFService?WSDL

出力

http://localhost:8080/soap/services/ OutputService?wsdl

PDF Utilities

http://localhost:8080/soap/services/ PDFUtilityService?wsdl

Acrobat Reader DC エクステンション

http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl

リポジトリ

http://localhost:8080/soap/services/ RepositoryService?wsdl

Rights Management

http://localhost:8080/soap/services/ RightsManagementService?wsdl

シグネチャ

http://localhost:8080/soap/services/ SignatureService?wsdl

XMP Utilities

http://localhost:8080/soap/services/ XMPUtilityService?wsdl

AEM FormsプロセスのWSDL定義

Workbenchで作成されたプロセスに属するWSDLにアクセスするには、WSDL定義内のアプリケーション名とプロセス名を指定する必要があります。 アプリケーションの名前がMyApplicationで、プロセスの名前がEncryptDocumentであるとします。 この場合、次のWSDL定義を指定します。

 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl
メモ

MyApplication/EncryptDocument短時間のみ有効なプロセスの例については、短時間のみ有効なプロセスの例を参照してください。

メモ

アプリケーションには、フォルダーを含めることができます。 この場合、WSDL定義のフォルダー名を指定します。

 http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl

Webサービスを使用した新機能へのアクセス

新しいAEM Formsサービス機能は、ウェブサービスを利用してアクセスできます。 例えば、AEM Formsでは、MTOMを使用して添付ファイルをエンコードする機能が導入されています。 (MTOMを使用したAEM Formsの呼び出しを参照)。

AEM Formsで導入された新しい機能にアクセスするには、WSDL定義のlc_version属性を指定します。 例えば、新しいサービス機能(MTOMのサポートを含む)にアクセスするには、次のWSDL定義を指定します。

 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl&lc_version=9.0.1
メモ

lc_version属性を設定する場合は、3桁の数値を使用してください。 例えば、9.0.1はバージョン9.0と等しくなります。

WebサービスBLOBデータ型

AEM FormsサービスのWSDLでは、多くのデータ型が定義されています。 Webサービスで公開される最も重要なデータ型の1つは、BLOB型です。 このデータ型は、AEM FormsJava APIを使用する場合にcom.adobe.idp.Documentクラスにマップされます。 (「Java APIを使用してAEM Formsサービスにデータを渡す」を参照)。

BLOBオブジェクトは、AEM Formsサービスとの間でバイナリデータ(PDFファイル、XMLデータなど)を送受信します。 BLOB型は、サービスWSDLで次のように定義されます。

 <complexType name="BLOB">
     <sequence>
         <element maxOccurs="1" minOccurs="0" name="contentType"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="binaryData"
             type="xsd:base64Binary"/>
         <element maxOccurs="1" minOccurs="0" name="attachmentID"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="remoteURL"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="MTOM"
             type="xsd:base64Binary"
             xmime:expectedContentTypes="*/*"
             xmlns:xmime="https://www.w3.org/2005/05/xmlmime"/>
         <element maxOccurs="1" minOccurs="0" name="swaRef"
             type="tns1:swaRef"/>
         <element maxOccurs="1" minOccurs="0" name="attributes"
             type="impl:MyMapOf_xsd_string_To_xsd_anyType"/>
     </sequence>
 </complexType>

MTOMフィールドとswaRefフィールドは、AEM Formsでのみサポートされます。 これらの新しいフィールドは、lc_versionプロパティを含むURLを指定した場合にのみ使用できます。

サービス要求でのBLOBオブジェクトの指定

AEM Formsサービスの操作で、入力値としてBLOB型が必要な場合は、アプリケーションロジックにBLOB型のインスタンスを作成します。 (「AEM formsでのプログラミング」にあるWebサービスのクイック開始の多くは、BLOBデータ型の使用方法を示しています)。

BLOBインスタンスに属するフィールドに値を次のように割り当てます。

  • Base64:Base64形式でエンコードされたテキストとしてデータを渡すには、 BLOB.binaryData フィールドにデータを設定し、MIME形式(例えば、)でデータタイプを application/pdf BLOB.contentType フィールドに設定します。(「Base64エンコードを使用したAEM Formsの呼び出し」を参照)。
  • MTOM:MTOM添付ファイルにバイナリデータを渡すには、 BLOB.MTOM フィールドにデータを設定します。この設定は、Java JAX-WSフレームワークまたはSOAPフレームワークのネイティブAPIを使用して、データをSOAP要求に添付します。 (MTOMを使用したAEM Formsの呼び出しを参照)。
  • SwaRef:WS-I SwaRef添付ファイルにバイナリデータを渡すには、 BLOB.swaRef フィールドにデータを設定します。この設定は、Java JAX-WSフレームワークを使用して、SOAP要求にデータを添付します。 (SwaRefを使用したAEM Formsの呼び出しを参照)。
  • MIMEまたはDIME添付ファイル:MIME添付ファイルまたはDIME添付ファイルにデータを渡すには、SOAPフレームワークのネイティブAPIを使用して、SOAP要求にデータを添付します。BLOB.attachmentIDフィールドに添付ファイル識別子を設定します。 (「Base64エンコードを使用したAEM Formsの呼び出し」を参照)。
  • リモートURL:データがWebサーバーでホストされ、HTTP URL経由でアクセスできる場合は、 BLOB.remoteURL フィールドにHTTP URLを設定します。(HTTPを介したBLOBデータを使用したAEM Formsの呼び出しを参照)。

サービスから返されたBLOBオブジェクトのデータへのアクセス

返されるBLOBオブジェクトの送信プロトコルは、いくつかの要因に依存します。これらの要因は、次の順序で考慮され、メイン条件が満たされると停止します。

  1. ターゲットURLは送信プロトコルを指定します。SOAP呼び出しで指定されたターゲットURLにパラメーター​blob="BLOB_TYPE​が含まれる場合、BLOB_TYPE​は送信プロトコルを決定します。 BLOB_ TYPEは、base64、dime、mime、http、mtomまたはswarefのプレースホルダです。

  2. サービスSOAPエンドポイントがスマート。次の条件が真の場合、出力ドキュメントは入力ドキュメントと同じ送信プロトコルを使用して返されます。

    • サービスのSOAPエンドポイントパラメーター「Default Protocol For Output Blob Objects」が「Smart」に設定されている。

      SOAPエンドポイントを持つ各サービスに対して、返されたBLOBの送信プロトコルを管理コンソールで指定できます。 (管理ヘルプを参照)。

    • AEM Formsサービスは、1つ以上のドキュメントを入力として受け取ります。

  3. サービスSOAPエンドポイントがスマートではありません。設定されたプロトコルによってドキュメント送信プロトコルが決まり、対応するBLOBフィールドにデータが返されます。 例えば、SOAPエンドポイントがDIMEに設定されている場合、返されるBLOBは、入力ドキュメントの送信プロトコルに関係なくblob.attachmentIDフィールドに格納されます。

  4. それ以外の場合。サービスがドキュメントタイプを入力として受け取らない場合、出力ドキュメントはHTTPプロトコル上のBLOB.remoteURLフィールドに返されます。

最初の条件で説明したように、次のようにサフィックスを付けたSOAPエンドポイントURLを拡張することで、返されるドキュメントの送信タイプを確認できます。

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

送信タイプとデータの取得元のフィールドとの相関関係を次に示します。

  • Base64形式:フィ blob ールドにデータを返す base64 には、 BLOB.binaryData サフィックスをに設定します。
  • MIMEまたはDIME添付ファイル:サフィッ blob クスをに設定する DIME か、 MIME BLOB.attachmentID またはフィールドに返された添付ファイル識別子を持つ対応する添付ファイルタイプとしてデータを返します。SOAPフレームワーク固有のAPIを使用して、添付ファイルからデータを読み取ります。
  • リモートURL:サフ blob ィックスをに設定 http して、データをアプリケーションサーバーに保持し、 BLOB.remoteURL フィールド内のデータを示すURLを返します。
  • MTOMまたはSwaRef:サフ blob ィックスをに設定する mtom か、または swaref フィールドに返される添付ファイル識別子を持つ対応する添付ファイルタイプとしてデータを返す BLOB.MTOM ように BLOB.swaRef します。SOAPフレームワークのネイティブAPIを使用して、添付ファイルからデータを読み取ります。
メモ

BLOBオブジェクトを入力する場合は、setBinaryDataメソッドを呼び出して30 MBを超えないようにすることをお勧めします。 そうしないと、OutOfMemory例外が発生する可能性があります。

メモ

MTOM送信プロトコルを使用するJAX WSベースのアプリケーションは、送受信データの量が25 MBに制限されます。 この制限は、JAX-WSのバグが原因です。 送受信ファイルの合計サイズが25 MBを超える場合は、MTOM送信プロトコルの代わりにSwaRef送信プロトコルを使用します。 そうしないと、OutOfMemory例外が発生する可能性があります。

base64エンコードされたバイト配列のMTOM送信

BLOBオブジェクトに加えて、MTOMプロトコルは複合型のバイト配列パラメータまたはバイト配列フィールドをサポートします。 つまり、MTOMをサポートするクライアントSOAPフレームワークは、任意のxsd:base64Binary要素をMTOM添付ファイルとして(base64エンコードされたテキストではなく)送信できます。 AEM FormsのSOAPエンドポイントは、この種類のバイト配列エンコーディングを読み取ることができます。 ただし、AEM Formsサービスは常に、base64エンコードされたテキストとしてバイト配列型を返します。 出力バイト配列パラメーターはMTOMをサポートしていません。

大量のバイナリデータを返すAEM Formsサービスでは、バイト配列型ではなくドキュメント/BLOB型が使用されます。 ドキュメントタイプは、大量のデータを送信する場合に、より効率的です。

Webサービスデータ型

次の表に、Javaデータ型のリストと、対応するWebサービスデータ型を示します。

Javaデータ型

Webサービスのデータ型

java.lang.byte[]

xsd:base64Binary

java.lang.Boolean

xsd:boolean

java.util.Date

DATE型。サービスWSDLでは次のように定義されます。

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

AEM Formsサービス操作がjava.util.Date値を入力として受け取る場合、SOAPクライアントアプリケーションはDATE.dateフィールドに日付を渡す必要があります。 この場合、DATE.calendarフィールドを設定するとランタイム例外が発生します。 サービスがjava.util.Dateを返す場合、DATE.dateフィールドに日付が返されます。

java.util.Calendar

DATE型。サービスWSDLでは次のように定義されます。

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

AEM Formsサービス操作がjava.util.Calendar値を入力として受け取る場合、SOAPクライアントアプリケーションはDATE.caledendarフィールドに日付を渡す必要があります。 この場合、DATE.dateフィールドを設定すると、実行時例外が発生します。 サービスがjava.util.Calendarを返した場合、DATE.calendarフィールドに日付が返されます。

java.math.BigDecimal

xsd:decimal

com.adobe.idp.Document

BLOB

java.lang.Double

xsd:double

java.lang.Float

xsd:float

java.lang.Integer

xsd:int

java.util.List

MyArrayOf_xsd_anyType

java.lang.Long

xsd:long

java.util.Map

apachesoap:Mapは、サービスWSDLで次のように定義されます。

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

マップは、キー/値のペアのシーケンスとして表されます。

java.lang.Object

$1

java.lang.Short

xsd:short

java.lang.String

xsd:string

org.w3c.dom.Document

XML型。サービスWSDLで次のように定義されます。

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

AEM Formsサービス操作がorg.w3c.dom.Document値を受け取る場合は、XMLデータをXML.documentフィールドに渡します。

XML.elementフィールドを設定すると、ランタイム例外が発生します。 サービスがorg.w3c.dom.Documentを返す場合、XMLデータはXML.documentフィールドに返されます。

org.w3c.dom.Element

XML型。サービスWSDLで次のように定義されます。

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

AEM Formsサービスの操作でorg.w3c.dom.Elementを入力として受け取る場合は、XMLデータをXML.elementフィールドに渡します。

XML.documentフィールドを設定すると、ランタイム例外が発生します。 サービスがorg.w3c.dom.Elementを返す場合、XMLデータはXML.elementフィールドに返されます。

Adobe Developer Web サイト

Adobe開発者Webサイトには、WebサービスAPIを使用してAEM Formsサービスを呼び出す方法を説明する次の記事が含まれています。

フォームレンダリングASP.NETアプリケーションの作成

カスタムコンポーネントを使用したWebサービスの呼び出し

メモ

カスタムコンポーネントを使用してWebサービスを呼び出すには、サードパーティWebサービスを呼び出すAEM Formsコンポーネントを作成する方法を説明します。

JAX-WSを使用したJavaプロキシクラスの作成

JAX-WSを使用して、FormsサービスのWSDLをJavaプロキシクラスに変換できます。 AEM Formsサービス操作を呼び出すことを可能にするクラスです。 Apache Antでは、AEM FormsサービスWSDLを参照してJavaプロキシクラスを生成するビルドスクリプトを作成できます。 JAX-WSプロキシファイルは、次の手順を実行して生成できます。

  1. クライアントコンピューターにApache Antをインストールします。 (https://ant.apache.org/bindownload.cgiを参照)。

    • 追加binディレクトリからクラスパスに移動します。
    • ANT_HOME環境変数をAntをインストールしたディレクトリに設定します。
  2. JDK 1.6以降をインストールします。

    • JDK 追加 binディレクトリをクラスパスに追加します。
    • JRE binデ追加ィレクトリをクラスパスに格納します。 このbinは[JDK_INSTALL_LOCATION]/jreディレクトリにあります。
    • JAVA_HOME環境変数を、JDKをインストールしたディレクトリに設定します。

    JDK 1.6には、build.xmlファイルで使用されるwsimportプログラムが含まれています。 JDK 1.5には、このプログラムは含まれていません。

  3. JAX-WSをクライアントコンピューターにインストールします。 (「XML Webサービス用のJava API」を参照)。

  4. JAX-WSとApache Antを使用してJavaプロキシクラスを生成します。 このタスクを実行するAntビルドスクリプトを作成します。 次のスクリプトは、build.xmlという名前のAnt構築スクリプトの例です。

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

    このAnt構築スクリプトでは、urlプロパティが、localhostで実行されているEncryptionサービスWSDLを参照するように設定されています。 usernameプロパティとpasswordプロパティは、有効なAEM formsユーザー名とパスワードに設定する必要があります。 URLにlc_version属性が含まれていることに注意してください。 lc_versionオプションを指定しないと、新しいAEM Formsサービス操作を呼び出すことはできません。

    メモ

    EncryptionServiceを、Javaプロキシクラスを使用して呼び出すAEM Formsサービス名に置き換えます。 例えば、Rights ManagementサービスのJavaプロキシクラスを作成するには、次のように指定します。

     http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
    
  5. BATファイルを作成して、Ant構築スクリプトを実行します。 次のコマンドは、Ant構築スクリプトを実行するBATファイル内にあります。

     ant -buildfile "build.xml" wsdl
    

    ANTビルドスクリプトをC:\Program Files\Java\jaxws-ri\bin directoryフォルダーに配置します。 スクリプトは、にJAVAファイルを書き込みます。/classesフォルダー スクリプトによって、サービスを呼び出すことのできるJAVAファイルが生成されます。

  6. JAVAファイルをJARファイルにパッケージ化します。 Eclipseを使用する場合は、次の手順に従います。

    • プロキシJAVAファイルをJARファイルにパッケージ化するために使用する新しいJavaプロジェクトを作成します。
    • プロジェクトにソースフォルダーを作成します。
    • Sourceフォルダーにcom.adobe.idp.servicesパッケージを作成します。
    • com.adobe.idp.servicesパッケージを選択し、adobe/idp/servicesフォルダーからパッケージにJAVAファイルを読み込みます。
    • 必要に応じて、Sourceフォルダーにorg/apache/xml/xmlsoapパッケージを作成します。
    • ソースフォルダーを選択し、org/apache/xml/xmlsoapフォルダーからJAVAファイルを読み込みます。
    • Javaコンパイラーの準拠レベルを5.0以上に設定します。
    • プロジェクトをビルドします。
    • プロジェクトをJARファイルとしてエクスポートします。
    • このJARファイルをクライアントプロジェクトのクラスパスに読み込みます。 さらに、<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdpartyにあるすべてのJARファイルをインポートします。
    メモ

    「AEM formsによるプログラミング」にあるすべてのJava Webサービスクイック開始(Formsサービスを除く)は、JAX-WSを使用してJavaプロキシファイルを作成します。 また、すべてのJava Webサービスクイック開始では、SwaRefを使用します。 (SwaRefを使用したAEM Formsの呼び出しを参照)。

関連トピック

Apache Axisを使用したJavaプロキシクラスの作成

Base64エンコーディングを使用したAEM Formsの呼び出し

HTTP経由のBLOBデータを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

Apache Axisを使用したJavaプロキシクラスの作成

Apache Axis WSDL2Javaツールを使用して、FormsサービスをJavaプロキシクラスに変換できます。 Formsサービス操作を呼び出すことを可能にするクラスです。 Apache Antを使用して、サービスWSDLからAxisライブラリファイルを生成できます。 Apache AxisはURL https://ws.apache.org/axis/からダウンロードできます。

メモ

Formsサービスに関連付けられているWebサービスクイック開始は、Apache Axisを使用して作成されたJavaプロキシクラスを使用します。 FormsのWebサービスのクイック開始では、エンコーディングタイプとしてBase64も使用します。 (FormsサービスAPIクイック開始を参照)。

次の手順を実行して、Axis Javaライブラリファイルを生成できます。

  1. クライアントコンピューターにApache Antをインストールします。 https://ant.apache.org/bindownload.cgiで入手できます。

    • 追加binディレクトリからクラスパスに移動します。
    • ANT_HOME環境変数をAntをインストールしたディレクトリに設定します。
  2. Apache Axis 1.4をクライアントコンピューターにインストールします。 https://ws.apache.org/axis/で入手できます。

  3. https://ws.apache.org/axis/java/install.htmlにあるAxisのインストール手順に従って、WebサービスクライアントでAxis JARファイルを使用するクラスパスを設定します。

  4. Apache WSDL2Javaツールを軸で使用してJavaプロキシクラスを生成します。 このタスクを実行するAntビルドスクリプトを作成します。 次のスクリプトは、build.xmlという名前のAnt構築スクリプトの例です。

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

    このAnt構築スクリプトでは、urlプロパティが、localhostで実行されているEncryptionサービスWSDLを参照するように設定されています。 usernameプロパティとpasswordプロパティは、有効なAEM formsユーザー名とパスワードに設定する必要があります。

  5. BATファイルを作成して、Ant構築スクリプトを実行します。 次のコマンドは、Ant構築スクリプトを実行するBATファイル内にあります。

     ant -buildfile "build.xml" encryption-wsdl2java-client
    

    JAVAファイルは、C:\JavaFiles folder as specified by the outputプロパティに書き込まれます。 Formsサービスを正常に呼び出すには、これらのJAVAファイルをクラスパスに読み込みます。

    デフォルトでは、これらのファイルはcom.adobe.idp.servicesという名前のJavaパッケージに属しています。 これらのJAVAファイルは、JARファイルに配置することをお勧めします。 次に、JARファイルをクライアントアプリケーションのクラスパスに読み込みます。

    メモ

    .JAVAファイルをJARに配置する方法はいくつかあります。 1つは、EclipseのようなJava IDEを使用する方法です。 Javaプロジェクトを作成し、com.adobe.idp.servicesパッケージを作成します(すべての.JAVAファイルがこのパッケージに属します)。 次に、すべての.JAVAファイルをパッケージにインポートします。 最後に、プロジェクトをJARファイルとしてエクスポートします。

  6. EncryptionServiceLocatorクラスのURLを修正し、エンコーディングタイプを指定します。 例えば、base64を使用するには、?blob=base64を指定して、BLOBオブジェクトがバイナリデータを返すようにします。 つまり、EncryptionServiceLocatorクラスで、次のコード行を探します。

     http://localhost:8080/soap/services/EncryptionService;
    

    次に変更します。

     http://localhost:8080/soap/services/EncryptionService?blob=base64;
    
  7. 次追加のAxis JARファイルをJavaプロジェクトのクラスパスに追加します。

    • activation.jar
    • axis.jar
    • commons-codec-1.3.jar
    • commons-collections-3.1.jar
    • commons-discovery.jar
    • commons-logging.jar
    • dom3-xml-apis-2.5.0.jar
    • jai_imageio.jar
    • jaxen-1.1-beta-9.jar
    • jaxrpc.jar
    • log4j.jar
    • mail.jar
    • saaj.jar
    • wsdl4j.jar
    • xalan.jar
    • xbean.jar
    • xercesImpl.jar

    これらのJARファイルは[install directory]/Adobe/Adobe Experience Manager Forms/sdk/lib/thirdpartyディレクトリにあります。

関連トピック

JAX-WSを使用したJavaプロキシクラスの作成

Base64エンコーディングを使用したAEM Formsの呼び出し

HTTP経由のBLOBデータを使用したAEM Formsの呼び出し

Base64エンコードを使用してAEM Formsを呼び出す

Base64エンコーディングを使用してAEM Formsサービスを呼び出すことができます。 Base64エンコードは、Webサービス呼び出し要求で送信される添付ファイルをエンコードします。 つまり、BLOBデータはBase64エンコードされ、SOAPメッセージ全体ではありません。

「Base64エンコーディングを使用したAEM Formsの呼び出し」では、Base64エンコーディングを使用して、MyApplication/EncryptDocumentという名前のAEM Forms短時間有効プロセスを呼び出す方法について説明します。

メモ

このプロセスは、既存の AEM Forms プロセスに基づいていません。このコードの例の流れを追うには、Workbench を使用して MyApplication/EncryptDocument という名前のプロセスを作成します。(Workbench の使用を参照。)

このプロセスを呼び出すと、次のアクションが実行されます。

  1. プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは SetValue 操作に基づいています。このプロセスの入力パラメーターは、document という名前の inDoc プロセス変数です。
  2. PDF ドキュメントをパスワードで暗号化します。このアクションは PasswordEncryptPDF 操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc という名前のプロセス変数として返されます。

Base64エンコードを使用する.NETクライアントアセンブリの作成

.NETクライアントアセンブリを作成して、Microsoft Visual Studio .NETプロジェクトからFormsサービスを呼び出すことができます。 base64エンコーディングを使用する.NETクライアントアセンブリを作成するには、次の手順を実行します。

  1. AEM Forms呼び出しURLに基づいてプロキシクラスを作成します。
  2. .NETクライアントアセンブリを作成するMicrosoft Visual Studio .NETプロジェクトを作成します。

プロキシクラスの作成

Microsoft Visual Studioに付属のツールを使用して、.NETクライアントアセンブリの作成に使用するプロキシクラスを作成できます。 ツールの名前はwsdl.exeで、Microsoft Visual Studioのインストールフォルダーにあります。 プロキシクラスを作成するには、コマンドプロンプトを開き、wsdl.exeファイルが格納されているフォルダーに移動します。 wsdl.exeツールの詳細については、MSDNヘルプ​を参照してください。

コマンドプロンプトで次のコマンドを入力します。

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

デフォルトでは、このツールは、WSDLの名前に基づいて同じフォルダーにCSファイルを作成します。 この場合、EncryptDocumentService.cs​という名前のCSファイルが作成されます。 このCSファイルを使用して、呼び出しURLで指定されたサービスを呼び出すためのプロキシオブジェクトを作成します。

BLOBオブジェクトがバイナリデータを返すように、プロキシクラスのURLを修正して?blob=base64を含めます。 プロキシクラスで、次のコード行を探します。

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

次に変更します。

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

Base64エンコーディング​を使用したAEM Formsの呼び出しでは、例としてMyApplication/EncryptDocumentが使用されます。 別のFormsサービス用に.NETクライアントアセンブリを作成する場合は、MyApplication/EncryptDocumentを必ずサービス名に置き換えてください。

.NETクライアントアセンブリの開発

.NETクライアントアセンブリを生成するVisual Studioクラスライブラリプロジェクトを作成します。 wsdl.exeを使用して作成したCSファイルは、このプロジェクトに読み込むことができます。 このプロジェクトは、DLLファイル(.NETクライアントアセンブリ)を生成し、他のVisual Studio .NETプロジェクトで使用してサービスを呼び出すことができます。

  1. 開始Microsoft Visual Studio .NET。
  2. クラスライブラリプロジェクトを作成し、DocumentServiceという名前を付けます。
  3. wsdl.exeを使用して作成したCSファイルを読み込みます。
  4. プロジェクト​メニューで、「参照」追加を選択します。
  5. [追加参照]ダイアログボックスで、[System.Web.Services.dll]を選択します。
  6. 」をクリックし、「OK」をクリックします。
  7. プロジェクトをコンパイルしてビルドします。
メモ

この手順では、DocumentService.dllという名前の.NETクライアントアセンブリを作成します。このアセンブリを使用して、MyApplication/EncryptDocumentサービスにSOAP要求を送信できます。

メモ

.NETクライアントアセンブリの作成に使用するプロキシクラスのURLに?blob=base64を追加したことを確認してください。 そうしないと、BLOBオブジェクトからバイナリデータを取得できません。

.NETクライアントアセンブリの参照

新しく作成した.NETクライアントアセンブリを、クライアントアプリケーションを開発するコンピューターに配置します。 .NETクライアントアセンブリをディレクトリに配置した後、プロジェクトから参照できます。 また、プロジェクトからSystem.Web.Servicesライブラリを参照します。 このライブラリを参照しない場合、.NETクライアントアセンブリを使用してサービスを呼び出すことはできません。

  1. プロジェクト​メニューで、「参照」追加を選択します。
  2. .NET」タブをクリックします。
  3. 参照」をクリックし、DocumentService.dllファイルを探します。
  4. 」をクリックし、「OK」をクリックします。

Base64エンコーディングを使用する.NETクライアントアセンブリを使用してサービスを呼び出す

Base64エンコーディングを使用する.NETクライアントアセンブリを使用して、(Workbenchで構築された)MyApplication/EncryptDocumentサービスを呼び出すことができます。 MyApplication/EncryptDocumentサービスを呼び出すには、次の手順を実行します。

  1. MyApplication/EncryptDocumentサービスWSDLを使用するMicrosoft .NETクライアントアセンブリを作成します。
  2. クライアントMicrosoft .NETプロジェクトを作成します。 クライアントプロジェクトでMicrosoft .NETクライアントアセンブリを参照します。 System.Web.Servicesも参照してください。
  3. Microsoft .NETクライアントアセンブリを使用して、MyApplication_EncryptDocumentServiceオブジェクトを作成します。その場合は、デフォルトのコンストラクタを呼び出します。
  4. MyApplication_EncryptDocumentServiceオブジェクトのCredentialsプロパティをSystem.Net.NetworkCredentialオブジェクトで設定します。 System.Net.NetworkCredentialコンストラクター内で、AEM formsユーザー名と対応するパスワードを指定します。 認証値を設定して、.NETクライアントアプリケーションがAEM FormsとSOAPメッセージを正常に交換できるようにします。
  5. コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、MyApplication/EncryptDocumentプロセスに渡されるPDFドキュメントを保存するために使用します。
  6. コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 PDFドキュメントーのファイルの場所とファイルを開くモードを表すstring値を渡します。
  7. System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得して、バイト配列のサイズを決定できます。
  8. System.IO.FileStreamオブジェクトのReadメソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。
  9. BLOBオブジェクトにbinaryDataプロパティを割り当て、バイト配列の内容を指定します。
  10. MyApplication_EncryptDocumentServiceオブジェクトのinvokeメソッドを呼び出し、PDFドキュメントを含むBLOBオブジェクトを渡して、MyApplication/EncryptDocumentプロセスを呼び出します。 このプロセスは、BLOBオブジェクト内の暗号化されたPDFドキュメントを返します。
  11. コンストラクターを呼び出し、パスワードで暗号化されたドキュメントーのファイルの場所を表す文字列値を渡して、System.IO.FileStreamオブジェクトを作成します。
  12. MyApplicationEncryptDocumentServiceオブジェクトのinvokeメソッドから返されるBLOBオブジェクトのデータ内容を格納するバイト配列を作成します。 BLOBオブジェクトのbinaryDataデータメンバの値を取得して、バイト配列を入力します。
  13. コンストラクターを呼び出してSystem.IO.FileStreamオブジェクトを渡し、System.IO.BinaryWriterオブジェクトを作成します。
  14. System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡して、バイト配列の内容をPDFファイルに書き込みます。

JavaプロキシクラスとBase64エンコーディングを使用してサービスを呼び出す

JavaプロキシクラスとBase64を使用して、AEM Formsサービスを呼び出すことができます。 Javaプロキシクラスを使用してMyApplication/EncryptDocumentサービスを呼び出すには、次の手順を実行します。

  1. MyApplication/EncryptDocumentサービスWSDLを使用するJAX-WSを使用して、Javaプロキシクラスを作成します。 次のWSDLエンドポイントを使用します。

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

    メモ

    hiro-xp を、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。

  2. JAX-WSを使用して作成したJavaプロキシクラスをJARファイルにパッケージ化します。

  3. 次のパスにあるJavaプロキシJARファイルとJARファイルを含めます。

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

    をJavaクライアントプロジェクトのクラスパスに追加します。

  4. コンストラクタを使用して MyApplicationEncryptDocumentService オブジェクトを作成します。

  5. MyApplicationEncryptDocumentServiceオブジェクトのgetEncryptDocumentメソッドを呼び出して、MyApplicationEncryptDocumentオブジェクトを作成します。

  6. 次のデータメンバーに値を割り当てて、AEM Formsの呼び出しに必要な接続値を設定します。

    • WSDLの終点とエンコードの種類をjavax.xml.ws.BindingProviderオブジェクトのENDPOINT_ADDRESS_PROPERTYフィールドに割り当てます。 Base64エンコーディングを使用してMyApplication/EncryptDocumentサービスを呼び出すには、次のURL値を指定します。

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

    • AEM formsユーザーをjavax.xml.ws.BindingProviderオブジェクトのUSERNAME_PROPERTYフィールドに割り当てます。

    • 対応するパスワード値をjavax.xml.ws.BindingProviderオブジェクトのPASSWORD_PROPERTYフィールドに割り当てます。

    次のコードの例は、このアプリケーションロジックを示しています。

     //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. コンストラクターを使用してjava.io.FileInputStreamオブジェクトを作成し、MyApplication/EncryptDocumentプロセスに送信するPDFドキュメントを取得します。 PDFドキュメントの場所を指定するstring値を渡します。

  8. バイト配列を作成し、java.io.FileInputStreamオブジェクトの内容を入力します。

  9. コンストラクタを使用して BLOB オブジェクトを作成します。

  10. BLOBオブジェクトを入力するには、setBinaryDataメソッドを呼び出し、バイト配列を渡します。 BLOBオブジェクトのsetBinaryDataは、Base64エンコーディングを使用する場合に呼び出すメソッドです。 サービス要求でのBLOBオブジェクトの供給を参照してください。

  11. MyApplicationEncryptDocumentオブジェクトのinvokeメソッドを呼び出して、MyApplication/EncryptDocumentプロセスを呼び出します。 PDFドキュメントを含むBLOBオブジェクトを渡します。 呼び出しメソッドは、暗号化されたPDFドキュメントを含むBLOBオブジェクトを返します。

  12. BLOBオブジェクトのgetBinaryDataメソッドを呼び出して、暗号化されたPDFドキュメントを含むバイト配列を作成します。

  13. 暗号化されたPDFドキュメントをPDFファイルとして保存します。 バイト配列をファイルに書き込みます。

関連トピック

クイック開始:JavaプロキシファイルとBase64エンコーディングを使用したサービスの呼び出し

Base64エンコーディングを使用する.NETクライアントアセンブリの作成

MTOMを使用してAEM Formsを呼び出す

Webサービス標準のMTOMを使用して、AEM Formsサービスを呼び出すことができます。 この標準は、PDFドキュメントなどのバイナリデータをインターネットまたはイントラネット経由で送信する方法を定義します。 MTOMの特徴はXOP:Include要素の使用です。 この要素は、SOAPメッセージのバイナリ添付ファイルを参照するために、XML Binary Optimized Packaging(XOP)仕様で定義されます。

ここでは、MTOMを使用してMyApplication/EncryptDocumentという名前のAEM Forms短時間のみ有効なプロセスを呼び出す方法について説明します。

メモ

このプロセスは、既存の AEM Forms プロセスに基づいていません。このコードの例の流れを追うには、Workbench を使用して MyApplication/EncryptDocument という名前のプロセスを作成します。(Workbench の使用を参照。)

このプロセスを呼び出すと、次のアクションが実行されます。

  1. プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは SetValue 操作に基づいています。このプロセスの入力パラメーターは、document という名前の inDoc プロセス変数です。
  2. PDF ドキュメントをパスワードで暗号化します。このアクションは PasswordEncryptPDF 操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc という名前のプロセス変数として返されます。
メモ

MTOMのサポートは、バージョン9のAEM Formsで追加されました。

メモ

MTOM送信プロトコルを使用するJAX WSベースのアプリケーションは、送受信データの量が25 MBに制限されます。 この制限は、JAX-WSのバグが原因です。 送受信ファイルの合計サイズが25 MBを超える場合は、MTOM送信プロトコルの代わりにSwaRef送信プロトコルを使用します。 そうしないと、OutOfMemory例外が発生する可能性があります。

ここでは、Microsoft .NETプロジェクト内でMTOMを使用してAEM Formsサービスを呼び出す方法について説明します。 使用される.NETフレームワークは3.5で、開発環境はVisual Studio 2008です。 開発用コンピューターにWeb Service Enhancements (WSE)がインストールされている場合は、それを削除します。 .NET 3.5フレームワークは、Windows Communication Foundation (WCF)という名前のSOAPフレームワークをサポートしています。 MTOMを使用してAEM Formsを呼び出す場合、WCF(WSEではない)のみがサポートされます。

MTOMを使用してサービスを呼び出す.NETプロジェクトを作成する

Webサービスを使用してAEM Formsサービスを呼び出すことができるMicrosoft .NETプロジェクトを作成できます。 まず、Visual Studio 2008を使用してMicrosoft .NETプロジェクトを作成します。 AEM Formsサービスを呼び出すには、プロジェクト内で呼び出すAEM Formsサービスのサービス参照を作成します。 サービス参照を作成する場合、AEM FormsサービスへのURLを指定します。

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

localhostを、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。 MyApplication/EncryptDocumentを呼び出すAEM Formsサービスの名前に置き換えます。 例えば、Rights Management操作を呼び出すには、次のように指定します。

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

lc_versionオプションを使用すると、MTOMなどのAEM Forms機能を使用できます。 lc_versionオプションを指定しないと、MTOMを使用してAEM Formsを呼び出すことはできません。

サービス参照を作成すると、AEM Formsサービスに関連付けられたデータ型を.NETプロジェクト内で使用できるようになります。 AEM Formsサービスを呼び出す.NETプロジェクトを作成するには、次の手順を実行します。

  1. Microsoft Visual Studio 2008を使用して.NETプロジェクトを作成します。

  2. プロジェクト​メニューで、「追加サービスリファレンス」を選択します。

  3. アドレス​ダイアログボックスで、AEM FormsサービスのWSDLを指定します。 例:

     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
  4. 移動」をクリックし、「OK」をクリックします。

.NETプロジェクトでMTOMを使用してサービスを呼び出す

保護されていないPDFドキュメントを受け取り、パスワードで暗号化されたPDFドキュメントを返すMyApplication/EncryptDocumentプロセスを検討します。 MTOMを使用して(Workbenchで構築された)MyApplication/EncryptDocumentプロセスを呼び出すには、次の手順を実行します。

  1. Microsoft .NETプロジェクトを作成します。

  2. MyApplication_EncryptDocumentClientオブジェクトを作成するには、そのデフォルトのコンストラクタを使用します。

  3. System.ServiceModel.EndpointAddressコンストラクターを使用してMyApplication_EncryptDocumentClient.Endpoint.Addressオブジェクトを作成します。 WSDLをAEM Formsサービスに渡し、エンコードの種類を指定するstring値を渡します。

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

    lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます。 ただし、?blob=mtomを必ず指定してください。

    メモ

    hiro-xp を、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。

  4. EncryptDocumentClient.Endpoint.Bindingデータメンバの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

  5. System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingデータメンバをWSMessageEncoding.Mtomに設定します。 この値により、MTOMが使用されます。

  6. 次のタスクを実行して、基本的なHTTP認証を有効にします。

    • AEM formsユーザー名をデータメンバーMyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserNameに割り当てます。
    • 対応するパスワード値をデータメンバMyApplication_EncryptDocumentClient.ClientCredentials.UserName.Passwordに割り当てます。
    • 定数値HttpClientCredentialType.BasicをデータメンバBasicHttpBindingSecurity.Transport.ClientCredentialTypeに割り当てます。
    • 定数値BasicHttpSecurityMode.TransportCredentialOnlyをデータメンバBasicHttpBindingSecurity.Security.Modeに割り当てます。

    次のコードの例は、これらのタスクを示しています。

     //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. コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、MyApplication/EncryptDocumentプロセスに渡すPDFドキュメントの格納に使用されます。

  8. コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 PDFドキュメントーのファイルの場所とファイルを開くモードを表すstring値を渡します。

  9. System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得して、バイト配列のサイズを決定できます。

  10. System.IO.FileStreamオブジェクトのReadメソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。

  11. BLOBオブジェクトに、MTOMデータメンバにバイト配列の内容を割り当てて、オブジェクトを入力します。

  12. MyApplication_EncryptDocumentClientオブジェクトのinvokeメソッドを呼び出して、MyApplication/EncryptDocumentプロセスを呼び出します。 PDFドキュメントを含むBLOBオブジェクトを渡します。 このプロセスは、BLOBオブジェクト内の暗号化されたPDFドキュメントを返します。

  13. コンストラクターを呼び出し、保護されたPDFドキュメントーのファイルの場所を表す文字列値を渡して、System.IO.FileStreamオブジェクトを作成します。

  14. invokeメソッドから返されたBLOBオブジェクトのデータ内容を格納するバイト配列を作成します。 BLOBオブジェクトのMTOMデータメンバの値を取得して、バイト配列を入力します。

  15. コンストラクターを呼び出してSystem.IO.FileStreamオブジェクトを渡し、System.IO.BinaryWriterオブジェクトを作成します。

  16. System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことで、バイト配列の内容をPDFファイルに書き込みます。

メモ

ほとんどのAEM Formsのサービスは、MTOMのクイック開始を備えています。 これらのクイック開始は、サービスの対応するクイック開始セクションで表示できます。 例えば、「Outputのクイック開始」の節を確認するには、Output Service APIのクイック開始を参照してください。

関連トピック

クイック開始:.NETプロジェクトでMTOMを使用してサービスを呼び出す

Webサービスを使用した複数のサービスへのアクセス

人間中心の長期間有効なプロセスを呼び出すASP.NET Webアプリケーションの作成

SwaRefを使用してAEM Formsを呼び出す

SwaRefを使用してAEM Formsサービスを呼び出すことができます。 wsi:swaRef XML要素のコンテンツは、添付ファイルへの参照を格納するSOAP本文内の添付ファイルとして送信されます。 SwaRefを使用してFormsサービスを呼び出す場合は、Java API for XML Web Services(JAX-WS)を使用してJavaプロキシクラスを作成します。 (「XML Webサービス用のJava API」を参照)。

ここでは、SwaRefを使用してMyApplication/EncryptDocumentという名前の以下のForms短時間のみ有効なプロセスを呼び出す方法について説明します。

メモ

このプロセスは、既存の AEM Forms プロセスに基づいていません。このコードの例の流れを追うには、Workbench を使用して MyApplication/EncryptDocument という名前のプロセスを作成します。(Workbench の使用を参照。)

このプロセスを呼び出すと、次のアクションが実行されます。

  1. プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは SetValue 操作に基づいています。このプロセスの入力パラメーターは、document という名前の inDoc プロセス変数です。
  2. PDF ドキュメントをパスワードで暗号化します。このアクションは PasswordEncryptPDF 操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc という名前のプロセス変数として返されます。
メモ

SwaRefのサポートがAEM Formsで追加されました

以下では、Javaクライアントアプリケーション内でSwaRefを使用してFormsサービスを呼び出す方法について説明します。 Javaアプリケーションは、JAX-WSを使用して作成されたプロキシクラスを使用します。

SwaRefを使用するJAX-WSライブラリファイルを使用してサービスを呼び出す

JAX-WSとSwaRefを使用して作成されたJavaプロキシファイルを使用してMyApplication/EncryptDocumentプロセスを呼び出すには、次の手順を実行します。

  1. MyApplication/EncryptDocumentサービスWSDLを使用するJAX-WSを使用して、Javaプロキシクラスを作成します。 次のWSDLエンドポイントを使用します。

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

    詳しくは、JAX-WSを使用したJavaプロキシクラスの作成を参照してください。

    メモ

    hiro-xp を、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。

  2. JAX-WSを使用して作成したJavaプロキシクラスをJARファイルにパッケージ化します。

  3. 次のパスにあるJavaプロキシJARファイルとJARファイルを含めます。

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

    をJavaクライアントプロジェクトのクラスパスに追加します。

  4. コンストラクタを使用して MyApplicationEncryptDocumentService オブジェクトを作成します。

  5. MyApplicationEncryptDocumentServiceオブジェクトのgetEncryptDocumentメソッドを呼び出して、MyApplicationEncryptDocumentオブジェクトを作成します。

  6. 次のデータメンバーに値を割り当てて、AEM Formsの呼び出しに必要な接続値を設定します。

    • WSDLの終点とエンコードの種類をjavax.xml.ws.BindingProviderオブジェクトのENDPOINT_ADDRESS_PROPERTYフィールドに割り当てます。 SwaRefエンコーディングを使用してMyApplication/EncryptDocumentサービスを呼び出すには、次のURL値を指定します。

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

    • AEM formsユーザーをjavax.xml.ws.BindingProviderオブジェクトのUSERNAME_PROPERTYフィールドに割り当てます。

    • 対応するパスワード値をjavax.xml.ws.BindingProviderオブジェクトのPASSWORD_PROPERTYフィールドに割り当てます。

    次のコードの例は、このアプリケーションロジックを示しています。

     //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. コンストラクターを使用してjava.io.Fileオブジェクトを作成し、MyApplication/EncryptDocumentプロセスに送信するPDFドキュメントを取得します。 PDFドキュメントの場所を指定するstring値を渡します。

  8. FileDataSourceコンストラクターを使用してjavax.activation.DataSourceオブジェクトを作成します。 java.io.Fileオブジェクトを渡します。

  9. コンストラクタを使用して javax.activation.DataHandler オブジェクトを渡すことによって、javax.activation.DataSource オブジェクトを作成します。

  10. コンストラクタを使用して BLOB オブジェクトを作成します。

  11. BLOBオブジェクトを入力するには、setSwaRefメソッドを呼び出し、javax.activation.DataHandlerオブジェクトを渡します。

  12. MyApplicationEncryptDocumentオブジェクトのinvokeメソッドを呼び出し、PDFドキュメントを含むBLOBオブジェクトを渡して、MyApplication/EncryptDocumentプロセスを呼び出します。 呼び出しメソッドは、暗号化されたPDFドキュメントを含むBLOBオブジェクトを返します。

  13. javax.activation.DataHandlerオブジェクトのgetSwaRefメソッドを呼び出して、BLOBオブジェクトを入力します。

  14. javax.activation.DataHandlerオブジェクトのgetInputStreamメソッドを呼び出して、javax.activation.DataHandlerオブジェクトをjava.io.InputSteamインスタンスに変換します。

  15. 暗号化されたPDFドキュメントを表すPDFファイルにjava.io.InputSteamインスタンスを書き込みます。

メモ

ほとんどのAEM Formsサービス操作には、SwaRefのクイック開始があります。 これらのクイック開始は、サービスの対応するクイック開始セクションで表示できます。 例えば、「Outputのクイック開始」の節を確認するには、Output Service APIのクイック開始を参照してください。

関連トピック

クイック開始:JavaプロジェクトでのSwaRefを使用したサービスの呼び出し

HTTPを介したBLOBデータを使用したAEM Formsの呼び出し

Webサービスを使用してAEM Formsサービスを呼び出し、HTTP経由でBLOBデータを渡すことができます。 HTTP経由でBLOBデータを渡す方法は、base64エンコード、DIME、またはMIMEを使用する代わりに、代替の方法です。 例えば、Web Service Enhancement 3.0を使用しているMicrosoft .NETプロジェクトで、DIMEやMIMEをサポートしていないデータをHTTP経由で渡すことができます。 HTTP経由でBLOBデータを使用する場合、AEM Formsサービスが呼び出される前に入力データがアップロードされます。

「HTTP経由でのBLOBデータを使用したAEM Formsの呼び出し」では、HTTP経由でBLOBデータを渡すことによって、MyApplication/EncryptDocumentという名前のAEM Forms短時間有効プロセスを呼び出す方法について説明します。

メモ

このプロセスは、既存の AEM Forms プロセスに基づいていません。このコードの例の流れを追うには、Workbench を使用して MyApplication/EncryptDocument という名前のプロセスを作成します。(Workbench の使用を参照。)

このプロセスを呼び出すと、次のアクションが実行されます。

  1. プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは SetValue 操作に基づいています。このプロセスの入力パラメーターは、document という名前の inDoc プロセス変数です。
  2. PDF ドキュメントをパスワードで暗号化します。このアクションは PasswordEncryptPDF 操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc という名前のプロセス変数として返されます。
メモ

SOAPを使用したAEM Formsの呼び出しについて詳しく理解することをお勧めします。 (「Webサービスを使用したAEM Formsの呼び出し」を参照)。

HTTP経由のデータを使用する.NETクライアントアセンブリの作成

HTTP経由でデータを使用するクライアントアセンブリを作成するには、Base64エンコードを使用したAEM Formsの呼び出しで指定したプロセスに従います。 ただし、プロキシクラスのURLを変更して、?blob=base64を含める代わりに?blob=httpを含めるようにします。 この操作により、データはHTTP経由で渡されます。 プロキシクラスで、次のコード行を探します。

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

次に変更します。

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

.NET clientMyApplication/EncryptDocumentアセンブリの参照

新しい.NETクライアントアセンブリを、クライアントアプリケーションを開発するコンピューターに配置します。 .NETクライアントアセンブリをディレクトリに配置した後、プロジェクトから参照できます。 プロジェクトからSystem.Web.Servicesライブラリを参照します。 このライブラリを参照しない場合、.NETクライアントアセンブリを使用してサービスを呼び出すことはできません。

  1. プロジェクト​メニューで、「参照」追加を選択します。
  2. .NET」タブをクリックします。
  3. 参照」をクリックし、DocumentService.dllファイルを探します。
  4. 」をクリックし、「OK」をクリックします。

HTTP経由でBLOBデータを使用する.NETクライアントアセンブリを使用してサービスを呼び出す

HTTP経由でデータを使用する.NETクライアントアセンブリを使用して、(Workbenchで構築された)MyApplication/EncryptDocumentサービスを呼び出すことができます。 MyApplication/EncryptDocumentサービスを呼び出すには、次の手順を実行します。

  1. .NETクライアントアセンブリを作成します。
  2. Microsoft .NETクライアントアセンブリを参照します。 クライアントMicrosoft .NETプロジェクトを作成します。 クライアントプロジェクトでMicrosoft .NETクライアントアセンブリを参照します。 System.Web.Servicesも参照してください。
  3. Microsoft .NETクライアントアセンブリを使用して、MyApplication_EncryptDocumentServiceオブジェクトを作成します。その場合は、デフォルトのコンストラクタを呼び出します。
  4. MyApplication_EncryptDocumentServiceオブジェクトのCredentialsプロパティをSystem.Net.NetworkCredentialオブジェクトで設定します。 System.Net.NetworkCredentialコンストラクター内で、AEM formsユーザー名と対応するパスワードを指定します。 認証値を設定して、.NETクライアントアプリケーションがAEM FormsとSOAPメッセージを正常に交換できるようにします。
  5. コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、MyApplication/EncryptDocumentプロセスにデータを渡すために使用されます。
  6. BLOBオブジェクトのremoteURLデータメンバーに、MyApplication/EncryptDocumentサービスに渡すPDFドキュメントのURIの場所を指定する文字列値を割り当てます。
  7. MyApplication_EncryptDocumentServiceオブジェクトのinvokeメソッドを呼び出し、BLOBオブジェクトを渡して、MyApplication/EncryptDocumentプロセスを呼び出します。 このプロセスは、BLOBオブジェクト内の暗号化されたPDFドキュメントを返します。
  8. コンストラクターを使用し、返されるBLOBオブジェクトのremoteURLデータメンバーの値を渡して、System.UriBuilderオブジェクトを作成します。
  9. System.UriBuilderオブジェクトをSystem.IO.Streamオブジェクトに変換します。 (このリストの後のC#クイック開始は、このタスクの実行方法を示しています)。
  10. バイト配列を作成し、System.IO.Streamオブジェクト内のデータを入力します。
  11. コンストラクターを呼び出してSystem.IO.FileStreamオブジェクトを渡し、System.IO.BinaryWriterオブジェクトを作成します。
  12. System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡して、バイト配列の内容をPDFファイルに書き込みます。

JavaプロキシクラスとBLOBデータを使用してサービスを呼び出す、HTTPを使用

JavaプロキシクラスとBLOBデータをHTTP経由で使用して、AEM Formsサービスを呼び出すことができます。 Javaプロキシクラスを使用してMyApplication/EncryptDocumentサービスを呼び出すには、次の手順を実行します。

  1. MyApplication/EncryptDocumentサービスWSDLを使用するJAX-WSを使用して、Javaプロキシクラスを作成します。 次のWSDLエンドポイントを使用します。

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

    詳しくは、JAX-WSを使用したJavaプロキシクラスの作成を参照してください。

    メモ

    hiro-xp を、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。

  2. JAX-WSを使用して作成したJavaプロキシクラスをJARファイルにパッケージ化します。

  3. 次のパスにあるJavaプロキシJARファイルとJARファイルを含めます。

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

    をJavaクライアントプロジェクトのクラスパスに追加します。

  4. コンストラクタを使用して MyApplicationEncryptDocumentService オブジェクトを作成します。

  5. MyApplicationEncryptDocumentServiceオブジェクトのgetEncryptDocumentメソッドを呼び出して、MyApplicationEncryptDocumentオブジェクトを作成します。

  6. 次のデータメンバーに値を割り当てて、AEM Formsの呼び出しに必要な接続値を設定します。

    • WSDLの終点とエンコードの種類をjavax.xml.ws.BindingProviderオブジェクトのENDPOINT_ADDRESS_PROPERTYフィールドに割り当てます。 BLOB over HTTPエンコーディングを使用してMyApplication/EncryptDocumentサービスを呼び出すには、次のURL値を指定します。

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

    • AEM formsユーザーをjavax.xml.ws.BindingProviderオブジェクトのUSERNAME_PROPERTYフィールドに割り当てます。

    • 対応するパスワード値をjavax.xml.ws.BindingProviderオブジェクトのPASSWORD_PROPERTYフィールドに割り当てます。

    次のコードの例は、このアプリケーションロジックを示しています。

     //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. コンストラクタを使用して BLOB オブジェクトを作成します。

  8. BLOBオブジェクトのsetRemoteURLメソッドを呼び出して、オブジェクトを入力します。 MyApplication/EncryptDocumentサービスに渡すPDFドキュメントのURI位置を指定するstring値を渡します。

  9. MyApplicationEncryptDocumentオブジェクトのinvokeメソッドを呼び出し、PDFドキュメントを含むBLOBオブジェクトを渡して、MyApplication/EncryptDocumentプロセスを呼び出します。 このプロセスは、BLOBオブジェクト内の暗号化されたPDFドキュメントを返します。

  10. 暗号化されたPDFドキュメントを表すデータストリームを格納するバイト配列を作成します。 BLOBオブジェクトのgetRemoteURLメソッドを呼び出します(invokeメソッドから返されるBLOBオブジェクトを使用します)。

  11. コンストラクタを使用して java.io.File オブジェクトを作成します。このオブジェクトは、暗号化されたPDFドキュメントを表します。

  12. コンストラクタを使用して java.io.FileOutputStream オブジェクトを渡すことによって、java.io.File オブジェクトを作成します。

  13. java.io.FileOutputStreamオブジェクトのwriteメソッドを呼び出します。 暗号化されたPDFドキュメントを表すデータストリームを含むbyte配列を渡します。

DIMEを使用してAEM Formsを呼び出す

添付ファイルを含むSOAPを使用して、AEM Formsサービスを呼び出すことができます。 AEM Formsは、MIMEとDIMEの両方のWebサービス標準をサポートしています。 DIMEを使用すると、添付ファイルをエンコードする代わりに、PDFドキュメントなどのバイナリ添付ファイルを呼び出し要求と共に送信できます。 DIMEを使用したAEM Formsの呼び出し​では、DIMEを使用して、次のAEM Formsの短時間有効なプロセスMyApplication/EncryptDocumentを呼び出す方法について説明します。

このプロセスを呼び出すと、次のアクションが実行されます。

  1. プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは SetValue 操作に基づいています。このプロセスの入力パラメーターは、document という名前の inDoc プロセス変数です。
  2. PDF ドキュメントをパスワードで暗号化します。このアクションは PasswordEncryptPDF 操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc という名前のプロセス変数として返されます。

このプロセスは、既存の AEM Forms プロセスに基づいていません。コードの例に従って、Workbenchを使用してMyApplication/EncryptDocumentという名前のプロセスを作成します。 (Workbench の使用を参照。)

メモ

DIMEを使用したAEM Formsサービス操作の呼び出しは非推奨です。 MTOMを使用することをお勧めします。 (MTOMを使用したAEM Formsの呼び出しを参照)。

DIMEを使用する.NETプロジェクトの作成

DIMEを使用してFormsサービスを呼び出すことができる.NETプロジェクトを作成するには、次のタスクを実行します。

  • 開発用コンピューターにWeb Services Enhancements 2.0をインストールします。
  • .NETプロジェクト内で、FormsAEMFormsサービスへのWeb参照を作成します。

Web Services Enhancements 2.0のインストール

Web Services Enhancements 2.0を開発用コンピューターにインストールし、Microsoft Visual Studio .NETと統合します。 Web Services Enhancements 2.0は、Microsoftダウンロードセンターからダウンロードできます。

このWebページで、Web Services Enhancements 2.0を検索し、開発用コンピューターにダウンロードします。 このダウンロードにより、Microsoft WSE 2.0 SPI.msiという名前のファイルがコンピューターに配置されます。 インストールプログラムを実行し、オンラインの指示に従います。

メモ

Web Services Enhancements 2.0はDIMEをサポートします。 Web Services Enhancements 2.0を使用する場合、サポートされるMicrosoft Visual Studioのバージョンは2003です。Web Services Enhancements 3.0はDIMEをサポートしません。しかし、MTOMをサポートしています。

AEM FormsサービスへのWeb参照の作成

Web Services Enhancements 2.0を開発用コンピューターにインストールし、Microsoft .NETプロジェクトを作成したら、FormsサービスへのWeb参照を作成します。 例えば、MyApplication/EncryptDocumentプロセスへのWeb参照を作成し、Formsがローカルコンピューターにインストールされていると仮定するには、次のURLを指定します。

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

Web参照を作成した後、.NETプロジェクト内で使用できるプロキシデータには次の2種類があります。EncryptDocumentServiceEncryptDocumentServiceWse。 DIMEを使用してMyApplication/EncryptDocumentプロセスを呼び出すには、EncryptDocumentServiceWse型を使用します。

メモ

FormsサービスへのWeb参照を作成する前に、プロジェクトでWeb Services Enhancements 2.0を参照していることを確認してください。 (「Web Services Enhancements 2.0のインストール」を参照)。

WSEライブラリの参照

  1. プロジェクトメニューで、「参照」追加を選択します。
  2. [追加参照]ダイアログボックスで、[Microsoft.Web.Services2.dll]を選択します。
  3. System.Web.Services.dllを選択します。
  4. 「選択」をクリックし、「OK」をクリックします。

FormsサービスへのWeb参照の作成

  1. プロジェクトメニューで、「追加Web参照」を選択します。
  2. URLダイアログボックスで、FormsサービスのURLを指定します。
  3. 「Go」をクリックし、「追加Reference」をクリックします。
メモ

.NETプロジェクトでWSEライブラリを使用できるようにしていることを確認します。 Project Explorerで、プロジェクト名を右クリックし、「WSE 2.0を有効にする」を選択します。表示されるダイアログボックスのチェックボックスが選択されていることを確認します。

.NETプロジェクトでDIMEを使用してサービスを呼び出す

DIMEを使用してFormsサービスを呼び出すことができます。 保護されていないPDFドキュメントを受け取り、パスワードで暗号化されたPDFドキュメントを返すMyApplication/EncryptDocumentプロセスを検討します。 DIMEを使用してMyApplication/EncryptDocumentプロセスを呼び出すには、次の手順を実行します。

  1. DIMEを使用してFormsサービスを呼び出せるMicrosoft .NETプロジェクトを作成します。 Web Services Enhancements 2.0が含まれていることを確認し、AEM FormsサービスへのWeb参照を作成します。

  2. MyApplication/EncryptDocumentプロセスにWeb参照を設定した後、デフォルトのコンストラクターを使用してEncryptDocumentServiceWseオブジェクトを作成します。

  3. EncryptDocumentServiceWseオブジェクトのCredentialsデータメンバーに、AEM formsのユーザー名とパスワードの値を指定するSystem.Net.NetworkCredential値を設定します。

  4. コンストラクターを使用し、次の値を渡して、Microsoft.Web.Services2.Dime.DimeAttachmentオブジェクトを作成します。

    • GUID値を指定するstring値。 System.Guid.NewGuid.ToStringメソッドを呼び出して、GUID値を取得できます。
    • コンテンツタイプを指定するstring値。 このプロセスにはPDFドキュメントが必要なので、application/pdfを指定します。
    • TypeFormat定義済みリスト値。 以下のように TypeFormat.MediaType.
    • AEM Formsプロセスに渡すPDFドキュメントの場所を指定するstring値です。
  5. コンストラクタを使用して BLOB オブジェクトを作成します。

  6. 追加Microsoft.Web.Services2.Dime.DimeAttachmentオブジェクトのIdデータメンバ値をBLOBオブジェクトのattachmentIDデータメンバに割り当てることによって、BLOBオブジェクトにDIME添付ファイルを指定します。

  7. EncryptDocumentServiceWse.RequestSoapContext.Attachments.Addメソッドを呼び出し、Microsoft.Web.Services2.Dime.DimeAttachmentオブジェクトを渡します。

  8. EncryptDocumentServiceWseオブジェクトのinvokeメソッドを呼び出し、DIME添付ファイルを含むBLOBオブジェクトを渡して、MyApplication/EncryptDocumentプロセスを呼び出します。 このプロセスは、BLOBオブジェクト内の暗号化されたPDFドキュメントを返します。

  9. 返されたBLOBオブジェクトのattachmentIDデータメンバの値を取得して、添付ファイル識別子の値を取得します。

  10. EncryptDocumentServiceWse.ResponseSoapContext.Attachmentsにある添付ファイルを繰り返し処理し、添付ファイル識別子の値を使用して暗号化されたPDFドキュメントを取得します。

  11. AttachmentオブジェクトのStreamデータメンバの値を取得して、System.IO.Streamオブジェクトを取得します。

  12. バイト配列を作成し、そのバイト配列をSystem.IO.StreamオブジェクトのReadメソッドに渡します。 このメソッドは、暗号化されたPDFドキュメントを表すデータストリームをバイト配列に入力します。

  13. コンストラクターを呼び出し、PDFファイルの場所を表す文字列値を渡して、System.IO.FileStreamオブジェクトを作成します。 このオブジェクトは、暗号化されたPDFドキュメントを表します。

  14. コンストラクターを呼び出してSystem.IO.FileStreamオブジェクトを渡し、System.IO.BinaryWriterオブジェクトを作成します。

  15. System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことで、バイト配列の内容をPDFファイルに書き込みます。

DIMEを使用するApache Axis Javaプロキシクラスの作成

Apache Axis WSDL2Javaツールを使用して、サービスWSDLをJavaプロキシクラスに変換し、サービス操作を呼び出すことができます。 Apache Antを使用すると、AxisライブラリファイルをAEM FormsサービスWSDLから生成して、サービスを呼び出すことができます。 (「Apache Axisを使用したJavaプロキシクラスの作成」を参照)。

Apache Axis WSDL2Javaツールは、SOAP要求をサービスに送信するために使用されるメソッドを含むJAVAファイルを生成します。 サービスが受信したSOAP要求は、軸生成ライブラリによってデコードされ、メソッドと引数に戻されます。

Axis生成ライブラリファイルとDIMEを使用して(Workbenchで構築された)MyApplication/EncryptDocumentサービスを呼び出すには、次の手順を実行します。

  1. Apache Axisを使用してMyApplication/EncryptDocumentサービスWSDLを使用するJavaプロキシクラスを作成します。 (「Apache Axisを使用したJavaプロキシクラスの作成」を参照)。

  2. クラスパスにJavaプロキシクラスを含めます。

  3. コンストラクタを使用して MyApplicationEncryptDocumentServiceLocator オブジェクトを作成します。

  4. コンストラクターを使用し、AEM FormsサービスのWSDL定義を指定する文字列値を渡して、URLオブジェクトを作成します。 SOAPエンドポイントURLの末尾に?blob=dimeを指定していることを確認します。 例えば、

     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
    
  5. コンストラクターを呼び出し、MyApplicationEncryptDocumentServiceLocatorオブジェクトとURLオブジェクトを渡して、EncryptDocumentSoapBindingStubオブジェクトを作成します。

  6. EncryptDocumentSoapBindingStubオブジェクトのsetUsernameメソッドとsetPasswordメソッドを呼び出して、AEM formsのユーザー名とパスワードの値を設定します。

     encryptionClientStub.setUsername("administrator");
     encryptionClientStub.setPassword("password");
    
  7. java.io.Fileオブジェクトを作成して、MyApplication/EncryptDocumentサービスに送信するPDFドキュメントを取得します。 PDFドキュメントーの場所を指定するstring値を渡します。

  8. コンストラクターを使用し、javax.activation.DataHandlerオブジェクトを渡して、javax.activation.FileDataSourceオブジェクトを作成します。 javax.activation.FileDataSourceオブジェクトは、コンストラクターを使用して作成し、PDFドキュメントを表すjava.io.Fileオブジェクトを渡すことで作成できます。

  9. コンストラクターを使用し、org.apache.axis.attachments.AttachmentPartオブジェクトを渡して、javax.activation.DataHandlerオブジェクトを作成します。

  10. EncryptDocumentSoapBindingStubオブジェクトのaddAttachmentメソッドを呼び出し、org.apache.axis.attachments.AttachmentPartオブジェクトを渡して添付ファイルを添付します。

  11. コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトのsetAttachmentIDメソッドを呼び出し、添付ファイル識別子の値を渡すことで、BLOBオブジェクトに添付ファイル識別子の値を入力します。 この値は、org.apache.axis.attachments.AttachmentPartオブジェクトのgetContentIdメソッドを呼び出して取得できます。

  12. EncryptDocumentSoapBindingStubオブジェクトのinvokeメソッドを呼び出して、MyApplication/EncryptDocumentプロセスを呼び出します。 DIME添付ファイルを含むBLOBオブジェクトを渡します。 このプロセスは、BLOBオブジェクト内の暗号化されたPDFドキュメントを返します。

  13. 返されたBLOBオブジェクトのgetAttachmentIDメソッドを呼び出して、添付ファイル識別子の値を取得します。 このメソッドは、返される添付ファイルの識別子の値を表すstring値を返します。

  14. EncryptDocumentSoapBindingStubオブジェクトのgetAttachmentsメソッドを呼び出して添付ファイルを取得します。 このメソッドは、添付ファイルを表すObjectsの配列を返します。

  15. 添付ファイル(Object配列)を繰り返し処理し、添付ファイル識別子の値を使用して暗号化されたPDFドキュメントを取得します。 各要素はorg.apache.axis.attachments.AttachmentPartオブジェクトです。

  16. org.apache.axis.attachments.AttachmentPartオブジェクトのgetDataHandlerメソッドを呼び出して、添付ファイルに関連付けられたjavax.activation.DataHandlerオブジェクトを取得します。

  17. javax.activation.DataHandlerオブジェクトのgetInputStreamメソッドを呼び出して、java.io.FileStreamオブジェクトを取得します。

  18. バイト配列を作成し、そのバイト配列をjava.io.FileStreamオブジェクトのreadメソッドに渡します。 このメソッドは、暗号化されたPDFドキュメントを表すデータストリームをバイト配列に入力します。

  19. コンストラクタを使用して java.io.File オブジェクトを作成します。このオブジェクトは、暗号化されたPDFドキュメントを表します。

  20. コンストラクタを使用して java.io.FileOutputStream オブジェクトを渡すことによって、java.io.File オブジェクトを作成します。

  21. java.io.FileOutputStreamオブジェクトのwriteメソッドを呼び出し、暗号化されたPDFドキュメントを表すデータストリームを含むバイト配列を渡します。

関連トピック

クイック開始:JavaプロジェクトでのDIMEを使用したサービスの呼び出し

SAMLベース認証の使用

AEM Formsでは、サービスを呼び出す際に、様々なwebサービス認証モードをサポートしています。 1つの認証モードでは、Webサービス呼び出しの基本的な認証ヘッダーを使用してユーザー名とパスワードの値の両方を指定します。 AEM Formsは、SAMLアサーションベースの認証もサポートしています。 クライアントアプリケーションがWebサービスを使用してAEM Formsサービスを呼び出す場合、クライアントアプリケーションは次のいずれかの方法で認証情報を提供できます。

  • 基本認証の一部として資格情報を渡す
  • WS-Securityヘッダーの一部としてユーザー名トークンを渡す
  • WS-Securityヘッダーの一部としてSAMLアサーションを渡す
  • WS-Securityヘッダーの一部としてKerberosトークンを渡す

AEM Formsは、標準の証明書ベースの認証をサポートしていませんが、別の形式の証明書ベースの認証をサポートしています。

メモ

「Programming with Grommading with Grommading」のWebサービスのクイック開始では、認証を実行するためのユーザー名とパスワードの値を指定します。

AEM formsユーザーのIDは、秘密キーを使用して署名されたSAMLアサーションを通じて表すことができます。 次のXMLコードは、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>

この例のアサーションは、管理者ユーザーに対して発行されます。 このアサーションには、次の顕著な項目が含まれています。

  • 一定の期間有効です。
  • 特定のユーザーに対して発行されます。
  • デジタル署名されています。 そのため、変更を加えると署名が破損します。
  • これは、ユーザー名やパスワードに類似したユーザーのIDを表すトークンとして、AEM Formsに提示できます。

クライアントアプリケーションは、AuthResultオブジェクトを返す任意のAEM FormsAuthenticationManager APIからアサーションを取得できます。 AuthResultインスタンスを取得するには、次の2つの方法のいずれかを実行します。

  • AuthenticationManager APIによって公開されている任意の認証方法を使用したユーザーの認証。 通常、ユーザー名とパスワードを使用します。ただし、証明書認証を使用することもできます。
  • AuthenticationManager.getAuthResultOnBehalfOfUserメソッドを使用します。 このメソッドを使用すると、クライアントアプリケーションは任意のAEM formsユーザーのAuthResultオブジェクトを取得できます。

AEM formsユーザーは、取得したSAMLトークンを使用して認証できます。 このSAMLアサーション(xmlフラグメント)は、WS-Securityヘッダーの一部として、ユーザー認証用のWebサービス呼び出しと共に送信できます。 通常、クライアントアプリケーションはユーザーを認証していますが、ユーザー資格情報を保存していません。 (または、ユーザーがユーザー名とパスワード以外のメカニズムを使用してそのクライアントにログオンした。) この場合、クライアントアプリケーションは、AEM Formsの呼び出しを許可されている特定のユーザーとして、AEM Formsを呼び出し、偽装する必要があります。

特定のユーザーを装うには、Webサービスを使用してAuthenticationManager.getAuthResultOnBehalfOfUserメソッドを呼び出します。 このメソッドは、そのユーザーのSAMLアサーションを含むAuthResultインスタンスを返します。

次に、SAMLアサーションを使用して、認証が必要なすべてのサービスを呼び出します。 この操作では、SOAPヘッダーの一部としてアサーションを送信します。 このアサーションを使用してWebサービスが呼び出されると、AEM Formsはユーザーをそのアサーションが表すユーザーと見なします。 つまり、アサーションで指定されるユーザーは、サービスを呼び出すユーザーです。

Apache AxisクラスとSAMLベースの認証の使用

Axisライブラリを使用して作成されたJavaプロキシクラスで、AEM Formsサービスを呼び出すことができます。 (「Apache Axisを使用したJavaプロキシクラスの作成」を参照)。

SAMLベースの認証を使用するAXISを使用する場合は、リクエストおよび応答ハンドラーをAxisに登録します。 Apache Axisは、呼び出し要求をAEM Formsに送信する前にハンドラーを呼び出します。 ハンドラーを登録するには、org.apache.axis.handlers.BasicHandlerを拡張するJavaクラスを作成します。

Axisを使用したAssertionHandlerの作成

次のAssertionHandler.javaというJavaクラスは、org.apache.axis.handlers.BasicHandlerを拡張するJavaクラスの例を示しています。

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

ハンドラーの登録

ハンドラーをAxisに登録するには、client-config.wsddファイルを作成します。 デフォルトでは、Axisはこの名前を持つファイルを探します。 次のXMLコードは、client-config.wsddファイルの例です。 詳しくは、Axisのドキュメントを参照してください。

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

AEM Formsサービスの呼び出し

次のコードの例は、SAMLベースの認証を使用してAEM Formsサービスを呼び出します。

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

.NETクライアントアセンブリとSAMLベースの認証の使用

.NETクライアントアセンブリとSAMLベースの認証を使用して、Formsサービスを呼び出すことができます。 そのためには、Web Service Enhancements 3.0(WSE)を使用する必要があります。 WSEを使用する.NETクライアントアセンブリの作成については、DIMEを使用する.NETプロジェクトの作成を参照してください。

メモ

DIMEセクションではWSE 2.0を使用します。SAMLベースの認証を使用するには、DIMEトピックで指定されている手順と同じ手順に従います。 ただし、WSE 2.0をWSE 3.0に置き換えてください。Web Services Enhancements 3.0を開発用コンピューターにインストールし、Microsoft Visual Studio .NETに統合してください。 Web Services Enhancements 3.0は、Microsoftダウンロードセンターからダウンロードできます。

WSEアーキテクチャでは、ポリシー、アサーション、SecurityTokenの各データ型が使用されます。 簡単に言うと、Webサービスの呼び出しの場合は、ポリシーを指定します。 ポリシーには複数のアサーションを含めることができます。 各アサーションにはフィルターを含めることができます。 Webサービス呼び出しの特定のステージでフィルターが呼び出され、その時点でSOAP要求を変更できます。 詳しくは、Web Service Enhancements 3.0のドキュメントを参照してください。

アサーションとフィルターの作成

次のC#コードの例は、フィルタークラスとアサーションクラスを作成します。 次のコードの例は、SamlAssertionOutputFilterを作成します。 このフィルターは、SOAP要求がAEM Formsに送信される前に、WSEフレームワークによって呼び出されます。

 class LCSamlPolicyAssertion : Microsoft.Web.ServicES4.Design.PolicyAssertion
 {
        public override Microsoft.Web.ServicES4.SoapFilter CreateClientOutputFilter(FilterCreationContext context)
        {
           return new SamlAssertionOutputFilter();
        }
        . . .
 }
 
 
 class SamlAssertionOutputFilter : SendSecurityFilter
 {
        public override void SecureMessage(SoapEnvelope envelope, Security security)
        {
           // Get the SamlToken from the SessionState
           SamlToken samlToken = envelope.Context.Credentials.UltimateReceiver.GetClientToken<SamlToken>();
           security.Tokens.Add(samlToken);
        }
 }

SAMLトークンの作成

SAMLアサーションを表すクラスを作成します。 このクラスが実行する主なタスクは、データ値を文字列からxmlに変換し、空白を保持することです。 このアサーションxmlは、後で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);
         }
        . . .
 }

AEM Formsサービスの呼び出し

次のC#コードの例は、SAMLベースの認証を使用してFormsサービスを呼び出します。

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

Webサービスを使用して特定のAEM Formsサービス操作を呼び出すと、問題が発生する場合があります。 この説明の目的は、これらの問題を特定し、解決策がある場合はそれを提供することです。

サービス操作を非同期で呼び出す

Generate PDFのhtmlToPDF操作など、AEM Formsサービス操作を非同期で呼び出そうとすると、SoapFaultExceptionが発生します。 この問題を解決するには、ExportPDF_Result要素と他の要素を異なるクラスにマップするカスタムバインディングXMLファイルを作成します。 次のXMLは、カスタム連結ファイルを表しています。

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

JAX-WSを使用してJavaプロキシファイルを作成する場合は、このXMLファイルを使用します。 (「JAX-WSを使用したJavaプロキシクラスの作成」を参照)。

​- bコマンドラインオプションを使用してJAX-WSツール(wsimport.exe)を実行する場合は、このXMLファイルを参照します。 バインディングXMLファイルのwsdlLocation要素を更新し、AEM FormsのURLを指定します。

非同期呼び出しを確実に動作させるには、エンドポイントURL値を変更し、async=trueを指定します。 例えば、JAX-WSで作成されるJavaプロキシファイルの場合は、BindingProvider.ENDPOINT_ADDRESS_PROPERTYに次のように指定します。

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

次のリストは、非同期に呼び出された場合にカスタム連結ファイルを必要とする他のサービスを指定します。

  • PDFG 3D
  • タスクマネージャ
  • Application Manager
  • ディレクトリマネージャ
  • Distiller
  • Rights Management
  • Document Management

J2EEアプリケーションサーバーの違い

特定のJ2EEアプリケーションサーバーを使用して作成されたプロキシライブラリが、別のJ2EEアプリケーションサーバーでホストされているAEM Formsを正常に呼び出さない場合があります。 WebSphereにデプロイされているAEM Formsを使用して生成されたプロキシライブラリを考えてみましょう。 このプロキシライブラリは、JBoss Application ServerにデプロイされているAEM Formsサービスを正常に呼び出すことができません。

PrincipalReferenceなど、AEM Formsの複合データ型の一部は、AEM FormsがWebSphere上にデプロイされている場合とJBoss Application Serverとで定義が異なります。 異なるJ2EEアプリケーションサービスで使用されるJDKの違いが、WSDL定義に違いがある理由です。 その結果、同じJ2EEアプリケーションサーバーから生成されたプロキシライブラリを使用します。

Webサービスを使用した複数のサービスへのアクセス

名前空間の競合が原因で、複数のサービスWSDL間でデータオブジェクトを共有できません。 データ型を共有できるサービスは異なるので、サービスはWSDLでこれらの型の定義を共有します。 例えば、BLOBデータ型を含む2つの.NETクライアントアセンブリを同じ.NETクライアントプロジェクトに追加することはできません。 これを行うと、コンパイルエラーが発生します。

次のリストは、複数のサービスWSDL間で共有できないデータ型を指定します。

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

この問題を回避するには、データタイプを完全に限定することをお勧めします。 例えば、サービス参照を使用してFormsサービスとSignatureサービスの両方を参照する.NETアプリケーションを考えてみましょう。 両方のサービス参照にはBLOBクラスが含まれます。 BLOBインスタンスを使用するには、宣言時にBLOBオブジェクトを完全に修飾します。 この方法は、次のコード例に示します。 このコード例については、インタラクティブなデジタル署名Formsを参照してください。

以下のC#コードの例は、Formsサービスによってレンダリングされるインタラクティブフォームに署名します。 クライアントアプリケーションには2つのサービス参照があります。 Formsサービスに関連付けられているBLOBインスタンスは、SignInteractiveForm.ServiceReference2名前空間に属しています。 同様に、Signatureサービスに関連付けられているBLOBインスタンスは、SignInteractiveForm.ServiceReference1名前空間に属しています。 署名済みのインタラクティブフォームは、LoanXFASigned.pdf​というPDFファイルとして保存されます。

 ???/**
     * Ensure that you create a .NET project that uses
     * MS Visual Studio 2008 and version 3.5 of the .NET
     * framework. This is required to invoke a
     * AEM Forms service using MTOM.
     *
     * For information, see "Invoking AEM Forms using MTOM" in Programming with AEM forms
     */
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.ServiceModel;
 using System.IO;
 
 //A reference to the Signature service
 using SignInteractiveForm.ServiceReference1;
 
 //A reference to the Forms service
 using SignInteractiveForm.ServiceReference2;
 
 namespace SignInteractiveForm
 {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    //Because BLOB objects are used in both service references
                    //it is necessary to fully-qualify the BLOB objects
 
                    //Retrieve the form -- invoke the Forms service
                    SignInteractiveForm.ServiceReference2.BLOB formData = GetForm();
 
                    //Create a BLOB object associated with the Signature service
                    SignInteractiveForm.ServiceReference1.BLOB sigData = new SignInteractiveForm.ServiceReference1.BLOB();
 
                    //Transfer the byte stream from one Forms BLOB object to the
                    //Signature BLOB object
                    sigData.MTOM = formData.MTOM;
 
                    //Sign the Form -- invoke the Signature service
                    SignForm(sigData);
                }
                catch (Exception ee)
                {
                    Console.WriteLine(ee.Message);
                }
            }
 
            //Creates an interactive PDF form based on a XFA form - invoke the Forms service
            private static SignInteractiveForm.ServiceReference2.BLOB GetForm()
            {
 
                try
                {
                    //Create a FormsServiceClient object
                    FormsServiceClient formsClient = new FormsServiceClient();
                    formsClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/FormsService?blob=mtom");
 
                    //Enable BASIC HTTP authentication
                    BasicHttpBinding b = (BasicHttpBinding)formsClient.Endpoint.Binding;
                    b.MessageEncoding = WSMessageEncoding.Mtom;
                    formsClient.ClientCredentials.UserName.UserName = "administrator";
                    formsClient.ClientCredentials.UserName.Password = "password";
                    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                    b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                    b.MaxReceivedMessageSize = 2000000;
                    b.MaxBufferSize = 2000000;
                    b.ReaderQuotas.MaxArrayLength = 2000000;
 
                    //Create a BLOB to store form data
                    SignInteractiveForm.ServiceReference2.BLOB formData = new SignInteractiveForm.ServiceReference2.BLOB();
                    SignInteractiveForm.ServiceReference2.BLOB pdfForm = new SignInteractiveForm.ServiceReference2.BLOB();
 
                    //Specify a XML form data
                    string path = "C:\\Adobe\Loan.xml";
                    FileStream fs = new FileStream(path, FileMode.Open);
 
                    //Get the length of the file stream
                    int len = (int)fs.Length;
                    byte[] ByteArray = new byte[len];
 
                    fs.Read(ByteArray, 0, len);
                    formData.MTOM = ByteArray;
 
                    //Specify a XML form data
                    string path2 = "C:\\Adobe\LoanSigXFA.pdf";
                    FileStream fs2 = new FileStream(path2, FileMode.Open);
 
                    //Get the length of the file stream
                    int len2 = (int)fs2.Length;
                    byte[] ByteArray2 = new byte[len2];
 
                    fs2.Read(ByteArray2, 0, len2);
                    pdfForm.MTOM = ByteArray2;
 
                    PDFFormRenderSpec renderSpec = new PDFFormRenderSpec();
                    renderSpec.generateServerAppearance = true;
 
                    //Set out parameter values
                    long pageCount = 1;
                    String localValue = "en_US";
                    FormsResult result = new FormsResult();
 
                    //Render an interactive PDF form
                    formsClient.renderPDFForm2(
                        pdfForm,
                        formData,
                        renderSpec,
                        null,
                        null,
                        out pageCount,
                        out localValue,
                        out result);
 
                    //Write the data stream to the BLOB object
                    SignInteractiveForm.ServiceReference2.BLOB outForm = result.outputContent;
                    return outForm;
                }
                catch (Exception ee)
                {
                    Console.WriteLine(ee.Message);
                }
                return null;
            }
 
            //Sign the form -- invoke the Signature service
            private static void SignForm(SignInteractiveForm.ServiceReference1.BLOB inDoc)
            {
 
                try
                {
                    //Create a SignatureServiceClient object
                    SignatureServiceClient signatureClient = new SignatureServiceClient();
                    signatureClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/SignatureService?blob=mtom");
 
                    //Enable BASIC HTTP authentication
                    BasicHttpBinding b = (BasicHttpBinding)signatureClient.Endpoint.Binding;
                    b.MessageEncoding = WSMessageEncoding.Mtom;
                    signatureClient.ClientCredentials.UserName.UserName = "administrator";
                    signatureClient.ClientCredentials.UserName.Password = "password";
                    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                    b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                    b.MaxReceivedMessageSize = 2000000;
                    b.MaxBufferSize = 2000000;
                    b.ReaderQuotas.MaxArrayLength = 2000000;
 
                    //Specify the name of the signature field
                    string fieldName = "form1[0].grantApplication[0].page1[0].SignatureField1[0]";
 
                    //Create a Credential object
                    Credential myCred = new Credential();
                    myCred.alias = "secure";
 
                    //Specify the reason to sign the document
                    string reason = "The document was reviewed";
 
                    //Specify the location of the signer
                    string location = "New York HQ";
 
                    //Specify contact information
                    string contactInfo = "Tony Blue";
 
                    //Create a PDFSignatureAppearanceOptions object
                    //and show date information
                    PDFSignatureAppearanceOptionSpec appear = new PDFSignatureAppearanceOptionSpec();
                    appear.showDate = true;
 
                    //Sign the PDF document
                    SignInteractiveForm.ServiceReference1.BLOB signedDoc = signatureClient.sign(
                        inDoc,
                        fieldName,
                        myCred,
                        HashAlgorithm.SHA1,
                        reason,
                        location,
                        contactInfo,
                        appear,
                        true,
                        null,
                        null,
                        null);
 
                    //Populate a byte array with BLOB data that represents the signed form
                    byte[] outByteArray = signedDoc.MTOM;
 
                    //Save the signed PDF document
                    string fileName = "C:\\Adobe\LoanXFASigned.pdf";
                    FileStream fs2 = new FileStream(fileName, FileMode.OpenOrCreate);
 
                    //Create a BinaryWriter object
                    BinaryWriter w = new BinaryWriter(fs2);
                    w.Write(outByteArray);
                    w.Close();
                    fs2.Close();
                }
 
                catch (Exception ee)
                {
                    Console.WriteLine(ee.Message);
                }
            }
        }
 }
 
 

文字で始まるサービスは、無効なプロキシファイルを生成します

Microsoft .Net 3.5およびWCFを使用する場合、一部のAEM Forms生成プロキシクラスの名前が正しくありません。 この問題は、IBMFilenetContentRepositoryConnector、IDPSchedulerService、または名前が文字Iで開始される他のサービス用にプロキシクラスが作成された場合に発生します。例えば、IBMFileNetContentRepositoryConnectorの場合、生成されたクライアントの名前はBMFileNetContentRepositoryConnectorClientです。 生成されたプロキシクラスにレターIがありません。

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now