K 例外処理
Oracle B2Bは、インバウンドおよびアウトバウンド・メッセージの例外を処理します。この付録では、Oracle B2Bの例外処理、エラー・メッセージおよび構造について説明します。
この付録の内容は次のとおりです。
ノート:
Oracle B2Bでは、ebMS 2.0仕様で指定されている様々なエラー・コードがサポートされていません。例外メッセージに対して、Oracle B2Bはエラー・コードをUnknownに設定します。予期されるエラー・コードは次のとおりです。
ValueNotRecognized
NotSupported
Inconsistent
OtherXml
DeliveryFailure
TimeToLiveExpired
SecurityFailure
MimeProblem
Unknown
K.1 インバウンド・メッセージ
この項では、インバウンド・メッセージ・タイプを説明します。
K.1.1 リクエスト・メッセージまたはレスポンス・メッセージ
着信リクエスト、レスポンスまたは機能確認メッセージが例外になる場合、デフォルトのエラー処理設定を使用すると次の動作が発生します。
-
アプリケーションに例外メッセージが送信されます。
例外メッセージは、
IP_IN_QUEUE
にエンキューされ、受信者名b2berroruser
を割り当てられます。エンキューされる例外はipException.xsd
に基づいており、エラー・メッセージ(errorText
が短い説明、errorDescription
が長い説明)およびエラー・コードなどの情報を含みます。 -
交換の仕様で指定されている場合は、取引パートナに例外メッセージが送信されます。
取引パートナの発信アグリーメントの識別に必要な情報がある場合、例外メッセージは取引パートナに返信されます。このとき使用されるのが
B2BHeader.sendException
というフラグです。例外メッセージを取引パートナに送信するために必要な情報を受信メッセージから取得できると、このフラグがtrueに設定されます。 -
Oracle B2Bが、交換またはドキュメント・レイヤーでスローされた例外を捕捉します。
B2Bheader.sendException
フラグがtrue
に設定されている場合、取引パートナの発信アグリーメントが処理され、取引パートナに例外メッセージが送信されます。
K.1.1.1 インバウンドebMS、AS1およびAS2メッセージ
着信メッセージの処理中に次のタイプのエラーが発生した場合、受信取引パートナは否定確認を送信者に送信します。
-
復号化に失敗
-
検証に失敗
-
アグリーメントが見つからない
-
ドキュメントの識別に失敗
-
ドキュメントの検証に失敗(など)
否定応答メッセージには、送信者側で相関付けするために、元の(リクエスト)メッセージの詳細の参照があります。
K.1.1.2 AS1メッセージのインバウンド・メッセージ・コンテンツ・タイプ処理
AS1メッセージが電子メール・サーバーから取得され、正しく処理されるためには、インバウンド・メッセージ・コンテンツ・タイプが次のいずれかである必要があります。
-
application/xml
-
enveloped
-
pkcs7-mime
-
ipart/report
-
multipart/signed
-
application/edi
たとえば、次のシナリオを考えます。
Sender: Acme admin@slc05hzo.us.mydomain.com Receiver: GlobalChips joe@slc05hzo.us.mydomain.com Outbound channel: joe@slc05hzo.us.mydomain.com Listening channel is listening on admin@slc05hzo.us.mydomain.com
インバウンド・ペイロードの送信が、ペイロードを添付としてadmin@slc05hzo.us.mydomain.comに電子メールを送信することによって行われる場合、レポートには次のエラー・メッセージが表示されます。
The error info was as follows, see "Inbound failed.jpg": Error Code: B2B-51566 Error Description: Machine Info: (slc05hzo) Description: Parse stream error
K.1.2 確認メッセージ
着信確認メッセージが例外になる場合、デフォルトのエラー処理設定を使用すると次の動作が発生します。
-
アプリケーションに例外メッセージが送信されます。
例外メッセージは、
IP_IN_QUEUE
にエンキューされ、受信者名b2berroruser
を割り当てられます。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。 -
取引パートナに例外メッセージは返信されません。
K.1.3 例外メッセージ
例外メッセージが着信する場合、デフォルトのエラー処理設定を使用すると次の動作が発生します。
-
元のメッセージは更新されてエラー発生の状態になります。着信例外が処理されて、アプリケーションに正常に配信されます。
-
着信例外メッセージ自体が例外になる場合、アプリケーションに例外メッセージが送信されます。
例外メッセージは、
IP_IN_QUEUE
にエンキューされ、受信者名b2berroruser
を割り当てられます。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。この場合、取引パートナに例外メッセージは返信されません。
例外は、デフォルトのキュー(B2B_IN_QUEUE
またはIP_IN_QUEUE
)または例外メッセージ用に構成されたカスタムJMSキューに配信できます。詳細は、エラー・メッセージ配信でのカスタム例外キューの使用を参照してください。
K.2 アウトバウンド・メッセージ
アウトバウンド・メッセージの送信中にエラーが発生した(たとえば、取引パートナの識別に失敗した)場合、アプリケーションに例外メッセージが送信されます。
デフォルトのエラー処理設定を使用すると、例外メッセージはIP_IN_QUEUE
にエンキューされ、受信者名b2berroruser
を割り当てられます。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。
Oracle B2Bの起動時に例外が発生すると、例外メッセージはIP_IN_QUEUE
にエンキューされ、受信者名b2berroruser
を割り当てられます。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。この場合、相関IDは移入されません。
次の点に注意してください。
-
アプリケーションに例外メッセージが返信される際のドキュメント・タイプは、元のメッセージのドキュメント・タイプではなく
Exception
になります。 -
アプリケーションに例外メッセージが返信される際、
inReplyToMessageId
には相関ID値が移入されます。 -
例外メッセージの
<b2bMessageId>
タグ内のデータには解析不能文字が含まれますが、それらは解析されないようにCDATAセクションに格納され、XML解析エラーの発生を防いでいます。 -
インバウンド例外処理の場合、ビジネス・メッセージが常に作成され、使用可能な情報が移入されます。また、対応するワイヤ・メッセージをポイントします。ワイヤ・メッセージは、更新されてエラー発生の状態になります。アウトバウンド方向の場合、ワイヤ・メッセージが存在しないためビジネス・メッセージのみが更新されます。ただし、伝送エラーが発生した場合、ワイヤ・メッセージ表にエントリが発生します。
-
エラー・レポートは、ビジネス・メッセージのみを表示するように更新されます。インバウンドおよびアウトバウンド方向で常にビジネス・メッセージが作成されます。
K.3 エラー・メッセージ配信でのJMSキューの使用
「構成」タブで「JMSキューをデフォルトとして使用」パラメータをtrueに設定することによって、JMSキューを使用するようにB2Bを構成できます。
インバウンド・メッセージおよびアウトバウンド・メッセージの説明にあるように、デフォルトの設定では例外キューとしてAQキューIP_IN_QUEUE
を使用します。デフォルトの例外キューは、カスタムJMS例外キューを構成して「例外キュー」
パラメータ値として選択(参照: 「エラー・メッセージ配信でのカスタム例外キューの使用」)していないかぎり、JMSキューB2B_IN_QUEUEになります。一般的に、B2Bでは、インバウンド・メッセージをB2B_IN_QUEUE
に送信し、アウトバウンド・メッセージについてB2B_OUT_QUEUE
をポーリングします。
JMSキューではb2berroruserをコンシューマとして使用できないため、エラー処理で例外メッセージをフィルタ処理するために、JMSメッセージ・プロパティが使用されます。具体的には、MSG_TYPE
値が3である(MSG_TYPE='3'
)場合、すべての例外メッセージはJMSレシーバによって受信されます。(正常なメッセージの場合、MSG_TYPE='1'
。)すべてのJMSメッセージ・プロパティのタイプはstring
です。
「JMSキューをデフォルトとして使用」パラメータの詳細は、表17-1を参照してください。
K.4 エラー・メッセージ配信でのカスタム例外キューの使用
この項には、カスタムJMS例外キューを作成するステップがあります。
カスタムJMS例外キューを作成するには、次のステップを実行してください。
選択されたカスタム例外キューへの例外メッセージの配信にB2Bが失敗した場合、例外メッセージはデフォルトの内部デリバリ・チャネルに送信されます。
「例外キュー」パラメータの詳細は、表17-1を参照してください。
K.5 インバウンド例外処理のシナリオ
この項では、インバウンド例外処理のシナリオを説明します。
表K-1 インバウンド例外処理のシナリオ
例外発生の原因 | Oracle B2Bの処理 |
---|---|
交換の識別に失敗、または交換が未サポート |
|
メッセージの解凍に失敗 |
|
着信メッセージのデコードに失敗 |
|
メッセージが重複 |
|
ドキュメントの識別に失敗 |
|
着信取引パートナ・アグリーメントの処理に失敗 |
|
着信ドキュメントの処理に失敗 |
|
次の点に注意してください。
-
取引パートナに例外が返信されるのは、RosettaNet交換の場合のみです。その他の交換の場合は、それぞれの仕様で規定されているように失敗が報告されます。たとえば、ebMS交換では、定義されているエラー・リストとともに確認が送信されます。AS2交換では、エラーを示す確認が送信されますが、例外の詳細は送信されません。
-
確認を除くすべてのメッセージ・タイプについて、取引パートナに例外が返信されます。
K.6 例外ペイロード定義
この項では、例外ペイロードipException.xsd
の定義を示します。
例K-1 例外ペイロード定義
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://integration.oracle.com/B2B/Exception" targetNamespace="http://integration.oracle.com/B2B/Exception"> <xs:element name="Exception"> <!--xs:complexType name="Exception"--> <xs:complexType> <xs:sequence> <xs:element ref="correlationId"/> <xs:element ref="b2bMessageId"/> <xs:element ref="errorCode"/> <xs:element ref="errorText"/> <xs:element ref="errorDescription"/> <xs:element ref="errorSeverity"/> <xs:element ref="errorDetails" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="correlationId" type="xs:string"/> <xs:element name="b2bMessageId" type="xs:string"/> <xs:element name="errorCode" type="xs:string"/> <xs:element name="errorText" type="xs:string"/> <xs:element name="errorDescription" type="xs:string"/> <xs:element name="errorSeverity" type="xs:string"/> <xs:element name="errorDetails"> <xs:complexType> <xs:sequence> <xs:element ref="parameter" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="parameter"> <xs:complexType> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="value" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema>
K.7 AS4ベースのメッセージ・エラー
この項では、SOAPフォルトとebMSエラーを含む、AS4ベースのメッセージのエラーについて説明します。
SOAPフォルト
受信したパートナから送信者に、SOAPフォルトとして処理されたメッセージのエラーがレポートされます。エラー・メッセージは、同じ接続を使用して、送信したMSHに送信されます。また、バックエンド・アプリケーションにもエラーが通知されます。
ebMSエラー
表K-2に示すエラー・コードは、AS4の追加機能をサポートするために、ebMS V3のエラー・コードのセットに追加されました。
表K-2 ebMS V3のエラー・コード
エラー・コード | 簡単な説明 | 説明またはセマンティクス |
---|---|---|
EBMS:0301 |
MissingReceipt |
このエラーを生成しているMSHによって以前送信されたメッセージの受信確認を受け取っていません。 |
EBMS:0302 |
InvalidReceipt |
このエラーを生成しているMSHによって以前送信されたメッセージの受信確認を受け取りましたが、そのコンテンツがメッセージのコンテンツと一致しません。たとえば、一部を確認していないか、関連付けられているダイジェストが署名のダイジェストと一致しません(NRRについて)。 |
EBMS:0303 |
Decompression-Failure |
解凍中にエラーが発生しました。 |