Oracle B2Bは、インバウンドおよびアウトバウンド・メッセージの例外を処理します。この付録では、Oracle B2Bの例外処理、エラー・メッセージおよび構造について説明します。
この付録には次のトピックがあります。
|
注意: Oracle B2Bでは、ebMS 2.0仕様で指定されている様々なエラー・コードがサポートされていません。例外メッセージに対して、Oracle B2Bはエラー・コードをUnknownに設定します。予期されるエラー・コードは次のとおりです。 ValueNotRecognized NotSupported Inconsistent OtherXml DeliveryFailure TimeToLiveExpired SecurityFailure MimeProblem Unknown |
この項では、次のインバウンド・メッセージ・タイプを説明します。
着信リクエスト、レスポンスまたは機能確認メッセージが例外になる場合、デフォルトのエラー処理設定を使用すると次の動作が発生します。
アプリケーションに例外メッセージが送信されます。
例外メッセージは、IP_IN_QUEUEにエンキューされ、受信者名b2berroruserを割り当てられます。エンキューされる例外はipException.xsdに基づいており、エラー・メッセージ(errorTextが短い説明、errorDescriptionが長い説明)およびエラー・コードなどの情報を含みます。
交換の仕様で指定されている場合は、取引パートナに例外メッセージが送信されます。
取引パートナの発信アグリーメントの識別に必要な情報がある場合、例外メッセージは取引パートナに返信されます。このとき使用されるのがB2BHeader.sendExceptionというフラグです。例外メッセージを取引パートナに送信するために必要な情報を受信メッセージから取得できると、このフラグがtrueに設定されます。
Oracle B2Bが、交換またはドキュメント・レイヤーでスローされた例外を捕捉します。
B2Bheader.sendExceptionフラグがtrueに設定されている場合、取引パートナの発信アグリーメントが処理され、取引パートナに例外メッセージが送信されます。
例外メッセージが着信する場合、デフォルトのエラー処理設定を使用すると次の動作が発生します。
元のメッセージは更新されてエラー発生の状態になります。着信例外が処理されて、アプリケーションに正常に配信されます。
着信例外メッセージ自体が例外になる場合、アプリケーションに例外メッセージが送信されます。
例外メッセージは、IP_IN_QUEUEにエンキューされ、受信者名b2berroruserを割り当てられます。エンキューされる例外はipException.xsdに基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。この場合、取引パートナに例外メッセージは返信されません。
例外は、デフォルトのキュー(B2B_IN_QUEUEまたはIP_IN_QUEUE)または例外メッセージ用に構成されたカスタムJMSキューに配信できます。詳細は、第H.4項「エラー・メッセージ配信でのカスタム例外キューの使用」を参照してください。
アウトバウンド・メッセージの送信中にエラーが発生した(たとえば、取引パートナの識別に失敗した)場合、アプリケーションに例外メッセージが送信されます。デフォルトのエラー処理設定を使用すると、例外メッセージはIP_IN_QUEUEにエンキューされ、受信者名b2berroruserを割り当てられます。エンキューされる例外はipException.xsdに基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。
Oracle B2Bの起動時に例外が発生すると、例外メッセージはIP_IN_QUEUEにエンキューされ、受信者名b2berroruserを割り当てられます。エンキューされる例外はipException.xsdに基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。この場合、相関IDは移入されません。
次の事項に注意してください。
アプリケーションに例外メッセージが返信される際のドキュメント・タイプは、元のメッセージのドキュメント・タイプではなくExceptionになります。
アプリケーションに例外メッセージが返信される際、inReplyToMessageIdには相関ID値が移入されます。
例外メッセージの<b2bMessageId>タグ内のデータには解析不能文字が含まれますが、それらは解析されないようにCDATAセクションに格納され、XML解析エラーの発生を防いでいます。
インバウンド例外処理の場合、ビジネス・メッセージが常に作成され、使用可能な情報が移入されます。また、対応するワイヤ・メッセージをポイントします。ワイヤ・メッセージは、更新されてエラー発生の状態になります。アウトバウンド方向の場合、ワイヤ・メッセージが存在しないためビジネス・メッセージのみが更新されます。ただし、伝送エラーが発生した場合、ワイヤ・メッセージ表にエントリが発生します。
エラー・レポートは、ビジネス・メッセージのみを表示するように更新されます。インバウンドおよびアウトバウンド方向で常にビジネス・メッセージが作成されます。
第H.1項および第H.2項で説明したように、デフォルトの設定では、例外キューとしてAQキューIP_IN_QUEUEを使用します。「構成」タブで「JMSキューをデフォルトとして使用」パラメータをtrueに設定することによって、JMSキューを使用するようにB2Bを構成できます。カスタムJMS例外キューを構成し、それを「例外キュー」パラメータの値として選択している場合(第H.4項「エラー・メッセージ配信でのカスタム例外キューの使用」を参照)以外は、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「構成設定」を参照してください。
図H-1に示すように、「パートナ」→「チャネル」タブで、ホスト取引パートナのJMS内部デリバリ・チャネル(JMSキューまたはJMSトピック)を構成することによって、カスタムJMS例外キューを作成できます。
次に、「構成」タブで、「例外キュー」パラメータからキューを選択します。「例外キュー」ドロップダウンに、ホスト取引パートナからのすべてのJMS内部デリバリ・チャネルが表示されます。
このパラメータのNULLデフォルト値は、「JMSキューをデフォルトとして使用」がtrueに設定されている場合はJMSキューB2B_IN_QUEUEが例外キューであり、「JMSキューをデフォルトとして使用」がfalseに設定されている場合はAQキューIP_IN_QUEUEが例外キューであることを意味します。
選択されたカスタム例外キューへの例外メッセージの配信にB2Bが失敗した場合、例外メッセージはデフォルトの内部デリバリ・チャネルに送信されます。
「例外キュー」パラメータの詳細は、表17-1「構成設定」を参照してください。
表H-1では、インバウンド例外処理のシナリオを説明します。
表H-1 インバウンド例外処理のシナリオ
| 例外発生の原因 | Oracle B2Bの処理 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
次の事項に注意してください。
取引パートナに例外が返信されるのは、RosettaNet交換の場合のみです。その他の交換の場合は、それぞれの仕様で規定されているように失敗が報告されます。たとえば、ebMS交換では、定義されているエラー・リストとともに確認が送信されます。AS2交換では、エラーを示す確認が送信されますが、例外の詳細は送信されません。
確認を除くすべてのメッセージ・タイプについて、取引パートナに例外が返信されます。
例H-1に、例外ペイロードipException.xsdの定義を示します。
例H-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>