Web サービスを使用した AEM Forms の呼び出し invoking-aem-forms-using-web-services
このドキュメントのサンプルと例は、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 Basic Profile に準拠した推奨エンコーディング)のみがサポートされます(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 Security SOAP ヘッダーの一部としてユーザー名とパスワードを送信する標準的な方法です。AEM Forms は、HTTP 基本認証もサポートしています。秒
Web サービスを使用して AEM Forms サービスを呼び出すには、通常、サービス WSDL を使用するプロキシライブラリを作成します。この Web サービスを使用した AEM Forms の呼び出し 節では、JAX-WS を使用して Java プロキシクラスを作成し、サービスを呼び出します(JAX-WS を使用した Java プロキシクラスの作成を参照)。
以下の URL 定義を指定して、サービス WDSL を取得できます(括弧で囲まれた項目は任意です)。
https://<your_serverhost>:<your_port>/soap/services/<service_name>?wsdl[&version=<version>][&async=true|false][lc_version=<lc_version>]
各パラメーターの意味は次のとおりです。
- your_serverhost は、AEM Forms をホストする J2EE アプリケーションサーバーの IP アドレスを表します。
- your_port は、J2EE アプリケーションサーバーが使用する HTTP ポートを表します。
- service_name は、サービス名を表します。
- version は、サービスのターゲットバージョンを表します(デフォルトでは最新のサービスバージョンが使用されます)。
async
はtrue
値を指定して、非同期呼び出しの追加操作を有効にします(デフォルトではfalse
)。- lc_version は、呼び出す AEM Forms のバージョンを表します。
以下の表に、サービスの WSDL 定義を示します(AEM Forms がローカルホストにデプロイされ、投稿数が 8080 である場合)。
http://localhost:8080/soap/services/ AssemblerService?wsdl
http://localhost:8080/soap/services/BackupService?wsdl
http://localhost:8080/soap/services/ BarcodedFormsService?wsdl
http://localhost:8080/soap/services/ ConvertPDFService?wsdl
http://localhost:8080/soap/services/ DistillerService?wsdl
http://localhost:8080/soap/services/DocConverterService?WSDL
http://localhost:8080/soap/services/DocumentManagementService?WSDL
http://localhost:8080/soap/services/EncryptionService?wsdl
http://localhost:8080/soap/services/FormsService?wsdl
http://localhost:8080/soap/services/FormDataIntegration?wsdl
http://localhost:8080/soap/services/ GeneratePDFService?wsdl
http://localhost:8080/soap/services/Generate3dPDFService?WSDL
http://localhost:8080/soap/services/ OutputService?wsdl
http://localhost:8080/soap/services/ PDFUtilityService?wsdl
http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl
http://localhost:8080/soap/services/ RepositoryService?wsdl
http://localhost:8080/soap/services/ RightsManagementService?wsdl
http://localhost:8080/soap/services/ SignatureService?wsdl
http://localhost:8080/soap/services/ XMPUtilityService?wsdl
AEM Forms Process WSDL の定義
Workbench で作成されたプロセスに属する WSDL にアクセスするには、WSDL 定義内でアプリケーション名とプロセス名を指定します。アプリケーション名が MyApplication
で、プロセス名が EncryptDocument
であると仮定します。この場合、以下の WSDL 定義を指定します。
http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl
MyApplication/EncryptDocument
短時間のみ有効なプロセスの例について詳しくは、短時間のみ有効なプロセスの例 を参照してください。 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
タイプのインスタンスを、アプリケーションロジック内に作成します。(AEM Forms によるプログラミング にある web サービスのクイックスタートの多くは、BLOB データタイプの操作方法を示します)。
BLOB
インスタンスに属するフィールドには、次のように値を割り当てます。
- Base64:データを Base64 形式でエンコードされたテキストとして渡すには、
BLOB.binaryData
フィールドにデータを設定し、BLOB.contentType
フィールドに MIME 形式でデータタイプ(例:application/pdf
)を設定します。(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
オブジェクトの送信プロトコルは、いくつかの要因に依存しますが、これは次の順序で考慮され、主な条件が満たされた場合に停止します。
-
ターゲット URL は送信プロトコルを指定します。SOAP 呼び出しで指定されたターゲット URL に
blob="
BLOB_TYPE というパラメーターでが含まれる場合、BLOB_TYPE は送信プロトコルを決定します。BLOB_TYPE は、base64、dime、mime、http、mtom や swaref のプレースホルダーです。 -
サービス SOAP エンドポイントがスマートです。次の条件が true の場合、出力ドキュメントは入力ドキュメントと同じ送信プロトコルを使用して返されます。
-
サービスの SOAP エンドポイントパラメーターの出力 BLOB オブジェクトのデフォルトプロトコルは、スマートに設定されています。
SOAP エンドポイントを持つ各サービスについて、管理コンソールを使用すると、返された Blob の送信プロトコルを指定できます。(管理ヘルプを参照してください)。
-
AEM Forms サービスは、1 つ以上のドキュメントを入力として取得します。
-
-
サービス SOAP エンドポイントがスマートではありません。設定されたプロトコルがドキュメント送信プロトコルを決定し、データは対応する
BLOB
フィールドに返されます。例えば、SOAP エンドポイントが DIME に設定されている場合、返される BLOB は入力ドキュメントの送信プロトコルに関係なく、blob.attachmentID
フィールドにあります。 -
それ以外の場合。サービスがドキュメントタイプを入力として取得しない場合、出力ドキュメントは HTTP プロトコル経由で
BLOB.remoteURL
のフィールドに返されます。
最初の条件で説明したように、以下のようなサフィックスを付けて SOAP エンドポイント URL を拡張することで、返されるドキュメントの送信タイプを確認できます。
https://<your_serverhost>:<your_port>/soap/services/<service
name>?blob=base64|dime|mime|http|mtom|swaref
次に、送信タイプとデータの取得元のフィールドとの相関性を示します。
- Base64 形式:
blob
サフィックスをbase64
に設定すると、BLOB.binaryData
フィールドのデータが返されます。 - MIME または DIME 添付ファイル:
blob
サフィックスをDIME
またはMIME
に設定すると、BLOB.attachmentID
フィールドに返された添付ファイルの識別情報と併せて、データを対応する添付ファイルタイプとして返します。SOAP フレームワーク独自の API を使用して、添付ファイルからデータを読み取ります。 - リモート URL:
blob
サフィックスをhttp
に設定すると、アプリケーションサーバー上のデータを保持し、BLOB.remoteURL
フィールドにあるデータを指す URL を返します。 - MTOM または SwaRef:
blob
サフィックスをmtom
またはswaref
に設定すると、BLOB.MTOM
またはBLOB.swaRef
フィールドに返された添付ファイルの識別情報と併せて、データを対応する添付ファイルタイプとして返します。SOAP フレームワークのネイティブ API を使用して、添付ファイルからデータを読み取ります。
BLOB
オブジェクトの setBinaryData
メソッドを呼び出して入力する場合、30 MB を超えないようにすることが推奨されます。超えてしまうと、OutOfMemory
例外が発生する可能性があります。OutOfMemory
例外が発生する可能性があります。base64 でエンコードされたバイト配列の MTOM 送信
さらに BLOB
オブジェクトの場合、MTOM プロトコルは、任意の複合型の byte-array パラメーターまたは byte-array フィールドをサポートします。つまり、MTOM をサポートするクライアント SOAP フレームワークは、任意の xsd:base64Binary
要素を(base64 エンコードされたテキストの代わりに)MTOM 添付ファイルとして送信します。AEM Forms SOAP エンドポイントは、この種のバイト配列エンコーディングを読み取ることができます。ただし AEM Forms サービスは常に、base64 エンコードされたテキストとしてバイト配列型を返します。出力バイト配列パラメーターは MTOM をサポートしていません。
大量のバイナリデータを返す AEM Forms サービスでは、バイト配列タイプではなく Document/BLOB タイプを使用します。このドキュメントタイプは、大量のデータを送信する場合に、より効率的です。
Web サービスのデータタイプ web-service-data-types
次の表に、Java データタイプと、対応する web サービスデータタイプを示します。
java.lang.byte[]
xsd:base64Binary
java.lang.Boolean
xsd:boolean
java.util.Date
この DATE
タイプは、サービス WSDL で次のように定義されています。
<complexType name="DATE">
<sequence>
<element maxOccurs="1" minOccurs="0" name="date" ``type="xsd:dateTime" />
<element maxOccurs="1" minOccurs="0" name="calendar" ``type="xsd:dateTime" />
</sequence>
</complexType>
AEM Forms サービスの操作で java.util.Date
値を入力として取得する場合、SOAP クライアントアプリケーションは、日付を DATE.date
フィールドに渡す必要があります。この場合、DATE.calendar
フィールドを設定すると、ランタイム例外が発生します。サービスが java.util.Date
を返す場合、日付は DATE.date
フィールドに返されます。
java.util.Calendar
この DATE
タイプは、サービス WSDL で次のように定義されます。
<complexType name="DATE">
<sequence>
<element maxOccurs="1" minOccurs="0" name="date" ``type="xsd:dateTime" />
<element maxOccurs="1" minOccurs="0" name="calendar" ``type="xsd:dateTime" />
</sequence>
</complexType>
AEM Forms サービスの操作で java.util.Calendar
値を入力として取得する場合、SOAP クライアントアプリケーションは、日付を DATE.caledendar
フィールドに渡す必要があります。この場合、DATE.date
フィールドを設定すると、ランタイム例外が発生します。サービスが java.util.Calendar
を返す場合、日付が DATE.calendar
フィールドに返されます。
java.math.BigDecimal
xsd:decimal
com.adobe.idp.Document
BLOB
java.lang.Double
xsd:double
java.lang.Float
xsd:float
java.lang.Integer
xsd:int
java.util.List
MyArrayOf_xsd_anyType
java.lang.Long
xsd:long
java.util.Map
この apachesoap:Map
サービスは、WSDL で次のように定義されます。
<schema elementFormDefault="qualified" targetNamespace="https://xml.apache.org/xml-soap" xmlns="https://www.w3.org/2001/XMLSchema">
<complexType name="mapItem">
<sequence>
<element name="key" nillable="true" type="xsd:anyType"/>
<element name="value" nillable="true" type="xsd:anyType"/>
</sequence>
</complexType>
<complexType name="Map">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" ``type="apachesoap:mapItem"/>
</sequence>
</complexType>
</schema>
マップは、キーと値のペアのシーケンスとして表されます。
java.lang.Object
$1
java.lang.Short
xsd:short
java.lang.String
xsd:string
org.w3c.dom.Document
XML タイプは、サービス WSDL で次のように定義されます。
<complexType name="XML">
<sequence>
<element maxOccurs="1" minOccurs="0" name="document" ``type="xsd:string" />
<element maxOccurs="1" minOccurs="0" name="element" ``type="xsd:string" />
</sequence>
</complexType>
AEM Forms サービス操作が org.w3c.dom.Document
の値の入力を受け入れる場合、XML データを XML.document
フィールドに渡します。
XML.element
フィールドを設定すると、ランタイム例外が発生します。サービスが org.w3c.dom.Document
を返すと、XML データが XML.document
フィールドに返されます。
org.w3c.dom.Element
XML タイプは、サービス WSDL で次のように定義されます。
<complexType name="XML">
<sequence>
<element maxOccurs="1" minOccurs="0" name="document" ``type="xsd:string" />
<element maxOccurs="1" minOccurs="0" name="element" ``type="xsd:string" />
</sequence>
</complexType>
AEM Forms サービスの操作が org.w3c.dom.Element
値を入力として取得すると、XML データを XML.element
フィールドに渡します。
XML.document
フィールドを設定すると、ランタイム例外が発生します。サービスが org.w3c.dom.Element
を返すと、XML データが XML.element
フィールドに返されます。
JAX-WS を使用した Java プロキシクラスの作成 creating-java-proxy-classes-using-jax-ws
JAX-WS を使用して、Forms サービス WSDL を Java プロキシクラスに変換できます。これらのクラスを使用して、AEM Forms サービス操作を呼び出すことができます。Apache Ant を使用すると、AEM Forms サービス WSDL を参照して Java プロキシクラスを生成するビルドスクリプトを作成できます。次の手順を実行して、JAX-WS プロキシファイルを生成できます。
-
クライアントコンピューターに Apache Ant をインストールします。(https://ant.apache.org/bindownload.cgi を参照。)
- bin ディレクトリをクラスパスに追加します。
ANT_HOME
環境変数を、Ant をインストールしたディレクトリに設定します。
-
JDK 1.6 以降をインストールします。
- JDK bin ディレクトリをクラスパスに追加します。
- JRE bin ディレクトリをクラスパスに追加します。この bin は、
[JDK_INSTALL_LOCATION]/jre
ディレクトリに配置されています。 JAVA_HOME
環境変数を、JDK をインストールしたディレクトリに設定します。
JDK 1.6 には、build.xml ファイルで使用される wsimport プログラムが含まれています。JDK 1.5 には、このプログラムは含まれていません。
-
JAX-WS をクライアントコンピューターにインストールします。(XML web サービス用 Java API を参照。)
-
JAX-WS と Apache Ant を使用して、Java プロキシクラスを生成します。このタスクを実行する Ant ビルドスクリプトを作成します。次のスクリプトは、build.xml という名前の Ant ビルドスクリプトのサンプルです。
code language-xml <?xml version="1.0" encoding="UTF-8"?> <project basedir="." default="compile"> <property name="port" value="8080" /> <property name="host" value="localhost" /> <property name="username" value="administrator" /> <property name="password" value="password" /> <property name="tests" value="all" /> <target name="clean" > <delete dir="classes" /> </target> <target name="wsdl" depends="clean"> <mkdir dir="classes"/> <exec executable="wsimport" failifexecutionfails="false" failonerror="true" resultproperty="foundWSIMPORT"> <arg line="-keep -d classes https://${host}:${port}/soap/services/EncryptionService?wsdl&lc_version=9.0.1"/> </exec> <fail unless="foundWSIMPORT"> !!! Failed to execute JDK's wsimport tool. Make sure that JDK 1.6 (or later) is on your PATH !!! </fail> </target> <target name="compile" depends="clean, wsdl" > <javac destdir="./classes" fork="true" debug="true"> <src path="./src"/> </javac> </target> <target name="run"> <java classname="Client" fork="yes" failonerror="true" maxmemory="200M"> <classpath> <pathelement location="./classes"/> </classpath> <arg value="${port}"/> <arg value="${host}"/> <arg value="${username}"/> <arg value="${password}"/> <arg value="${tests}"/> </java> </target> </project>
この Ant ビルドスクリプト内では、
url
プロパティは、localhost で実行されている 暗号化サービス WSDL を参照するように設定されていることにご注意ください。このusername
およびpassword
プロパティは、有効な AEM forms のユーザー名とパスワードに設定する必要があります。URL にはlc_version
フィールド名が含まれていることにご注意ください。lc_version
オプションを指定しない場合、新しい AEM Forms サービス操作を呼び出すことはできません。note note NOTE EncryptionService
を、Java プロキシクラスを使用して呼び出す AEM Forms サービス名に置換します。例えば、Rights Management サービス用の Java プロキシクラスを作成するには、次のように指定します。code language-java http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
-
Ant ビルドスクリプトを実行する BAT ファイルを作成します。Ant ビルドスクリプトの実行を担う BAT ファイルには、次のコマンドを配置できます。
code language-java ant -buildfile "build.xml" wsdl
Ant ビルドスクリプトを C:\Program Files\Java\jaxws-ri\bin ディレクトリに配置します。このスクリプトで、JAVA ファイルを./classes フォルダーに書き込みます。このスクリプトが生成する JAVA ファイル群で、サービスを呼び出すことができます。
-
これらの JAVA ファイルを 1 つの 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 ファイルを読み込みます。
note note NOTE 「AEM Forms によるプログラミング」にあるすべての Java web サービスのクイックスタート(Forms サービスを除く)では、JAX-WS を使用して Java プロキシファイルを作成します。また、すべての Java web サービスのクイックスタートは、SwaRef を使用します。(SwaRef を使用した AEM Forms の呼び出しを参照。)
関連項目
Apache Axis を使用した Java プロキシクラスの作成
Base64 エンコーディングを使用した AEM Forms の呼び出し
Apache Axis を使用した Java プロキシクラスの作成 creating-java-proxy-classes-using-apache-axis
Apache Axis WSDL2Java ツールを使用すると、Forms サービスを Java プロキシクラスに変換できます。このクラスを使用すると、Forms サービス操作を呼び出すことができます。Apache Ant を使用すると、サービス WSDL から Axis ライブラリファイルを生成できます。Apache Axis は、URL https://ws.apache.org/axis/ でダウンロードできます。
次の手順を実行して、Axis Java ライブラリファイルを生成できます。
-
クライアントコンピューターに Apache Ant をインストールします。https://ant.apache.org/bindownload.cgi で入手できます。
- bin ディレクトリをクラスパスに追加します。
ANT_HOME
環境変数を、Ant をインストールしたディレクトリに設定します。
-
Apache Axis 1.4 をクライアントコンピューターにインストールします。https://ws.apache.org/axis/ で入手できます。
-
Web サービスクライアントで Axis JAR ファイルを使用するクラスパスを設定します。詳しくは、https://ws.apache.org/axis/java/install.html にある Axis インストール手順を参照してください。
-
Axis で Apache WSDL2Java ツールを使用して、Java プロキシクラスを生成します。このタスクを実行する Ant ビルドスクリプトを作成します。次のスクリプトは、build.xml という名前の Ant ビルドスクリプトのサンプルです。
code language-java <?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 で実行している暗号化サービス WSDL を参照するように設定されています。username
プロパティとpassword
プロパティには、AEM Forms の有効なユーザー名とパスワードを設定する必要があります。 -
Ant ビルドスクリプトを実行する BAT ファイルを作成します。Ant ビルドスクリプトの実行を担う BAT ファイルには、次のコマンドを配置できます。
code language-java ant -buildfile "build.xml" encryption-wsdl2java-client
JAVA ファイルは、
output
プロパティで指定したように、C:\JavaFiles フォルダーに書き込まれます。Forms サービスを正常に呼び出すには、これらの JAVA ファイルをクラスパスにインポートします。デフォルトでは、これらのファイルは、
com.adobe.idp.services
という名前の Java パッケージに属します。これらの JAVA ファイルは、JAR ファイルに配置することをお勧めします。次に、JAR ファイルをクライアントアプリケーションのクラスパスに読み込みます。note note NOTE .JAVA ファイルを JAR に配置する方法は異なります。1 つの方法は、Eclipse のような Java IDE を使用する方法です。Java プロジェクトおよび com.adobe.idp.services
パッケージを作成します(すべての .JAVA ファイルは、このパッケージに属しています)。次に、すべての .JAVA ファイルをパッケージにインポートします。最後に、プロジェクトを JAR ファイルとして書き出します。 -
URL を
EncryptionServiceLocator
クラス内で修正して、エンコーディングタイプを指定します。例えば、base64 を使用するには、BLOB
オブジェクトが確実にバイナリデータを返すように、?blob=base64
を指定します。つまり、EncryptionServiceLocator
クラス内で、次のコード行を探します。code language-java http://localhost:8080/soap/services/EncryptionService;
これを次のように変更します。
code language-java http://localhost:8080/soap/services/EncryptionService?blob=base64;
-
Java プロジェクトのクラスパスに以下の Axis JAR ファイルを 追加します。
- 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
ディレクトリにあります。
関連トピック
Base64 エンコーディングを使用した AEM Forms の呼び出し invoking-aem-forms-using-base64-encoding
Base64 エンコーディングを使用して、AEM Forms サービスを呼び出すことができます。Base64 エンコーディングは、web サービスの呼び出し要求で送信される添付ファイルをエンコードします。つまり BLOB
SOAP メッセージ全体ではなく、データが Base64 でエンコードされ。
「Base64 エンコーディングを使用した AEM Forms の呼び出し」のセクションでは、Base64 エンコーディングを使用して、次の MyApplication/EncryptDocument
という名前の AEM Forms の短時間有効なプロセスについて説明します。
MyApplication/EncryptDocument
という名前のプロセスを作成します。(Workbench の使用を参照してください)。このプロセスを呼び出すと、次のアクションが実行されます。
- プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは
SetValue
操作に基づいています。このプロセスの入力パラメーターは、inDoc
という名前のdocument
プロセス変数です。 - PDF ドキュメントをパスワードで暗号化します。このアクションは
PasswordEncryptPDF
操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc
という名前のプロセス変数に返されます。
Base64 エンコーディングを使用する .NET クライアントアセンブリの作成 creating-a-net-client-assembly-that-uses-base64-encoding
.NET クライアントアセンブリを作成して、Microsoft Visual Studio .NET プロジェクトから Forms サービスを呼び出すことができます。base64 エンコーディングを使用する .NET クライアントアセンブリを作成するには、次の手順を実行します。
- AEM Forms 呼び出し URL に基づいて、プロキシクラスを作成します。
- .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=base64
を含むようにプロキシクラスの URL を修正して、確実に BLOB
オブジェクトがバイナリデータを返すようにします。プロキシクラスで、次のコード行を探します。
"https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument";
これを次のように変更します。
"https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";
Base64 エンコーディングを使用した AEM Forms の呼び出し の節では、MyApplication/EncryptDocument
を例として使用しています。別の Forms サービス用に .NET クライアントアセンブリを作成する場合は、必ず MyApplication/EncryptDocument
をサービスの名前に置き換えてください。
.NET クライアントアセンブリの開発
.NET クライアントアセンブリを生成する Visual Studio クラスライブラリプロジェクトを作成します。wsdl.exe を使用して作成した CS ファイルを、このプロジェクトにインポートすることができます。このプロジェクトが生成する DLL ファイル(.NET クライアントアセンブリ)を使用すると、他の Visual Studio .NET プロジェクトでサービスを呼び出すことができます。
- Microsoft Visual Studio .NET を起動します。
- クラスライブラリプロジェクトを作成し、DocumentService という名前を付けます。
- wsdl.exe を使用して作成した CS ファイルをインポートします。
- プロジェクト メニューで、参照を追加 を選択します。
- 「参照を追加」ダイアログボックスで、System.Web.Services.dll を選択します。
- 選択 をクリックしてから、OK をクリックしてください。
- プロジェクトをコンパイルしてビルドします。
MyApplication/EncryptDocument
サービスに送信する際に使用できるようになります。?blob=base64
を追加したことを確認します。追加されていない場合は、BLOB
オブジェクトからバイナリデータを取得できません。.NET クライアントアセンブリの参照
新しく作成した .NET クライアントアセンブリを、クライアントアプリケーションを開発するコンピューターに配置します。.NET クライアントアセンブリをディレクトリに配置したら、プロジェクトから参照できるようになります。また、System.Web.Services
ライブラリをプロジェクトから参照します。このライブラリを参照しない場合、.NET クライアントアセンブリを使用してサービスを呼び出すことはできません。
- プロジェクト メニューで、参照の追加 を選択します。
- .NET タブをクリックします。
- 参照 をクリックして、DocumentService.dll ファイルを見つけます。
- 選択 をクリックしてから、OK をクリックしてください。
Base64 エンコーディングを使用する .NET クライアントアセンブリを使用したサービスの呼び出し
Base64 エンコーディングを使用する .NET クライアントアセンブリを使用して、Workbench で構築された MyApplication/EncryptDocument
サービスを呼び出すことができます。MyApplication/EncryptDocument
サービスを呼び出すには、次の手順を実行します。
MyApplication/EncryptDocument
サービス WSDL を使用する Microsoft .NET クライアントアセンブリを作成します。- クライアントの Microsoft .NET プロジェクトを作成します。クライアントプロジェクトで Microsoft .NET クライアントアセンブリを参照します。また、
System.Web.Services
も参照します。 - Microsoft .NET クライアントアセンブリを使用し、デフォルトのコンストラクターを呼び出して、
MyApplication_EncryptDocumentService
オブジェクトを作成します。 System.Net.NetworkCredential
オブジェクトを使用してMyApplication_EncryptDocumentService
オブジェクトのCredentials
プロパティを設定します。System.Net.NetworkCredential
コンストラクター内で、AEM Forms のユーザー名と対応するパスワードを指定します。.NET クライアントアプリケーションが AEM Forms と SOAP メッセージを正常に交換できるように、認証情報を設定します。- コンストラクターを使用して
BLOB
オブジェクトを作成します。BLOB
オブジェクトは、MyApplication/EncryptDocument
プロセスに渡す PDF ドキュメントを保存するために使用されます。 - コンストラクターを呼び出して、
System.IO.FileStream
オブジェクトを作成します。PDF ドキュメントのファイルの場所と、ファイルを開くモードを表す文字列値を渡します。 System.IO.FileStream
オブジェクトのコンテンツを格納するバイト配列を作成します。System.IO.FileStream
オブジェクトのLength
プロパティを取得して、バイト配列のサイズを決定することができます。System.IO.FileStream
オブジェクトのRead
メソッドを呼び出して、バイト配列にストリームデータを入力します。読み取り対象のバイト配列、開始位置、ストリーム長を渡します。binaryData
プロパティを割り当てることで、BLOB
オブジェクトにバイト配列のコンテンツを入力します。MyApplication/EncryptDocument
プロセスを呼び出すには、MyApplication_EncryptDocumentService
オブジェクトのinvoke
メソッドを呼び出し、PDF ドキュメントを含むBLOB
オブジェクトを渡します。このプロセスは、暗号化された PDF ドキュメントをBLOB
オブジェクト内に返します。System.IO.FileStream
オブジェクトを作成するには、コンストラクタを呼び出し、パスワードで暗号化されたドキュメントのファイルの場所を表す文字列値を渡します。MyApplicationEncryptDocumentService
オブジェクトのinvoke
メソッドが返したBLOB
オブジェクトのデータコンテンツを格納するバイト配列を作成します。BLOB
オブジェクトのbinaryData
データメンバーの値を取得して、バイト配列にデータを入力します。- コンストラクターを呼び出して
System.IO.FileStream
オブジェクトを渡すことによって、System.IO.BinaryWriter
オブジェクトを作成します。 System.IO.BinaryWriter
オブジェクトのWrite
メソッドを呼び出し、バイト配列を渡すことによって、バイト配列の内容を PDF ファイルに書き込みます。
Java プロキシクラスと Base64 エンコーディングを使用したサービスの呼び出し invoking-a-service-using-java-proxy-classes-and-base64-encoding
Java プロキシクラスと Base64 を使用して、AEM Forms サービスを呼び出すことができます。Java プロキシクラスを使用してMyApplication/EncryptDocument
サービスを呼び出すには、次の手順を実行します。
-
MyApplication/EncryptDocument
サービス WSDL を使用する JAX-WS を使用して、Java プロキシクラスを作成します。次の WSDL エンドポイントを使用します。https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
note note NOTE AEM Forms をホストする J2EE アプリケーションサーバーの IP アドレスに hiro-xp
を置換します。 -
JAX-WS を使用して作成した Java プロキシクラスを JAR ファイルにパッケージ化します。
-
次のパスに Java プロキシ JAR ファイルと JAR ファイルを含めます。
<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
を Java クライアントプロジェクトのクラスパスに追加します。
-
コンストラクターを使用して
MyApplicationEncryptDocumentService
オブジェクトを作成します。 -
MyApplicationEncryptDocumentService
オブジェクトのgetEncryptDocument
メソッドを呼び出すことにより、MyApplicationEncryptDocument
オブジェクトを作成します。 -
次のデータメンバーに値を割り当てて、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
フィールドに割り当てます。
次のコード例に、このアプリケーションロジックを示します。
code language-java //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);
-
-
MyApplication/EncryptDocument
プロセスに送信する PDF ドキュメントを取得するには、コンストラクターを使用してjava.io.FileInputStream
オブジェクトを作成します。PDF ドキュメントの場所を指定する文字列値を渡します。 -
バイト配列を作成し、
java.io.FileInputStream
オブジェクトの内容を入力します。 -
それ自身のコンストラクタを使用して、
BLOB
オブジェクトを作成します。 -
setBinaryData
メソッドを呼び出し、バイト配列を渡すことによって、BLOB
オブジェクトを入力します。BLOB
オブジェクトのsetBinaryData
は、Base64 エンコーディングを使用する場合に呼び出すメソッドです。「サービスリクエストでの BLOB オブジェクトの供給」を参照してください。 -
MyApplicationEncryptDocument
オブジェクトのinvoke
メソッドを呼び出すことによって、MyApplication/EncryptDocument
プロセスを呼び出します。PDF ドキュメントを含むBLOB
オブジェクトを渡します。呼び出しメソッドは、暗号化された PDF ドキュメントを含むBLOB
オブジェクトを返します。 -
BLOB
オブジェクトのgetBinaryData
メソッドを呼び出して、暗号化された PDF ドキュメントを含むバイト配列を作成します。 -
暗号化された PDF ドキュメントを PDF ファイルとして保存します。バイト配列をファイルに書き込みます。
関連トピック
MTOM を使用した AEM Forms の呼び出し invoking-aem-forms-using-mtom
Web サービス標準の MTOM を使用して、AEM Forms サービスを呼び出すことができます。この規格では、PDF ドキュメントなどのバイナリデータがインターネットやイントラネット経由で送信される方法を定義します。MTOM の特徴の 1 つは、XOP:Include
要素の使用です。この要素は、SOAP メッセージのバイナリ添付を参照する XML Binary Optimized Packaging(XOP)仕様で定義されます。
ここでは、MTOM を使用して、次の AEM Forms の短時間のみ有効な MyApplication/EncryptDocument
という名前のプロセスを呼び出す方法について説明します。
MyApplication/EncryptDocument
という名前のプロセスを作成します。(Workbench の使用を参照してください)。このプロセスを呼び出すと、次のアクションが実行されます。
- プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは
SetValue
操作に基づいています。このプロセスの入力パラメーターは、inDoc
という名前のdocument
プロセス変数です。 - PDF ドキュメントをパスワードで暗号化します。このアクションは
PasswordEncryptPDF
操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc
という名前のプロセス変数として返されます。
OutOfMemory
例外が発生する可能性があります。ここでは、Microsoft .NET プロジェクト内で MTOM を使用して AEM Forms サービスを呼び出す方法について説明します。使用される .NET Framework は 3.5 で、開発環境は Visual Studio 2008 です。Web サービス拡張機能(WSE)が開発用コンピューターにインストールされている場合は削除します。.NET 3.5 フレームワークは、Windows Communication Foundation (WCF) という名前の SOAP フレームワークをサポートしています。MTOM を使用して AEM Forms を呼び出す場合、WCF(WSE ではない)のみがサポートされます。
MTOM を使用してサービスを呼び出す .NET プロジェクトの作成 creating-a-net-project-that-invokes-a-service-using-mtom
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 アドレスに置き換えます。呼び出す AEM Forms サービスの名前で MyApplication/EncryptDocument
を置き換えます。例えば、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 プロジェクトを作成するには、次の手順を実行します。
-
Microsoft Visual Studio 2008 を使用して .NET プロジェクトを作成します。
-
プロジェクト メニューから、「サービス参照を追加」を選択します。
-
住所 ダイアログボックスで、AEM Forms サービスへの WSDL を指定します。例:
code language-java http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
-
「 移動」をクリックし、「OK」をクリックします。
.NET プロジェクトで MTOM を使用したサービスの呼び出し invoking-a-service-using-mtom-in-a-net-project
保護されていない PDF ドキュメントを受け入れる MyApplication/EncryptDocument
プロセスを考慮して、パスワードで暗号化された PDF ドキュメントを返します。MTOM を使用して MyApplication/EncryptDocument
プロセス(Workbench に組み込まている)を呼び出すには、次の手順で実行します。
-
Microsoft .NET プロジェクトを作成します。
-
デフォルトのコンストラクタを使用して
MyApplication_EncryptDocumentClient
オブジェクトを作成します。 -
System.ServiceModel.EndpointAddress
コンストラクタを使用してMyApplication_EncryptDocumentClient.Endpoint.Address
オブジェクトを作成します。WSDL を指定する文字列値を AEM Forms サービスとエンコーディングタイプに渡します。code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
lc_version
属性を使用する必要はありません。この属性は、サービス参照を作成する際に使用されます。ただし、?blob=mtom
を指定する必要があります。note note NOTE hiro-xp
を AEM Forms をホストする J2EE アプリケーションサービスの IP アドレス で置き換えます。 -
EncryptDocumentClient.Endpoint.Binding
データメンバーの値を取得してSystem.ServiceModel.BasicHttpBinding
オブジェクトを作成します。戻り値をBasicHttpBinding
にキャストします。 -
System.ServiceModel.BasicHttpBinding
オブジェクトのMessageEncoding
データメンバーをWSMessageEncoding.Mtom
に設定します。この値により、MTOM が確実に使用されます。 -
次のタスクを実行して、HTTP 基本認証を有効にします。
- AEM Forms ユーザー名をデータメンバー
MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName
に割り当てます。 - 対応するパスワード値をデータメンバー
MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password
に割り当てます。 - 定数値
HttpClientCredentialType.Basic
をデータメンバーにBasicHttpBindingSecurity.Transport.ClientCredentialType
に割り当てます。 - 定数値
BasicHttpSecurityMode.TransportCredentialOnly
をデータメンバーにBasicHttpBindingSecurity.Security.Mode
に割り当てます。
次のコードの例に、これらのタスクを示します。
code language-java //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;
- AEM Forms ユーザー名をデータメンバー
-
コンストラクタを使用して
BLOB
オブジェクトを作成します。BLOB
オブジェクトは、MyApplication/EncryptDocument
プロセスに渡す PDF ドキュメントを保存するために使用されます。 -
コンストラクタを呼び出して
System.IO.FileStream
オブジェクトを作成します。PDF ドキュメントのファイルの場所と、ファイルを開くモードを表す文字列値を渡します。 -
System.IO.FileStream
オブジェクトのコンテンツを格納するバイト配列を作成します。System.IO.FileStream
オブジェクトのLength
プロパティを取得して、バイト配列のサイズを決定することができます。 -
System.IO.FileStream
オブジェクトのRead
メソッドを呼び出して、バイト配列にストリームデータを入力します。読み取り対象のバイト配列、開始位置、ストリーム長を渡します。 -
BLOB
オブジェクトを入力するには、MTOM
データメンバーにバイト配列のコンテンツを割り当てます。 -
MyApplication/EncryptDocument
プロセスを呼び出すには、MyApplication_EncryptDocumentClient
オブジェクトのinvoke
メソッドを呼び出します。PDF ドキュメントを含むBLOB
オブジェクトを渡します。このプロセスは、BLOB
オブジェクト内で暗号化された PDF ドキュメントを返します。 -
System.IO.FileStream
オブジェクトを作成するには、コンストラクタを呼び出し、保護された PDF ドキュメントのファイルの場所を表す文字列値を渡します。 -
invoke
メソッドが返したBLOB
オブジェクトのデータコンテンツを格納するバイト配列を作成します。BLOB
オブジェクトのMTOM
データメンバーの値を取得して、バイト配列にデータを入力します。 -
コンストラクターを呼び出して
System.IO.FileStream
オブジェクトを渡すことによって、System.IO.BinaryWriter
オブジェクトを作成します。 -
System.IO.BinaryWriter
オブジェクトのWrite
メソッドを呼び出してバイト配列を渡すことにより、バイト配列の内容を PDF ファイルに書き込みます。
関連トピック
SwaRef を使用した AEM Forms の呼び出し invoking-aem-forms-using-swaref
SwaRef を使用して AEM Forms サービスを呼び出すことができます。wsi:swaRef
XML 要素のコンテンツは、添付ファイルへの参照を保存する SOAP 本文内の添付ファイルとして送信されます。SwaRef を使用して Forms サービスを呼び出す場合、XML Web サービス用 Java API(JAX-WS)を使用して Java プロキシクラスを作成します(XML Web サービス用 Java API を参照してください)。
ここでは、SwaRef を使用して、次の Forms の短時間有効な MyApplication/EncryptDocument
という名前のプロセスを呼び出す方法について説明します。
MyApplication/EncryptDocument
という名前のプロセスを作成します。(Workbench の使用を参照してください)。このプロセスを呼び出すと、次のアクションが実行されます。
- プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは
SetValue
操作に基づいています。このプロセスの入力パラメーターは、inDoc
という名前のdocument
プロセス変数です。 - PDF ドキュメントをパスワードで暗号化します。このアクションは
PasswordEncryptPDF
操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc
という名前のプロセス変数として返されます。
以下では、Java クライアントアプリケーション内で SwaRef を使用して Forms サービスを呼び出す方法について説明します。Java アプリケーションは、JAX-WS を使用して作成されたプロキシクラスを使用します。
SwaRef を使用する JAX-WS ライブラリファイルを使用してサービスを呼び出す invoke-a-service-using-jax-ws-library-files-that-use-swaref
JAX-WS と SwaRef を使用して作成された Java プロキシファイルを使用して、MyApplication/EncryptDocument
プロセスを呼び出すには、次の手順を実行します。
-
MyApplication/EncryptDocument
サービス WSDL を消費する JAX-WS を使用して、Java プロキシファイルを作成します。次の WSDL エンドポイントを使用します。code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
詳しくは、 JAX-WS を使用した Java プロキシクラスの作成を参照してください。
note note NOTE hiro-xp
を AEM Forms をホストする J2EE アプリケーションサーバーの IP アドレス で置き換えます。 -
JAX-WS を使用して作成した Java プロキシクラスを JAR ファイルにパッケージ化します。
-
次のパスに Java プロキシ JAR ファイルと JAR ファイルを含めます。
<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
を Java クライアントプロジェクトのクラスパスに追加します。
-
コンストラクターを使用して
MyApplicationEncryptDocumentService
オブジェクトを作成します。 -
MyApplicationEncryptDocumentService
オブジェクトのgetEncryptDocument
メソッドを呼び出すことにより、MyApplicationEncryptDocument
オブジェクトを作成します。 -
次のデータメンバーに値を割り当てて、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
フィールドに割り当てます。
次のコード例に、このアプリケーションロジックを示します。
code language-java //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);
-
-
MyApplication/EncryptDocument
プロセスに送信する PDF ドキュメントを取得するには、コンストラクターを使用してjava.io.File
オブジェクトを作成します。PDF ドキュメントの場所を指定する文字列値を渡します。 -
FileDataSource
コンストラクターを使用してjavax.activation.DataSource
オブジェクトを作成します。java.io.File
オブジェクトを渡します。 -
javax.activation.DataHandler
オブジェクトを作成するには、コンストラクタを使用してjavax.activation.DataSource
オブジェクトに渡します。 -
コンストラクタを使用して
BLOB
オブジェクトを作成します。 -
BLOB
オブジェクトを入力するには、setSwaRef
メソッドを呼び出してjavax.activation.DataHandler
オブジェクトを渡します。 -
MyApplication/EncryptDocument
プロセスを呼び出すには、MyApplicationEncryptDocument
オブジェクトのinvoke
メソッドを呼び出し、PDF ドキュメントを含むBLOB
オブジェクトを渡します。呼び出しメソッドは、暗号化された PDF ドキュメントを含むBLOB
オブジェクトを返します。 -
BLOB
オブジェクトのgetSwaRef
メソッドを呼び出してjavax.activation.DataHandler
オブジェクトを入力します。 -
javax.activation.DataHandler
オブジェクトをjava.io.InputSteam
インスタンスに変換するには、javax.activation.DataHandler
オブジェクトのgetInputStream
メソッドを呼び出します。 -
暗号化された PDF ドキュメントを表す PDF ファイルに
java.io.InputSteam
インスタンスを書き出します。
関連トピック
HTTP で送信する BLOB データを使用した AEM Forms の呼び出し invoking-aem-forms-using-blob-data-over-http
Web サービスを使用し、HTTP 経由で BLOB データを渡すことで、AEM Forms サービスを呼び出すことができます。HTTP 経由で BLOB データを渡す方法は、Base64 エンコーディング、DIME、MIME を使用する代わりの、別の方法となります。例えば、DIME や MIME をサポートしていない web サービス拡張機能 3.0 を使用する Microsoft .NET プロジェクトで、HTTP 経由でデータを渡すことができます。HTTP 経由で BLOB データを使用する場合は、AEM Forms サービスが呼び出される前に入力データがアップロードされます。
「HTTP 経由で BLOB データを使用した AEM Forms の呼び出し」では、HTTP 経由で BLOB データを渡すことで、次の AEM Forms の短期間有効なMyApplication/EncryptDocument
という名前のプロセスの呼び出しについて説明します。
MyApplication/EncryptDocument
という名前のプロセスを作成します。(Workbench の使用を参照してください)。このプロセスを呼び出すと、次のアクションが実行されます。
- プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは
SetValue
操作に基づいています。このプロセスの入力パラメーターは、inDoc
という名前のdocument
プロセス変数です。 - PDF ドキュメントをパスワードで暗号化します。このアクションは
PasswordEncryptPDF
操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc
という名前のプロセス変数として返されます。
HTTP 経由のデータを使用する .NET クライアントアセンブリの作成 creating-a-net-client-assembly-that-uses-data-over-http
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 クライアントアセンブリを使用してサービスを呼び出すことはできません。
- プロジェクト メニューで、参照の追加 を選択します。
- .NET タブをクリックします。
- 参照 をクリックして、DocumentService.dll ファイルを見つけます。
- 「選択」をクリックしてから、「OK」をクリックしてください。
HTTP 経由で BLOB データを使用する .NET クライアントアセンブリを使用したサービスの呼び出し
HTTP 経由でデータを使用する .NET クライアントアセンブリを使用して MyApplication/EncryptDocument
サービス(Workbench で構築)を呼び出すことができます。MyApplication/EncryptDocument
サービスを呼び出すには、次の手順を実行します。
- .NET クライアントアセンブリを作成します。
- Microsoft .NET クライアントアセンブリを参照しますクライアントの Microsoft .NET プロジェクトを作成します。クライアントプロジェクトで Microsoft .NET クライアントアセンブリを参照します。また、
System.Web.Services
も参照します。 - Microsoft .NET クライアントアセンブリを使用し、デフォルトのコンストラクターを呼び出して、
MyApplication_EncryptDocumentService
オブジェクトを作成します。 System.Net.NetworkCredential
オブジェクトを使用してMyApplication_EncryptDocumentService
オブジェクトのCredentials
プロパティを設定します。System.Net.NetworkCredential
コンストラクター内で、AEM Forms のユーザー名と対応するパスワードを指定します。.NET クライアントアプリケーションが AEM Forms と SOAP メッセージを正常に交換できるように、認証情報を設定します。- コンストラクターを使用して
BLOB
オブジェクトを作成します。BLOB
オブジェクトは、データをMyApplication/EncryptDocument
プロセスに渡すために使用されます。 MyApplication/EncryptDocument
サービスに渡す PDF ドキュメントの URI の場所を指定する文字列値を、BLOB
オブジェクトのremoteURL
データメンバーに割り当てます。MyApplication_EncryptDocumentService
オブジェクトのinvoke
メソッドを呼び出し、BLOB
オブジェクトを渡すことによって、MyApplication/EncryptDocument
プロセスを呼び出します。このプロセスは、暗号化された PDF ドキュメントをBLOB
オブジェクト内に返します。- コンストラクターを使用し、返された
BLOB
オブジェクトのremoteURL
データメンバーの値を渡すことによって、System.UriBuilder
オブジェクトを作成します。 System.UriBuilder
オブジェクトをSystem.IO.Stream
オブジェクトに変換します。(このリストの後に示す C# クイックスタートで、このタスクの実行方法を示しています)。- バイト配列を作成し、そのバイト配列に、
System.IO.Stream
オブジェクト内にあるデータを入力します。 - コンストラクターを呼び出して
System.IO.FileStream
オブジェクトを渡すことによって、System.IO.BinaryWriter
オブジェクトを作成します。 System.IO.BinaryWriter
オブジェクトのWrite
メソッドを呼び出し、バイト配列を渡すことによって、PDF ファイルにバイト配列の内容を書き込みます。
Java プロキシクラスおよび HTTP 経由での BLOB データを使用したサービスの呼び出し invoking-a-service-using-java-proxy-classes-and-blob-data-over-http
Java プロキシクラスおよび HTTP 経由での BLOB データを使用して、AEM Forms サービスを呼び出すことができます。Java プロキシクラスを使用して MyApplication/EncryptDocument
サービスを呼び出すには、次の手順を実行します。
-
MyApplication/EncryptDocument
サービス WSDL を使用する JAX-WS を使用して、Java プロキシクラスを作成します。次の WSDL エンドポイントを使用します。code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
詳しくは、 JAX-WS を使用した Java プロキシクラスの作成を参照してください。
note note NOTE hiro-xp
を AEM Forms をホストする J2EE アプリケーションサーバーの IP アドレス で置き換えます。 -
JAX-WS を使用して作成した Java プロキシクラスを JAR ファイルにパッケージ化します。
-
次のパスに Java プロキシ JAR ファイルと JAR ファイルを含めます。
<Install Directory>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
を Java クライアントプロジェクトのクラスパスに追加します。
-
コンストラクターを使用して
MyApplicationEncryptDocumentService
オブジェクトを作成します。 -
MyApplicationEncryptDocumentService
オブジェクトのgetEncryptDocument
メソッドを呼び出すことにより、MyApplicationEncryptDocument
オブジェクトを作成します。 -
次のデータメンバーに値を割り当てて、AEM Forms を呼び出すのに必要な接続値を設定します。
-
WSDL エンドポイントとエンコーディングのタイプを
javax.xml.ws.BindingProvider
オブジェクトのENDPOINT_ADDRESS_PROPERTY
フィールドに割り当てます。HTTP エンコーディング経由での BLOB を使用して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
フィールドに割り当てます。
次のコード例に、このアプリケーションロジックを示します。
code language-java //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);
-
-
コンストラクタを使用して
BLOB
オブジェクトを作成します。 -
setRemoteURL
メソッドを呼び出してBLOB
オブジェクトを入力します。MyApplication/EncryptDocument
サービスに渡す PDF ドキュメントの URI の場所を指定する文字列値を渡します。 -
MyApplication/EncryptDocument
プロセスを呼び出すには、MyApplicationEncryptDocument
オブジェクトのinvoke
メソッドを呼び出し、PDF ドキュメントを含むBLOB
オブジェクトを渡します。このプロセスは、暗号化された PDF ドキュメントをBLOB
オブジェクト内に返します。 -
暗号化された PDF ドキュメントを表すデータストリームを格納するバイト配列を作成します。
BLOB
オブジェクトのgetRemoteURL
メソッド を呼び出します(invoke
メソッドで返されたBLOB
オブジェクトを使用)。 -
コンストラクタを使用して
java.io.File
オブジェクトを作成します。このオブジェクトは、暗号化された PDF ドキュメントを表します。 -
java.io.FileOutputStream
オブジェクトを作成するには、コンストラクタを使用してjava.io.File
オブジェクトを渡します。 -
java.io.FileOutputStream
オブジェクトのwrite
メソッドを呼び出します。暗号化された PDF ドキュメントを表すデータストリームを含むバイト配列を渡します。
DIME を使用した AEM Forms の呼び出し invoking-aem-forms-using-dime
添付ファイル付きの SOAP を使用して、AEM Forms サービスを呼び出すことができます。AEM Forms は、MIME と DIME の両方の web サービス標準をサポートしています。DIME を使用すると、添付ファイルをエンコードする代わりに、呼び出し要求と共に、PDF ドキュメントなどのバイナリ添付ファイルを送信できます。DIME を使用した AEM Forms の呼び出し の節では、DIME を使用した次の AEM Forms の短時間のみ有効な MyApplication/EncryptDocument
という名前のプロセスの呼び出しについて説明します。
このプロセスを呼び出すと、次のアクションが実行されます。
- プロセスに渡された保護されていない PDF ドキュメントを取得します。このアクションは
SetValue
操作に基づいています。このプロセスの入力パラメーターは、inDoc
という名前のdocument
プロセス変数です。 - PDF ドキュメントをパスワードで暗号化します。このアクションは
PasswordEncryptPDF
操作に基づいています。パスワードで暗号化された PDF ドキュメントは、outDoc
という名前のプロセス変数として返されます。
このプロセスは、既存の AEM Forms プロセスに基づいていません。このコードの例の流れを追うには、Workbench を使用して MyApplication/EncryptDocument
という名前のプロセスを作成します。(Workbench の使用を参照してください)。
DIME を使用する .NET プロジェクトの作成 creating-a-net-project-that-uses-dime
DIME を使用して Forms サービスを呼び出すことのできる .NET プロジェクトを作成するには、次のタスクを実行します。
- 開発用コンピュータに web サービス拡張機能 2.0 をインストールします。
- .NET プロジェクト内から、AEM Forms サービスへの web 参照を作成します。
Web サービス拡張機能 2.0 のインストール
Web サービス拡張機能 2.0 を開発用コンピューターにインストールし、Microsoft Visual Studio .NET と統合します。Web サービス拡張機能 2.0 は、Microsoft ダウンロードセンターからダウンロードできます。
この web ページから、Web サービス拡張機能 2.0 を検索し、開発用コンピューターにダウンロードします。このダウンロードにより、Microsoft WSE 2.0 SPI.msi という名前のファイルがコンピューターに配置されます。インストールプログラムを実行し、オンラインの指示に従います。
AEM Forms サービスへの web 参照の作成
Web サービス拡張機能 2.0 を開発コンピューターにインストールし、Microsoft .NET プロジェクトを作成したら、Forms サービスへの web 参照を作成します。例えば、MyApplication/EncryptDocument
プロセスに web 参照を作成するには、Forms がローカルコンピューターにインストールされている場合は、次の URL を指定します。
http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL
Web 参照を作成した後、2 つのプロキシデータタイプ(EncryptDocumentService
および EncryptDocumentServiceWse
)を .NET プロジェクト内で使用できます。DIME を使用して MyApplication/EncryptDocument
プロセスを呼び出すには、EncryptDocumentServiceWse
タイプを使用します。
WSE ライブラリの参照
- プロジェクトメニューで、「参照を追加」を選択します。
- 参照を追加ダイアログボックスで、「Microsoft.Web.Services2.dll」を選択します。
- 「System.Web.Services.dll」を選択します。
- 「選択」をクリックして、「OK」をクリックします。
Forms サービスへの web 参照の作成
- プロジェクトメニューで、「Web 参照を追加」を選択します。
- URL ダイアログボックスで、Forms サービスの URL を指定します。
- 「移動」をクリックし、「参照を追加」をクリックします。
.NET プロジェクトで DIME を使用したサービスの呼び出し
DIME を使用して Forms サービスを呼び出すことができます。保護されていない PDF ドキュメントを受け入れ、パスワードで暗号化された PDF ドキュメントを返す MyApplication/EncryptDocument
プロセスを考えます。DIME を使用して MyApplication/EncryptDocument
プロセスを呼び出すには、次の手順を実行します。
-
DIME を使用してForms サービスの呼び出しを可能にする Microsoft .NET プロジェクトを作成します。必ず web サービス拡張機能 2.0 を含め、AEM Forms サービスへの web 参照を作成します。
-
MyApplication/EncryptDocument
プロセスへの web 参照を設定した後、デフォルトのコンストラクターを使用してEncryptDocumentServiceWse
オブジェクトを作成します。 -
AEM Forms のユーザー名とパスワードの値を指定する
System.Net.NetworkCredential
値で、EncryptDocumentServiceWse
オブジェクトのCredentials
データメンバーを設定します。 -
コンストラクターを使用して
Microsoft.Web.Services2.Dime.DimeAttachment
オブジェクトを作成し、次の値を渡します。- GUID 値を指定する文字列値。
System.Guid.NewGuid.ToString
メソッドを呼び出すことによって、GUID 値を取得できます。 - コンテンツタイプを指定する文字列値。このプロセスには PDF ドキュメントが必要なため、
application/pdf
を指定します。 TypeFormat
列挙値。以下のようにTypeFormat.MediaType
を指定します。- AEM Forms プロセスに渡す PDF ドキュメントの場所を指定する文字列値。
- GUID 値を指定する文字列値。
-
BLOB
オブジェクトを、そのコンストラクタを使用して作成します。 -
Microsoft.Web.Services2.Dime.DimeAttachment
オブジェクトのId
データメンバーの値をBLOB
オブジェクトのattachmentID
データメンバーに割り当てて、BLOB
オブジェクトに DIME 添付ファイルを追加します。 -
EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add
メソッドを呼び出して、Microsoft.Web.Services2.Dime.DimeAttachment
オブジェクトを渡します。 -
EncryptDocumentServiceWse
オブジェクトのinvoke
メソッドを呼び出し、DIME 添付ファイルを含むBLOB
オブジェクトを渡すことによって、MyApplication/EncryptDocument
プロセスを呼び出します。このプロセスは、暗号化された PDF ドキュメントをBLOB
オブジェクト内に返します。 -
返された
BLOB
オブジェクトのattachmentID
データメンバーの値を取得することによって、添付ファイルの識別子の値を取得します。 -
EncryptDocumentServiceWse.ResponseSoapContext.Attachments
の添付ファイルを繰り返し処理し、添付ファイルの識別子の値を使用して、暗号化された PDF ドキュメントを取得します。 -
Attachment
オブジェクトのStream
データメンバーの値を取得することによって、System.IO.Stream
オブジェクトを取得します。 -
バイト配列を作成し、そのバイト配列を
System.IO.Stream
オブジェクトのRead
メソッドに渡します。このメソッドは、暗号化された PDF ドキュメントを表すデータストリームでバイト配列を入力します。 -
コンストラクターを呼び出し、PDF ファイルの場所を表す文字列値を渡すことによって、
System.IO.FileStream
オブジェクトを作成します。このオブジェクトは、暗号化された PDF ドキュメントを表します。 -
System.IO.BinaryWriter
オブジェクトを作成するには、コンストラクターを呼び出し、System.IO.FileStream
オブジェクトを渡します。 -
System.IO.BinaryWriter
オブジェクトのWrite
メソッドを呼び出し、バイト配列を渡すことによって、バイト配列の内容を PDF ファイルに書き込みます。
DIME を使用する Apache Axis Java プロキシクラスの作成 creating-apache-axis-java-proxy-classes-that-use-dime
Apache Axis WSDL2Java ツールを使用して、サービス WSDL を Java プロキシクラスに変換し、サービス操作を呼び出すことができます。Apache Ant を使用すると、サービスを呼び出す AEM Forms サービス WSDL から Axis ライブラリファイルを生成できます。(Apache Axis を使用した Java プロキシクラスの作成 を参照してください)。
Apache Axis WSDL2Java ツールは、SOAP リクエストをサービスに送信するために使用されるメソッドを含む JAVA ファイルを生成します。サービスが受け取った SOAP リクエストは、Axis が生成したライブラリによってデコードされ、メソッドと引数に戻されます。
Axis 生成のライブラリファイルと DIME を使用して、Workbench で構築された MyApplication/EncryptDocument
サービスを呼び出すには、以下の手順を実行します。
-
Apache Axis を使用して
MyApplication/EncryptDocument
サービス WSDL を使用する、Java プロキシクラスを作成します(Apache Axis を使用した Java プロキシクラスの作成を参照)。 -
Java プロキシクラスをクラスパスに含めます。
-
MyApplicationEncryptDocumentServiceLocator
オブジェクトを、それ自身のコンストラクタを使用して作成します。 -
URL
オブジェクトを作成するには、コンストラクターを使用して、AEM Forms サービス WSDL の定義を指定する文字列値を渡します。SOAP エンドポイント URL の末尾に配置された?blob=dime
を、必ず指定してください。例えば、code language-java https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
-
EncryptDocumentSoapBindingStub
オブジェクトを作成するには、コンストラクターを呼び出し、MyApplicationEncryptDocumentServiceLocator
オブジェクトとURL
オブジェクトを渡します。 -
EncryptDocumentSoapBindingStub
オブジェクトのsetUsername
およびsetPassword
メソッドを呼び出して、AEM Forms のユーザー名とパスワードの値を設定します。code language-java encryptionClientStub.setUsername("administrator"); encryptionClientStub.setPassword("password");
-
MyApplication/EncryptDocument
サービスに送信する PDF ドキュメントを取得するには、java.io.File
オブジェクトを作成します。PDF ドキュメントの場所を指定する文字列値を渡します。 -
javax.activation.DataHandler
オブジェクトを作成するには、コンストラクターを使用して、javax.activation.FileDataSource
オブジェクトを渡します。javax.activation.FileDataSource
オブジェクトを作成するには、コンストラクターを使用して、PDF ドキュメントを表すjava.io.File
オブジェクトを渡します。 -
org.apache.axis.attachments.AttachmentPart
オブジェクトを作成するには、コンストラクターを使用して、javax.activation.DataHandler
オブジェクトを渡します。 -
添付ファイルを添付するには、
EncryptDocumentSoapBindingStub
オブジェクトのaddAttachment
メソッドを呼び出し、org.apache.axis.attachments.AttachmentPart
オブジェクトを渡します。 -
コンストラクターを使用して
BLOB
オブジェクトを作成します。BLOB
オブジェクトに添付ファイルの識別子の値を入力するには、BLOB
オブジェクトのsetAttachmentID
メソッドを呼び出し、添付ファイルの識別子の値を渡します。org.apache.axis.attachments.AttachmentPart
オブジェクトのgetContentId
メソッドを呼び出すと、この値を取得できます。 -
MyApplication/EncryptDocument
プロセスを呼び出すには、EncryptDocumentSoapBindingStub
オブジェクトのinvoke
メソッドを呼び出します。DIME 添付ファイルを含むBLOB
オブジェクトを渡します。このプロセスは、暗号化された PDF ドキュメントをBLOB
オブジェクト内に返します。 -
返された
BLOB
オブジェクトのgetAttachmentID
メソッドを呼び出して、添付ファイルの識別子の値を取得します。このメソッドは、返される添付ファイルの識別子の値を表す文字列値を返します。 -
EncryptDocumentSoapBindingStub
オブジェクトのgetAttachments
メソッドを呼び出して、添付ファイルを取得します。このメソッドは、添付ファイルを表すObjects
の配列を返します。 -
添付ファイル(
Object
配列)を反復処理し、添付ファイルの識別情報の値を使用して、暗号化された PDF ドキュメントを取得します。各要素はorg.apache.axis.attachments.AttachmentPart
オブジェクトです。 -
org.apache.axis.attachments.AttachmentPart
オブジェクトのgetDataHandler
メソッドを呼び出して、添付ファイルに関連付けられたjavax.activation.DataHandler
オブジェクトを取得します。 -
javax.activation.DataHandler
オブジェクトのgetInputStream
メソッドを呼び出して、java.io.FileStream
オブジェクトを取得します。 -
バイト配列を作成し、
java.io.FileStream
オブジェクトのread
メソッドに渡します。このメソッドは、暗号化された PDF ドキュメントを表すデータストリームでバイト配列を入力します。 -
コンストラクタを使用して
java.io.File
オブジェクトを作成します。このオブジェクトは、暗号化された PDF ドキュメントを表します。 -
java.io.FileOutputStream
オブジェクトを作成するには、コンストラクタを使用してjava.io.File
オブジェクトを渡します。 -
java.io.FileOutputStream
オブジェクトのwrite
メソッドを呼び出して、暗号化された PDF ドキュメントを表すデータストリームを含むバイト配列を渡します。
関連トピック
SAML ベースの認証の使用 using-saml-based-authentication
AEM Forms は、サービスを呼び出す際に、様々な web サービス認証モードをサポートしています。そのうちの 1 つは、web サービスの呼び出しで、基本認証ヘッダーを使用してユーザー名とパスワードの値の両方を指定します。AEM Forms は、SAML アサーションベースの認証もサポートしています。クライアントアプリケーションが web サービスを使用して AEM Forms サービスを呼び出すと、クライアントアプリケーションは以下のいずれかの方法で認証情報を提供できます。
- 基本認証の一部として資格情報を渡す
- WS-Security ヘッダーの一部としてユーザー名トークンを渡す
- WS-Security ヘッダーの一部として SAML アサーションを渡す
- WS-Security ヘッダーの一部として Kerberos トークンを渡す
AEM Forms は、標準の証明書ベースの認証をサポートしていませんが、別の形式による証明書ベースの認証をサポートしています。
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 ベースの認証の使用 using-apache-axis-classes-and-saml-based-authentication
Axis ライブラリを使用して作成された Java プロキシクラスによって AEM Forms サービスを呼び出すことができます。(Apache Axis を使用した Java プロキシクラスの作成を参照してください)
SAML ベースの認証を使用する AXIS を使用する場合は、Axis にリクエストと応答ハンドラーを登録します。Apache Axis は、呼び出しリクエストを AEM Forms に送信する前にハンドラーを呼び出します。ハンドラーを登録するには、org.apache.axis.handlers.BasicHandler
を拡張する Java クラスを作成します。
Axis を持つ AssertionHandler の作成
次の AssertionHandler.java
という名前の Java クラスは、org.apache.axis.handlers.BasicHandler
を拡張する Java クラスの例を示します。
public class AssertionHandler extends BasicHandler {
public void invoke(MessageContext ctx) throws AxisFault {
String assertion = (String) ctx.getProperty(LC_ASSERTION);
//no assertion hence nothing to insert
if(assertion == null) return;
try {
MessageElement samlElement = new MessageElement(convertToXML(assertion));
SOAPHeader header = (SOAPHeader) ctx.getRequestMessage().getSOAPHeader();
//Create the wsse:Security element which would contain the SAML element
SOAPElement wsseHeader = header.addChildElement("Security", "wsse", WSSE_NS);
wsseHeader.appendChild(samlElement);
//remove the actor attribute as in LC we do not specify any actor. This would not remove the actor attribute though
//it would only remove it from the soapenv namespace
wsseHeader.getAttributes().removeNamedItem("actor");
} catch (SOAPException e) {
throw new AxisFault("Error occured while adding the assertion to the SOAP Header",e);
}
}
}
ハンドラーを登録
Axis にハンドラーを登録するには、client-config.wsdd ファイルを作成します。既定では、Axis はこの名前のファイルを検索します。次の XML コードは client-config.wsdd ファイルの例です。詳しくは、Axis のドキュメントを参照してください。
<deployment xmlns="https://xml.apache.org/axis/wsdd/" xmlns:java="https://xml.apache.org/axis/wsdd/providers/java">
<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
<globalConfiguration >
<requestFlow >
<handler type="java:com.adobe.idp.um.example.AssertionHandler" />
</requestFlow >
</globalConfiguration >
</deployment>
AEM Forms サービスを呼び出す
次のコード例は、SAML ベースの認証を使用して AEM Forms サービスを呼び出します。
public class ImpersonationExample {
. . .
public void authenticateOnBehalf(String superUsername,String password,
String canonicalName,String domainName) throws UMException, RemoteException{
((org.apache.axis.client.Stub) authenticationManager).setUsername(superUsername);
((org.apache.axis.client.Stub) authenticationManager).setPassword(password);
//Step 1 - Invoke the Auth manager api to get an assertion for the user to be impersonated
AuthResult ar = authenticationManager.getAuthResultOnBehalfOfUser(canonicalName, domainName, null);
String assertion = ar.getAssertion();
//Step 2 - Setting the assertion here to be picked later by the AssertionHandler. Note that stubs are not threadSafe
//hence should not be reused. For this simple example we have made them instance variable but care should be taken
//regarding the thread safety
((javax.xml.rpc.Stub) authorizationManager)._setProperty(AssertionHandler.LC_ASSERTION, assertion);
}
public Role findRole(String roleId) throws UMException, RemoteException{
//This api would be invoked under bob's user rights
return authorizationManager.findRole(roleId);
}
public static void main(String[] args) throws Exception {
ImpersonationExample ie = new ImpersonationExample("http://localhost:5555");
//Get the SAML assertion for the user to impersonate and store it in stub
ie.authenticateOnBehalf(
"administrator", //The Super user which has the required impersonation permission
"password", // Password of the super user as referred above
"bob", //Cannonical name of the user to impersonate
"testdomain" //Domain of the user to impersonate
);
Role r = ie.findRole("BASIC_ROLE_ADMINISTRATOR");
System.out.println("Role "+r.getName());
}
}
.NET クライアントアセンブリと SAML ベースの認証の使用 using-a-net-client-assembly-and-saml-based-authentication
.NET クライアントアセンブリと SAML ベースの認証を使用して、Forms サービスを呼び出すことができます。そのためには、Web サービス拡張機能 3.0 (WSE) を使用する必要があります。WSE を使用する .NET クライアントアセンブリの作成については、DIME を使用する .NET プロジェクトの作成を参照してください。
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 サービスを使用する際の関連事項 related-considerations-when-using-web-services
Web サービスを使用して特定の AEM Forms サービスの操作を呼び出すと、問題が発生することがあります。ここでは、それらの問題を特定し、解決策がある場合は提供することを目的に説明します。
非同期でのサービス操作の呼び出し invoking-service-operations-asynchronously
PDF 生成の htmlToPDF
操作など、AEM Forms サービスの操作を非同期で呼び出そうとすると、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>
この XML ファイルを使用すると、JAX-WS を使用して Java プロキシファイルを作成できます。(JAX-WS を使用した Java プロキシクラスの作成を参照してください。)
この XML ファイルは、- b
コマンドラインオプションを使用して JAX-WS ツール(wsimport.exe)を実行する際に参照します。結合 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
次のリストでは、非同期で呼び出された場合にカスタム結合ファイルを必要とするその他のサービスを示しています。
- PDFG3D
- タスクマネージャー
- Application Manager
- Directory Manager
- Distiller
- Rights Management
- Document Management
J2EE アプリケーションサーバーの違い differences-in-j2ee-application-servers
特定の 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 サービスを使用した複数のサービスへのアクセス accessing-multiple-services-using-web-services
名前空間の競合により、複数のサービス 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 an 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 an 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);
}
}
}
}
I の文字で始まるサービスで無効なプロキシファイルが生成される services-starting-with-the-letter-i-produce-invalid-proxy-files
Microsoft .Net 3.5 および WCF を使用する際、AEM Forms で一部のプロキシクラスの名前が間違って生成されます。この問題は、IBMFilenetContentRepositoryConnector、IDPSchedulerService、または名前が I の文字で始まる他のサービスに対してプロキシクラスが作成された場合に発生します。例えば、名前が IBMFileNetContentRepositoryConnector である場合、BMFileNetContentRepositoryConnectorClient
という名前のクライアントが生成されます。生成されたプロキシクラスには I の文字がありません。