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

このドキュメントのサンプルと例は、JEE上のAEM Forms環境に限られています。

サービスコンテナ内のAEM Formsサービスのほとんどは、Webサービスを公開するように設定され、Webサービス定義言語(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 Profile 1.1に準拠しています。 Web Services Interoperability(WSI)は、プラットフォーム間でのWebサービスの相互運用性を促進するオープンスタンダード組織です。 詳しくは、https://www.ws-i.org/を参照してください。

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

  • エンコーディング:ドキュメントエンコーディングとリテラルエンコーディングのみがサポートされます(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 Services​を使用した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サービス機能は、Webサービスを使用してアクセスできます。 例えば、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 Forms Java 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型のインスタンスを作成します。 (Webサービスのクイックスタートの多くは、「AEM formsによるプログラミング」に記載されています)。

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フィールドに添付ファイルIDを設定します。 (Base64エンコーディングを使用したAEM Formsの呼び出しを参照)。
  • リモートURL:データがWebサーバーでホストされ、HTTP URL経由でアクセス可能な場合は、「 」フィールドにHTTP URLを設定 BLOB.remoteURL します。(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エンドポイントはスマート​です。次の条件がtrueの場合、出力ドキュメントは入力ドキュメントと同じ送信プロトコルを使用して返されます。

    • サービスのSOAPエンドポイントパラメーター「出力BLOBオブジェクトのデフォルトプロトコル」が「スマート」に設定されている。

      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 をまたはに設 DIMEMIME し、フィールドで返される添付ファイルIDを持つ、対応する添付ファイルタイプとしてデータを返 BLOB.attachmentID します。SOAPフレームワーク独自のAPIを使用して、添付ファイルからデータを読み取ります。
  • リモートURL:アプリケー blob ションサ http ーバー上のデータを保持し、フィールド内のデータを指すURLを返すには、サフィックスをに設定 BLOB.remoteURL します。
  • MTOMまたはSwaRef:サフィックス blob をまたはに設 mtomswaref して、データを対応する添付ファイルタイプとして返し、添付ファイルIDをまたはフィールド BLOB.MTOM で返 BLOB.swaRef します。SOAPフレームワークのネイティブAPIを使用して、添付ファイルからデータを読み取ります。
メモ

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

メモ

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

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

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

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

Webサービスのデータ型

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

Javaデータ型

Webサービスのデータ型

java.lang.byte[]

xsd:base64Binary

java.lang.Boolean

xsd:boolean

java.util.Date

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

<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

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

<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

サービスWSDLで次のように定義されるapachesoap:Map:

<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

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

<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.documentフィールドにXMLデータを渡します。

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

org.w3c.dom.Element

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

<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.elementフィールドにXMLデータを渡します。

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サービス名に置き換えます。 例えば、プロキシサービスのJavaRights Managementクラスを作成するには、次のように指定します。

     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プロジェクトを作成します。
    • プロジェクトにソースフォルダーを作成します。
    • ソースフォルダーにcom.adobe.idp.servicesパッケージを作成します。
    • com.adobe.idp.servicesパッケージを選択し、JAVAファイルをadobe/idp/servicesフォルダーからパッケージにインポートします。
    • 必要に応じて、ソースフォルダーに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 Service 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. Javaプロキシクラスを生成するには、AxisのApache WSDL2Javaツールを使用します。 このタスクを実行する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 Encoding​を使用した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クライアントアセンブリを作成します。このアセンブリを使用して、SOAP要求をMyApplication/EncryptDocumentサービスに送信できます。

メモ

.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. コンストラクターを呼び出し、パスワードで暗号化されたドキュメントのファイルの場所を表すstring値を渡すことで、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. setBinaryDataメソッドを呼び出し、バイト配列を渡すことで、BLOBオブジェクトを設定します。 BLOBオブジェクトのsetBinaryDataは、Base64エンコーディングを使用する際に呼び出すメソッドです。 サービス・リクエストでのBLOBオブジェクトの提供を参照してください。

  11. MyApplicationEncryptDocumentオブジェクトのinvokeメソッドを呼び出して、MyApplication/EncryptDocumentプロセスを呼び出します。 PDFドキュメントを含むBLOBオブジェクトを渡します。 invokeメソッドは、暗号化された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のサポートは、AEM Forms(バージョン9)で追加されました。

メモ

MTOM送信プロトコルを使用するJAX WSベースのアプリケーションは、送受信データが25 MBに制限されます。 この制限は、JAX-WSのバグが原因です。 送受信ファイルの合計サイズが25MBを超える場合は、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サービスAPIのクイックスタート」を参照してください。

関連トピック

クイックスタート:.NETプロジェクトでのMTOMを使用したサービスの呼び出し

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

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

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

SwaRefを使用してAEM Formsサービスを呼び出すことができます。 wsi:swaRef XML要素のコンテンツは、添付ファイルへの参照を格納するSOAP本文内の添付ファイルとして送信されます。 SwaRefを使用してFormsサービスを呼び出す場合は、XML Webサービス用Java API(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 という名前のプロセス変数として返されます。
メモ

AEM FormsでのSwaRefのサポートの追加

以下では、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. setSwaRefメソッドを呼び出してjavax.activation.DataHandlerオブジェクトを渡すことで、BLOBオブジェクトを設定します。

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

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

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

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

メモ

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

関連トピック

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

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

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

「BLOB Data over HTTPを使用した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. MyApplication/EncryptDocumentサービスに渡すPDFドキュメントのURIの場所を指定するBLOBオブジェクトのremoteURLデータメンバーに文字列値を割り当てます。
  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ファイルに書き込みます。

HTTPを介したJavaプロキシクラスとBLOBデータを使用したサービスの呼び出し

JavaプロキシクラスとHTTP経由でのBLOBデータを使用して、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. setRemoteURLメソッドを呼び出して、BLOBオブジェクトを設定します。 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ドキュメントを表すデータストリームを含むバイト配列を渡します。

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

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

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

  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プロジェクト内から、FormsAEM FormsサービスへのWeb参照を作成します。

Webサービス拡張機能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参照を作成した後、次の2つのプロキシデータ型を.NETプロジェクト内で使用できます。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. 「移動」をクリックし、「参照を追加」をクリックします。
メモ

.NETプロジェクトでWSEライブラリを使用できるようにしてください。 プロジェクトエクスプローラ内で、プロジェクト名を右クリックし、「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データメンバに割り当てて、DIME添付ファイルをBLOBオブジェクトに追加します。

  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を使用して、サービスを呼び出すAEM FormsサービスWSDLからAxisライブラリファイルを生成できます。 (Apache Axisを使用したJavaプロキシクラスの作成を参照)。

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

軸生成ライブラリファイルと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は、標準の証明書ベースの認証をサポートしていませんが、別の形式の証明書ベースの認証をサポートしています。

メモ

「 AEM Formsでのプログラミング」の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 Forms AuthenticationManager APIからアサーションを取得できます。 AuthResultインスタンスを取得するには、次の2つの方法のいずれかを実行します。

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

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

軸を持つ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アーキテクチャでは、ポリシー、アサーション、セキュリティトークンの各データ型を使用します。 Webサービスの呼び出しに対して、ポリシーを指定します。 1つのポリシーに複数のアサーションを設定できます。 各アサーションには、フィルターを含めることができます。 フィルターは、Webサービス呼び出しの特定のステージで呼び出され、その時点でSOAP要求を変更できます。 詳しくは、 Webサービスの機能強化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
  • タスクマネージャー
  • アプリケーションマネージャー
  • ディレクトリマネージャー
  • 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);
                }
            }
        }
 }
 
 

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

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

このページ