WEB アプリケーション用に LOTUS DOMINO をプログラミングする
実装コードWeb サービスの実装コードは Web サービス自体のパブリッククラスに置かれます。
Java の宣言と初期化Java コードには、標準 Java パッケージには定義されていない障害データ型、XML Schema データ型、およびホルダークラスに対する次の import が含まれることがあります。
Session.getAgentContext() は Web サービスのコンテキストを取得します。次の AgentContext プロパティは Web サービスに適用されます。getCurrentAgent() はカレント Web サービスを取得します。getCurrentDatabase() はカレントデータベースを取得します。getCurrentAgent() の場合、エージェントプロパティgetName()、getOwner()、getCommonOwner()、getOnBehalfOf()、getComment()、getHttpURL()、getNotesURL()、getParent()、および getLockHolders() がカレント Web サービスに反映されます。
System.out はサーバーコンソールおよびサーバーの log.nsf に出力します。
LotusScript のオプション、宣言、初期化(Options) には次の INCLUDE ステートメントが含まれることがあります。インクルードされるファイルでは、WSDL 文書のデータ型にマップするデータ型を定義します。
NotesSession オブジェクトの設定など、呼び出す操作の前に常に実行されるコードには実装クラスで Sub NEW を使用します。新しい NotesSession オブジェクトを作成すると、Lotus Domino セッションが取得されます。Sub NEW のシグネチャには引数がないことがあります。同じ制限は、Web サービスメソッドが受け取るか返すすべてのクラスの Sub NEW に適用されます (他のクラス内にあるクラスを含む)。
次の NotesSession プロパティは Web サービスに適用されます。CurrentAgent はカレント Web サービスを取得します。CurrentDatabase はカレントデータベースを取得します。CurrentAgent の場合、NotesAgent プロパティ Name、Owner、CommonOwner、OnBehalfOf、Comment、HttpURL、NotesURL、Parent、および LockHolders がカレント Web サービスに適用されます。
Messagebox はサーバーコンソールおよびサーバーの log.nsf に出力します。
lsxsd.lss ファイルでは、BOOLEAN_HOLDER、BOOLEANARRAY_HOLDER、BYTE_HOLDER、BYTEARRAY_HOLDER、DOUBLE_HOLDER、DOUBLEARRAY_HOLDER、INTEGER_HOLDER、INTEGERARRAY_HOLDER、LONG_HOLDER、LONGARRAY_HOLDER、NOTESDOMELEMENTNODE_HOLDER、NOTESDOMELEMENTNODEARRAY_HOLDER、SINGLE_HOLDER、SINGLEARRAY_HOLDER、STRING_HOLDER、STRINGARRAY_HOLDER、VARIANT_HOLDER、VARIANTARRAY_HOLDER の各クラスを定義します。これらのクラスは、出力および入出力パラメータに使用されます。これらのクラスには、取得と設定が可能なパブリック変数「Value」があります。また、lsxsd.lss では、XML Schema データ型のクラスとホルダークラスも定義します (XSD_BOOLEAN と XSD_BOOLEAN_HOLDER など)。後述の「データの説明」の XSD データ型を参照してください。
データの説明次の基本データ型は、WSDL 文書と対応する Java または LotusScript のコード間で一対一にマップします。特に示されていない限り、LotusScript XSD データ型は lsxsd.lss に定義されており、次の関数とサブルーチンを備えています。
Call SetValueFromString(string)
XSD_BASE64BINARY と XSD_HEXBINARY クラスの情報は NotesStream 形式で渡されます。これらのクラスには、次の関数とサブルーチンがあります。
Call SetValueFromNotesStream(NotesStream)
特に示されていない限り、データ型は双方向にマップされます (WSDL 文書とコード間)。
配列は WSDL で次の属性とサブ要素を持つ XML Schema <complexType> エンティティ要素にマップされます。
Lotus Domino 8 の場合:
配列は、主にエンコードされたサービスの場合、つまり「RPC/エンコード」の SOAP メッセージ形式の Web サービスの場合は、上記で説明されている「soapenc:Array」パターンにマップされます。
「リテラル」サービス (つまり、RPC/リテラル、Doc/リテラル、またはラップの SOAP メッセージ形式) の場合は、配列は「リテラル」配列 (「maxOccurs」属性の値が「unbounded」で、単一の <element> を持つ <complexType>) にマップされます。次はその例です。
<wsdl:types> <schema targetNamespace="urn:DefaultNamespace" xmlns="http://www.w3.org/2001/XMLSchema"> <complexType name="xsd_intArray"> <element name="item" minOccurs="0" maxOccurs="unbounded" type="xsd:int"/> </complexType> </schema> </wsdl:types> また、ここで示す「リテラル」形式は、インデックス付きメンバーアクセサを持つ Java Web サービス値型配列の WSDL でも生成されます。
初期化されていない配列 Lotus Domino 8.0 では、SOAP 要求 (Web サービスプロバイダの場合) または SOAP 応答 (Web サービスコンシューマの場合) 内の空の配列は、非直列化され次の配列になります。
クラス 通常、Web サービス操作との間で渡すクラス (値型とも呼ばれます) は、WSDL で各公開データメンバーを表すサブ要素を持つ XML Schema <complexType> 要素にマップされます。たとえば、
Java の場合、公開クラスのデータメンバーはパブリックであるメンバー、または Java Bean の特性である public get および set メソッドを持つメンバーです。認識可能な Java 値型クラスには、デフォルトのパブリックコンストラクタ (引数なし) が必要です。
列挙 列挙は、WSDL で次の特性を持つ XML Schema <simpleType> 要素にマップされます。
メモ Java 列挙パターンでは、Java Bean set: メソッドを使用できません。このメソッドは 1 つのパラメータを持つ setValue メソッドであり、パラメータの型は getValue メソッドの戻り値の型に一致します。
障害 障害では、呼び出し元にエラー状態を伝達します。任意の Web サービスメソッドから発信できます。障害は WSDL コントラクトに明示的であったり (WSDL 文書でサービス操作に指定)、WSDL コントラクトに暗黙的であったりします (サービスメソッドのシグネチャの一部として実装のみ)。
明示的障害は、<wsdl:input> および <wsdl:output> 要素と共に、操作に指定される省略可能な <wsdl:fault> 要素として WSDL に表されます。たとえば、
<wsdl:operation name="getStockQuote"> <wsdl:input message="getStockQuoteRequest"/> <wsdl:output message="getStockQuoteResponse"/> <wsdl:fault name="InvalidSymbolFault" message="InvalidSymbolFaultMessage"/> </wsdl:operation>
操作の <wsdl:input> または <wsdl:output> 要素と同様、<wsdl:fault> 要素は message 属性によって型が設定されます。
したがって、WSDL 障害は関連メッセージの「パート」型により、LotusScript または Java の実装のクラスにマップされます。このクラスは、WS_FAULT (LotusScript) または lotus.domino.types.Fault (Java) のサブクラスです。
実装の値型 (前述の「クラス」を参照) が関連する WSDL 構成体 (通常は WSDL <complexType>) にマップされるのと同様に、この実装の障害サブクラスは WSDL 障害の関連メッセージに定義されたデータメンバーにマップされます。
たとえば、次の WSDL complexType があるとします (ここでは、上の例の「InvalidSymbolFaultMessage」の型として指定)。
public class InvalidSymbolFaultMessage extends lotus.domino.types.Fault { private java.lang.String tickerSymbol; private int applicationCode; public InvalidSymbolFaultMessage() { } public InvalidSymbolFaultMessage(java.lang.String tickerSymbol, int applicationCode) { this.tickerSymbol = tickerSymbol; this.applicationCode = applicationCode; } public java.lang.String getTickerSymbol() { return this.tickerSymbol; } public int getApplicationCode() { return this.applicationCode; } // helper methods? }
Web サービスの操作が呼び出し元にサービス固有の追加データを送信する必要がない場合、明示的な WSDL 障害は必要なく、暗黙的障害で十分です。
暗黙的障害は常に使用でき、Web サービスフレームワークによってさまざまな呼び出しエラーに対して発行されます。しかし、実装 PortType クラスに公開されたサービスメソッドによって発行されることもあります。
また、実装メソッド署名への暗黙的障害の追加または削除は、Web サービスコントラクトの変更とは扱われないため、それ自体では Web サービスの保存時に WSDL は再生成されません。
サービスメソッドの障害処理は明示的および暗黙的障害のどちらに対しても同様に行われます。例ですべての識別特性は太字になっています。
リスト XML Schema の list 型は <simpleType> の形式の 1 つであり、その値はスペースで区切られた 1 つのリストとして表されます。たとえば、次のような野菜があるとします (各トークンはスペース文字で区切られています)。
ネームスペース XML Schema では、ネームスペース修飾子を使用して、名前が似ているが定義が異なる構成体 (特にデータ型) を区別します。次に例を示します。
Lotus Domino Java Web サービスの実装ではマップされたネームスペースを Java パッケージとして表します。したがって、上記の「telephone」データ型は次の Java パッケージとクラスにマップされます。
たとえば、上記の「telephone」データ型は次のように WSDL から LotusScript にインポートされます。
Const n1 = "MyAddressBook" 'string constant value can be many characters long Class Telephone_n1 _ End Class
また、次のように「DefaultNamespace」定数を使用して指定することもできます。
Const DefaultNamespace = "MyAddressBook" Class Telephone 'no suffix specified _ End Class
未サポート構成体 このリリースでは、次の WSDL または XML Schema 構成体で、LotusScript または Java へのマッピングは制限されているかサポートされていません。また、Designer の「WSDL のインポート」機能では拒否 (指定した場合は無視) されます。