Oracle BPEL Server: как вызвать сбой из вызова BPEL Java? - PullRequest
1 голос
/ 14 июня 2011

Я вызываю Java-класс из BPEL через bpelx: exec.Это сильно упростило бы ситуацию, если бы класс смог выдать конкретный сбой (известный BPEL по одной из партнерских ссылок).Давайте назовем это AdapterFault.AdapterFault генерируется с помощью wsimport и подклассов Exception.

Вот код в блоке Embedded Java:

Object wfr = getVariableData("inputVariable","request");
Object req = getVariableData("V_CreateServiceRequest","createTNRequestPart");

somepackage.EndpointIterator it =
new somepackage.EndpointIterator();

it.setWFRequest(wfr);
it.setPlatformName("MMSC");
it.setOperationName("createTN");
it.setRequest(req);

Object reply = it.invoke();

setVariableData("V_CreateServiceResponse","createTNResponsePart",reply);

Когда я объявляю метод java выбрасывающим AdapterFault, BPEL отказывается развертывать, жалуясь наИсключение не зачитано.Кажется, что шаг вызова Java только объявляет BPELFault.

Я могу только генерировать RuntimeException, который идет в блок CatchAll вместо catch (AdapterFault).

Есть ли простой способ броситьпроверенный сбой от вызова Java?

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Может быть выдано только BPELFault:

http://forums.oracle.com/forums/thread.jspa?threadID=547192

Но оно может включать вложенную часть, которая является «настоящим» исключением, которое можно извлечь в блоке Catch и повторноброшено, если требуется.

Я реализовал это сегодня.

Получено:

  • Блок Catch должен перехватывать одно из системных исключений, например, remoteFault.
  • RuntimeFault.wsdl должен быть импортирован (wsdl: import) в один из WSDL-партнеров, в противном случае будет выдано неприятное сообщение о том, что BPELFault не найден

BPELFault довольно ограничено в том смысле, что ономожет иметь только элементы кода, сообщения и детали, все текстовые.Передача сложного вложенного типа ошибки в BPEL возможна через bpelFault.setPart («myname», obj), но я не знаю, как извлечь его из BPELFault, поскольку BPEL не видит «динамических» частей.Хотя для моих целей достаточно кода и сообщения.

1 голос
/ 14 июня 2011

Если это привязка WSIF, есть инструкции здесь под заголовком "Обработка исключений", но эта статья довольно старая

Для bpelx: exec (я думаю) вам нужно перехватить исключение внутри блока и обновить переменную как таковую

попробуй {
... делать вещи

} catch (Exex ex) {

addAuditTrailEntry («Сообщение об исключении:» + ex.getMessage ());

setVariableData ( "V_CreateServiceException", ...

}

}

...