Oracle BPEL服务器:如何从BPEL Java调用引发错误?

| 我正在通过bpelx:exec从BPEL调用Java类。如果该类能够抛出特定的Fault(BPEL从其合作伙伴链接之一得知),它将大大简化事情。让我们将其称为AdapterFault。 AdapterFault由wsimport和Exception的子类生成。 这是嵌入式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拒绝部署,并抱怨未捕获到Exception。似乎Java标注步骤仅声明BPELFault。 我只能抛出RuntimeException,它将转到CatchAll块而不是catch(AdapterFault)。 有没有一种简单的方法可以从Java调用中引发已检查的故障?     
已邀请:
        如果它是WSIF绑定,则在\“ Exception Handling \”标题下有说明,但是该文章已经很老了。 对于bpelx:exec(我认为),您需要在块中捕获异常并像这样更新变量   尝试{      ... 做事      }   catch(特例例外){      addAuditTrailEntry(\“异常消息:\” + ex.getMessage());      setVariableData(\“ V_CreateServiceException \”,...      }      }     
        只能抛出BPELFault: http://forums.oracle.com/forums/thread.jspa?threadID=547192 但是它可能包含嵌套部分,这是“真实”异常,可以根据需要在Catch块中提取并重新抛出该异常。 我今天已经实施了。 陷阱: 捕获块应捕获系统异常之一,例如remoteFault。 必须将RuntimeFault.wsdl导入(wsdl:import)到伙伴WSDL之一中,否则将抛出一个讨厌的错误,指出未找到BPELFault BPELFault的局限性在于它只能包含代码,消息和详细信息元素,全为纯文本。可以通过bpelFault.setPart(\“ myname \”,obj)将复杂的嵌套故障类型传递给BPEL,但是我不知道如何从BPELFault中提取它,因为BPEL看不到“动态”部分。代码和消息足以满足我的目的。     

要回复问题请先登录注册