Web サービスを使用した 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 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_serverhost は、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスを表します。
  • your_port は、J2EEアプリケーションサーバーが使用するHTTPポートを表します。
  • service_name は、サービス名を表します。
  • version は、サービスのターゲットバージョンを表します(デフォルトでは、最新のサービスバージョンが使用されます)。
  • 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
メモ

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

WebサービスBLOBデータ型

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

オブ 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経由でアクセスできる場合は、フィールドに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エンドポイントがスマート。 次の条件が真の場合、出力ドキュメントは入力ドキュメントと同じ送信プロトコルを使用して返されます。

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

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

    • 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 オブジェクトを埋め込む場合は、30 MBを超えないようにして setBinaryData ください。 そうしないと、 OutOfMemory 例外が発生する可能性があります。

メモ

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

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

MTOMプロトコルは、 BLOB オブジェクトに加えて、複合型のバイト配列パラメータまたはバイト配列フィールドをサポートします。 つまり、MTOMをサポートするクライアントSOAPフレームワークは、(base64エンコードされたテキストではなく)任意の xsd:base64Binary 要素をMTOM添付ファイルとして送信できます。 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

サービス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 フィールドを設定するとランタイムの例外が発生します。 サービスがaを返す場合 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

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

<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"/>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E<element%20name=?lang=ja"value" nillable="true" type="xsd:anyType"/>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E</sequence>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E</complexType>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E<complexType%20name=?lang=ja"Map">

<sequence>

<element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem"/>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E</sequence>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E</complexType>%3C/code%3E%3C/p%3E%3Cp%3E%3Ccode%3E</schema>%3C/code%3E%3C/p%3E%3Cp%3E%E3%83%9E%E3%83%83%E3%83%97%E3%81%AF%E3%80%81%E3%82%AD%E3%83%BC/%E5%80%A4%E3%81%AE%E3%83%9A%E3%82%A2%E3%81%AE%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E3%81%A8%E3%81%97%E3%81%A6%E8%A1%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%3C/p%3E%3C/td%3E%20%20%3C/tr%3E%20%20%3Ctr%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3Ejava.lang.Object%3C/code%3E%3C/p%3E%3C/td%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3E$1%3C/code%3E%3C/p%3E%3C/td%3E%20%20%3C/tr%3E%20%20%3Ctr%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3Ejava.lang.Short%3C/code%3E%3C/p%3E%3C/td%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3Exsd:short%3C/code%3E%3C/p%3E%3C/td%3E%20%20%3C/tr%3E%20%20%3Ctr%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3Ejava.lang.String%3C/code%3E%3C/p%3E%3C/td%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3Exsd:string%3C/code%3E%3C/p%3E%3C/td%3E%20%20%3C/tr%3E%20%20%3Ctr%3E%20%20%20%3Ctd%3E%3Cp%3E%3Ccode%3Eorg.w3c.dom.Document%3C/code%3E%3C/p%3E%3C/td%3E%20%20%20%3Ctd%3E%3Cp%3EXML%E5%9E%8B%E3%80%82%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9WSDL%E3%81%A7%E6%AC%A1%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%3C/p%3E%3Cp%3E%3Ccode%3E<complexType%20name=?lang=ja"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 フィールドを設定すると、ランタイム例外が発生します。 サービスがXMLを返す場合 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 フィールドを設定すると、ランタイム例外が発生します。 サービスがXMLデータを返す場合 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をインストールしたディレクトリに設定します。 ANT_HOME
  2. JDK 1.6以降をインストールします。

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

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

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

  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サービス操作を呼び出すことはできません。

    メモ

    Javaプロキシクラス EncryptionServiceを使用して呼び出す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はhttps://ws.apache.org/axis/のURLからダウンロードでき ます

メモ

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

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

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

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

  3. WebサービスクライアントでAxis JARファイルを使用するためのクラスパスを設定します。詳しくは、https://ws.apache.org/axis/java/install.htmlのAxisインストール手順を参照してく ださい

  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ファイルをクラスパスに読み込みます。

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

    メモ

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

  6. クラス内のURLを修正して、エンコーディングタイプを指定します。 EncryptionServiceLocator 例えば、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エンコーディングを使用して名前が付けられた、次のAEM Formsの短時間のみ有効なプロセス MyApplication/EncryptDocument を呼び出す方法について説明します。

メモ

このプロセスは、既存の 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で指定されたサービスを呼び出すためのプロキシオブジェクトを作成します。

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

 "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. Click Select and then click OK.
  7. プロジェクトをコンパイルしてビルドします。
メモ

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

メモ

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

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

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

  1. [ プロジェクト]メニューで、[​参照]を選択します。
  2. Click the .NET tab.
  3. 参照 」をクリックし、DocumentService.dllファイルを探します。
  4. Click Select and then click OK.

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

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

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

    メモ

    AEM Forms hiro-xpをホストする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. オブジェクトの MyApplicationEncryptDocument メソッドを呼び出して、 MyApplicationEncryptDocumentService オブジェクトを作成 getEncryptDocument します。

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

  8. バイト配列を作成し、 java.io.FileInputStream オブジェクトのコンテンツを設定します。

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

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

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

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

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

関連トピック

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

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

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

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

The discussion here is about using MTOM to invoke the following AEM Forms short-lived process named MyApplication/EncryptDocument.

メモ

このプロセスは、既存の 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

AEM Forms localhost をホストする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. Click Go and then click OK.

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

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

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

  2. Create a MyApplication_EncryptDocumentClient object by using its default constructor.

  3. Create a MyApplication_EncryptDocumentClient.Endpoint.Address object by using the System.ServiceModel.EndpointAddress constructor. WSDLをAEM Formsサービスに渡し、エンコードの種類を指定するstring値を渡します。

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

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

    メモ

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

  4. データメンバの値を取得して、 System.ServiceModel.BasicHttpBinding オブジェクトを作成し EncryptDocumentClient.Endpoint.Binding ます。 戻り値を 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 オブジェクトは、プロセスに渡すPDFドキュメントの格納に使用され MyApplication/EncryptDocument ます。

  8. Create a System.IO.FileStream object by invoking its constructor. PDFドキュメントーのファイルの場所とファイルを開くモードを表すstring値を渡します。

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

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

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

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

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

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

  15. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.

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

メモ

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

関連トピック

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

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

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

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

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

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

メモ

このプロセスは、既存の 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プロキシクラスの 作成」を参照してください。

    メモ

    AEM Forms hiro-xpをホストする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. オブジェクトの MyApplicationEncryptDocument メソッドを呼び出して、 MyApplicationEncryptDocumentService オブジェクトを作成 getEncryptDocument します。

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

  8. Create a javax.activation.DataSource object by using the FileDataSource constructor. Pass the java.io.File object.

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

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

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

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

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

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

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

メモ

ほとんどの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データを渡すことで名前付けられた、以下のAEM Forms短時間プロセス MyApplication/EncryptDocument を呼び出す方法について説明しています。

メモ

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

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

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

SOAPを使用したAEM Formsの呼び出しについて詳しく理解することをお勧めします。 (See Invoking AEM Forms using Web Services.)

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

HTTP経由でデータを使用するクライアントアセンブリを作成するには、「Base64エンコーディングを使用したAEM Formsの 呼び出し」で指定したプロセスに従います。 ただし、プロキシクラスのURLを修正して、の ?blob=http 代わりにを含めるようにし ?blob=base64ます。 この操作により、データは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. Click the .NET tab.
  3. 参照 」をクリックし、DocumentService.dllファイルを探します。
  4. Click Select and then click 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 ェクトに設定します。 コンストラクター内で、AEM formsユーザー名と対応するパスワードを指定し System.Net.NetworkCredential ます。 認証値を設定して、.NETクライアントアプリケーションがAEM FormsとSOAPメッセージを正常に交換できるようにします。
  5. コンストラクタを使用して BLOB オブジェクトを作成します。この BLOB オブジェクトは、プロセスにデータを渡すために使用され MyApplication/EncryptDocument ます。
  6. サー BLOB ビスに渡すPDFドキュメントのURIの場所を指定する、 remoteURL オブジェクトの MyApplication/EncryptDocumentデータメンバーに文字列値を割り当てます。
  7. オブジェクトの MyApplication/EncryptDocument メソッドを呼び出し、オブジェクトを渡して、 MyApplication_EncryptDocumentService invoke BLOB プロセスを呼び出します。 このプロセスは、暗号化されたPDFドキュメントを BLOB オブジェクト内で返します。
  8. コンストラクターを使用し、返される System.UriBuilder オブジェクトの BLOB remoteURL データメンバーの値を渡して、オブジェクトを作成します。
  9. オブジェクト System.UriBuilder をオブジェクトに変換し System.IO.Stream ます。 (このリストの後のC#クイック開始は、このタスクの実行方法を示しています)。
  10. バイト配列を作成し、 System.IO.Stream オブジェクト内のデータを使用して配置します。
  11. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.
  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プロキシクラスの 作成」を参照してください。

    メモ

    AEM Forms hiro-xpをホストする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. オブジェクトの MyApplicationEncryptDocument メソッドを呼び出して、 MyApplicationEncryptDocumentService オブジェクトを作成 getEncryptDocument します。

  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 ます。 サービスに渡すPDFドキュメントのURI位置を指定するstring値を渡し MyApplication/EncryptDocument ます。

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

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

  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 プロセスに基づいていません。To follow along with the code examples, create a process named MyApplication/EncryptDocument using Workbench. (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参照を作成します。 例えば、プロセスへのWeb参照を作成し、Formsがローカルコンピューターにインストールされていることを前提として、次のURLを指定します。 MyApplication/EncryptDocument

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

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

  4. Create a Microsoft.Web.Services2.Dime.DimeAttachment object by using its constructor and passing the following values:

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

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

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

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

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

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

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

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

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

  14. Create a System.IO.BinaryWriter object by invoking its constructor and passing the System.IO.FileStream object.

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

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. コンストラクターを呼び出し、 EncryptDocumentSoapBindingStub オブジェクトとオブジ MyApplicationEncryptDocumentServiceLocatorェクトを渡して、オブジ URL ェクトを作成します。

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

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

  8. Create a javax.activation.DataHandler object by using its constructor and passing a javax.activation.FileDataSource object. この javax.activation.FileDataSource オブジェクトは、コンストラクターを使用し、PDFドキュメントを表す java.io.File オブジェクトを渡すことで作成できます。

  9. Create an org.apache.axis.attachments.AttachmentPart object by using its constructor and passing the javax.activation.DataHandler object.

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

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

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

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

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

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

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

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

  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からアサーションを取得できます。 次の2つの方法のいずれかを実行して、 AuthResult インスタンスを取得できます。

  • 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に送信する前にハンドラーを呼び出します。 ハンドラーを登録するには、拡張するJavaクラスを作成し org.apache.axis.handlers.BasicHandlerます。

Axisを使用したAssertionHandlerの作成

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

 public class AssertionHandler extends BasicHandler {
        public void invoke(MessageContext ctx) throws AxisFault {
            String assertion = (String) ctx.getProperty(LC_ASSERTION);
 
            //no assertion hence nothing to insert
            if(assertion == null) return;
 
            try {
                MessageElement samlElement = new MessageElement(convertToXML(assertion));
                SOAPHeader header = (SOAPHeader) ctx.getRequestMessage().getSOAPHeader();
                //Create the wsse:Security element which would contain the SAML element
                SOAPElement wsseHeader = header.addChildElement("Security", "wsse", WSSE_NS);
                wsseHeader.appendChild(samlElement);
                //remove the actor attribute as in LC we do not specify any actor. This would not remove the actor attribute though
                //it would only remove it from the soapenv namespace
                wsseHeader.getAttributes().removeNamedItem("actor");
            } catch (SOAPException e) {
                throw new AxisFault("Error occured while adding the assertion to the SOAP Header",e);
            }
        }
 }

ハンドラーの登録

ハンドラーを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の操作など、AEM Formsサービスの操作を非同期で呼び出そうとすると、 htmlToPDF が発生 SoapFaultException します。 この問題を解決するには、要素と他の要素を異なるクラスにマップするカスタムバインディングXMLファイルを作成し ExportPDF_Result ます。 次の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プロキシクラスの 作成」を参照)。

JAX-WSツール(wsimport.exe)を実行する際に、- b コマンドラインオプションを使用してこの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サービスを正常に呼び出すことができません。

例えば、AEM Formsの複合データ型の一部 PrincipalReferenceは、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アプリケーションを考えてみましょう。 両方のサービス参照には、1つの 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がありません。

このページ