Skip Headers
Oracle® Fusion Middleware User's Guide for Oracle B2B
11g Release 1 (11.1.1.6.2)

Part Number E10229-09
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
PDF · Mobi · ePub

G Exception Handling

Oracle B2B handles exceptions for inbound and outbound messages. This appendix describes the exception handling, error messages, and structures for Oracle B2B.

The appendix contains the following topics:

Note:

Oracle B2B does not support the various error codes specified by the ebMS 2.0 specification. For exception messages, Oracle B2B sets the error code to "Unknown". The expected error codes are:

ValueNotRecognized

NotSupported

Inconsistent

OtherXml

DeliveryFailure

TimeToLiveExpired

SecurityFailure

MimeProblem

Unknown

G.1 Inbound Messages

This section describes the following inbound message types:

G.1.1 Request or Response Messages

For an incoming request, response, or functional acknowledgment message that results in an exception, the following actions occur when you use the default error handling settings:

  • An exception message is sent to the application.

    The exception message is enqueued to IP_IN_QUEUE and has the recipient name b2berroruser. The enqueued exception is based on ipException.xsd and contains information such as the error message (errorText has a short description and errorDescription has a longer description) and the error code.

  • An exception message is sent to the trading partner, if mandated by the exchange specification.

    The exception message is sent back to the trading partner only if there is enough information to identify the outgoing trading partner agreement. For this purpose, the flag B2BHeader.sendException is used. The flag is set to true when enough information is extracted from the incoming message to send the exception message to the trading partner.

  • Oracle B2B catches exceptions thrown by exchange or document layers.

    If the B2Bheader.sendException flag is set to true, the outgoing trading partner agreement is processed and an exception message is sent to the trading partner.

G.1.1.1 Inbound ebMS, AS1, and AS2 Messages

If the following types of failure occur while an incoming message is processing, then the receiving trading partner sends a negative acknowledgment to the sender.

  • Decryption fails

  • Verification fails

  • Agreement is not found

  • Document identification fails

  • Document validation fails (and so on)

The negative acknowledgment message has the reference for the original (request) message details to correlate at the sender side.

G.1.2 Acknowledgment Messages

For an incoming acknowledgment message that results in an exception, the following actions occur when you use the default error handling settings:

  • An exception message is sent to the application.

    The exception message is enqueued to IP_IN_QUEUE and has the recipient name b2berroruser. The enqueued exception is based on ipException.xsd and contains information such as error text and error code.

  • No exception message is sent back to the trading partner.

G.1.3 Exception Messages

For an incoming exception message, the following actions occur when you use the default error handling settings:

  • The original message is updated so that it is in an errored state. The incoming exception is processed and delivered to the application normally.

  • If the incoming exception message itself results in an exception, an exception message is sent to the application.

    The exception message is enqueued to IP_IN_QUEUE and has the recipient name b2berroruser. The enqueued exception is based on ipException.xsd and contains information such as error text and error code. No exception message is sent back to the trading partner in this case.

Exceptions can be delivered to default queues (B2B_IN_QUEUE or IP_IN_QUEUE) or custom JMS queues configured for exception messages. See Section G.4, "Using a Custom Exception Queue for Error Message Delivery" for more information.

G.2 Outbound Messages

If an exception occurs while an outbound message is being sent (for example, if the trading partner identification fails), then an exception message is sent to the application. When you use the default error handling settings, the exception message is enqueued to IP_IN_QUEUE and has the recipient name b2berroruser. The enqueued exception is based on ipException.xsd and contains information such as error text and error code.

If an exception occurs during Oracle B2B startup, then an exception message is enqueued to IP_IN_QUEUE and has the recipient name b2berroruser. The enqueued exception is based on ipException.xsd and contains information such as error text and error code. The correlation ID is not populated in this case.

Note the following:

G.3 Using a JMS Queue for Error Message Delivery

The default settings, as described in Section G.1 and Section G.2, use an AQ queue, IP_IN_QUEUE, as the exception queue. You can configure B2B to use a JMS queue by setting the Use JMS Queue as default parameter to true on the Configuration tab. The JMS queue, B2B_IN_QUEUE, becomes the default exception queue unless you have configured a custom JMS exception queue and selected it as the value for the Exception Queue parameter (see Section G.4, "Using a Custom Exception Queue for Error Message Delivery.") In general, B2B sends inbound messages to B2B_IN_QUEUE and polls on B2B_OUT_QUEUE for outbound messages.

Because JMS queues cannot use b2berroruser as the consumer, a JMS message property is used to filter exception messages for error handling. Specifically, when the MSG_TYPE value equals 3 (MSG_TYPE='3'), all exception messages are received by the JMS receiver. (For successful messages, MSG_TYPE='1'.) All JMS message properties are of type string.

See Table 17-1, "Configuration Settings" for more information on the Use JMS Queue as default parameter.

G.4 Using a Custom Exception Queue for Error Message Delivery

You can create custom JMS exception queues by configuring JMS internal delivery channels (JMS queues or topics) for the host trading partner on the Partners > Channels tab, as shown in Figure G-1.

Figure G-1 Creating a Custom Exception Queue

Description of Figure G-1 follows
Description of "Figure G-1 Creating a Custom Exception Queue"

Then select the queue from the Exception Queue parameter on the Configuration tab. The Exception Queue dropdown lists all JMS internal delivery channels from the host trading partner.

A null default value for this parameter means that the JMS queue, B2B_IN_QUEUE, is the exception queue if Use JMS Queue as default is set to true, and that the AQ queue, IP_IN_QUEUE, is the exception queue if Use JMS Queue as default is set to false.

If B2B fails to deliver an exception message to the selected custom exception queue, then the exception message is sent to the default internal delivery channel.

See Table 17-1, "Configuration Settings" for more information on the Exception Queue parameter.

G.5 Inbound Exception Handling Scenarios

Table G-1 describes inbound exception handling scenarios.

Table G-1 Inbound Exception Handling Scenarios

If an exception occurs because. . . Then Oracle B2B does . . .

The identification of the exchange fails or the exchange is not supported

  • Notifies the middleware

  • Updates the wire message as in an errored state

  • Creates a business message in an errored state for the wire message

  • Sends a transport error message to the trading partner if the sendException flag is set in the exchange layer

Message unpacking fails

  • Notifies the middleware

  • Updates the wire message as in an errored state

  • Creates a business message in an errored state for the wire message

Incoming message decoding fails

  • Notifies the middleware

  • Updates the wire message as in an errored state

  • Creates a business message in an errored state for the wire message

  • Sends an exception message to the trading partner, if the sendException flag is set in the exchange layer

The message is duplicated

  • Notifies the middleware

  • Updates the wire message as a duplicated message error

  • Creates a business message as a duplicated message error for the wire message

Document identification fails

  • Notifies the middleware

  • Updates the wire message as in an errored state

  • Creates a business message in an errored state for the wire message

  • Sends an exception message to the trading partner, if the sendException flag is set in the exchange layer

Incoming trading partner agreement processing fails

  • Notifies the middleware

  • Updates the wire message as in an errored state

  • Creates a business message in an errored state for the wire message

  • Sends an exception message to the trading partner, if the sendException flag is set in the exchange layer

Incoming document processing fails

  • Notifies the middleware

  • Updates the wire message as in an errored state

  • Creates a business message in an errored state for the wire message

  • Sends an exception message to the trading partner, if the sendException flag is set in the exchange layer


Note the following:

G.6 Exception Payload Definition

Example G-1 shows the definition for the exception payload, ipException.xsd.

Example G-1 Exception Payload Definition

<?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>