5月
14
结论
先说结论,OIM无法动态展示预配的错误信息,也就是说,错误信息是固定的,写死的,具体原因我下面会讲到。
过程
OIM同步数据是通过task进行同步,task可以关联一系列的Response,Response可以通过design console进行配置,如图:

错误信息就定义在Description
这个字段中,那错误如何跟这些定义关联在一起的?在java中通过抛出异常的方式,connector会根据异常的类型选择对应的response,对应的规则就是根据Response名称转java类对应,比如程序中如果抛出了一个ConnectorException
那么就对应配置中的CONNECTOR_EXCEPTION
,通过反编译webservice connector的源码,我们可以发现webservice支持以下几种exception
public Uid create(ObjectClass objClass, Set<Attribute> attrs, OperationOptions op) { UserAccount userAccDetails = ConversionUtil.convertToUserDetails(attrs, this._config.getPasscode()); this._log.info("Invoking create operation on {0}", new Object[] { attrs }); try { String createReply = this._soaServicePort.create(objClass.getObjectClassValue(), userAccDetails); Uid uidVal = new Uid(createReply); this._log.ok("Create Success, Uid - {0}", new Object[] { uidVal }); return uidVal; } catch (AlreadyExistsException_Exception e) { this._log.error(e, "Account already exists", new Object[0]); throw new AlreadyExistsException(e); } catch (ConnectionBrokenException_Exception e) { this._log.error(e, "Unable to reach target webservice endpoint", new Object[0]); throw new ConnectionBrokenException("Connection to target webservice is broken", e); } catch (Exception e) { this._log.error(e, "Error during create", new Object[0]); throw new ConnectorException("Error during create", e); } }
- AlreadyExistsException
- ConnectionBrokenException
- ConnectorException
根据代码逻辑也可以知道,所有自定义的消息都进入到了ConnectorException中,当发生错误时,界面显示如下:

跟我们定义的错误描述是一致的。在OIM的源码中,我们也可以发现支持的异常类型,也不多

OIM提供了这些类型的异常,具体支持程度取决于connector的实现。
修改
目前是不能在designconsole上直接进行修改,修改报错

- 方案1
如果你的connector还没创建,可以修改template/ConnectorTemplate.template
中的描述
<TaskResponse name="ERROR" repo-type="RDBMS"> <RSC_DESC>Error Occurred</RSC_DESC> <RSC_UPDATE>1350032124000</RSC_UPDATE> <STA_KEY Status="R"></STA_KEY> </TaskResponse> <TaskResponse name="SUCCESS" repo-type="RDBMS"> <RSC_DESC>Child Form attribute value Deleted</RSC_DESC> <RSC_UPDATE>1350032124000</RSC_UPDATE> <STA_KEY Status="C"></STA_KEY> </TaskResponse> <TaskResponse name="UNKNOWN" repo-type="RDBMS"> <RSC_DESC>An unknown response was received</RSC_DESC> <RSC_UPDATE>1350032124000</RSC_UPDATE> <STA_KEY Status="R"></STA_KEY> </TaskResponse> <TaskResponse repo-type="RDBMS" name="UNKNOWN_UID"> <RSC_DESC>Object does not exist in the target</RSC_DESC> <RSC_UPDATE>1350032124000</RSC_UPDATE> <STA_KEY Status="R"/> </TaskResponse> <TaskResponse repo-type="RDBMS" name="CONNECTION_BROKEN"> <RSC_DESC>Unable to connect to target webservice endpoint</RSC_DESC> <RSC_UPDATE>1350032124000</RSC_UPDATE> <STA_KEY Status="R"/> </TaskResponse> <TaskResponse repo-type="RDBMS" name="CONNECTOR_EXCEPTION"> <RSC_DESC>Unable to perform operation on the target</RSC_DESC> <RSC_UPDATE>1350032124000</RSC_UPDATE> <STA_KEY Status="R"/> </TaskResponse>
- 方案2
这个数据保存在数据库rsc
表中的rsc_desc
字段上,你也可以统一执行update语句,将所有相同的描述信息更新。但这个方案没试过,最好在测试环境中试。
Address: https://zhengjianfeng.cn/?p=354
no comment untill now