You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Soffid JSON REST Web Services连接器无法更新目标系统对象

Soffid 3对接自定义Web应用Schrift时REST连接器更新数据失败问题

问题描述

我正在尝试将Soffid 3服务器对接我们名为Schrift的自定义Web应用,为此使用了JSON REST Web Services Connector。我先添加了REST Web服务插件,随后配置了类型为JSON/XML/SOAP Rest webservice的代理。
对象拉取功能运行正常,REST连接器可成功连接Web服务并获取账户数据。
问题出在更新数据的场景:比如我尝试锁定某一账户时没有任何响应,我也不清楚正常流程下该触发什么动作。REST连接器应该在何时、以何种方式向托管系统发送更新数据?我没有找到任何REST连接器尝试向托管系统更新对象的日志条目,可能是我操作有误或遗漏了某些配置。

更新1(收到首个答复后排查结果)

  • 核对了代理设置:Read only和Manual account creation均设置为no
  • 该账户原本为非托管类型,我已成功将其类型改为shared后再改为single,全程无报错,当前类型为single
  • 任务队列为空。

另外我也确认了更新方法已配置,更新属性设置正确,updateParams未设置(意味着所有属性都应发送给托管系统)。
但我将账户状态从启用改为禁用时,仍然没有任何响应。
控制台日志中仅能看到如下条目:
14-Sep-2021 13:26:29.708 INFO [BPM-Scheduler:192.168.7.121:1] com.soffid.iam.bpm.job.JobExecutorThread.run No job to execute
我手动运行“Analize impact for changes on Schrift”任务时,执行日志显示:

Changes detected for accounts
=============================
NO CHANGE DETECTED
Changes detected for roles
=============================
NO CHANGE DETECTED

更新2

经过多次尝试我取得了一些进展,现在我修改账户信息后,会生成名为UpdateAccount baklykov@irf.com.ua@Schrift的任务,但任务运行报错。
最开始是415 Unsupported Media Type错误,现在报错信息有变化:

Throws exception updating object : Extensible object [type = account]
  EmployeeEmail: baklykov@irf.com.ua
  IsLockedOut: true (log truncated) ...
caused by Unexpected response, Content-Type: null

更新3

我定位到Soffid的对象更新请求格式有误:所有参数都放在了html请求中,没有写入JSON body。
调研后我找到了方法的Encoding属性,将其设置为application/json。
现在参数会按需求写入JSON body,但新的问题是Soffid会把所有参数都放入JSON body,包括用于定位待更新对象的键参数,我猜测这是目标系统对象仍未更新的原因。
也就是说我的应用期望的请求格式如下:

https://myapp.mysite.com/api/v1/Soffid/Employees?EmployeeEmail=baklykov%40irf.com.ua : 
{"EmployeeLastName":"Baklykov","EmployeeFirstName":"Ivan"}

但Soffid实际发送的请求是:

https://myapp.mysite.com/api/v1/Soffid/Employees: 
{"EmployeeLastName":"Baklykov","EmployeeFirstName":"Ivan","EmployeeEmail":"baklykov@irf.com.ua"}

解决方案

按以下步骤调整配置即可解决当前问题:

  1. 进入Schrift代理的Update方法配置页,找到Filter parameters配置项,将EmployeeEmail添加到该列表中,Soffid会自动把列表内的参数作为URL查询参数拼接,不会写入请求Body。
  2. 如需控制Body内的返回字段,可配置updateParams参数,仅填写需要更新的字段名称(比如EmployeeLastName、EmployeeFirstName、IsLockedOut等),不需要的字段无需填写,即可实现Body与查询参数的拆分。
  3. 针对之前的Content-Type: null报错,确认Schrift接口的响应是否携带了合法的Content-Type响应头,哪怕是200空响应也建议补充Content-Type: application/json响应头,避免Soffid识别异常。
  4. 配置调整完成后重新触发账户更新操作,即可生成符合预期格式的请求。

内容的提问来源于stack exchange,提问作者Ivan Baklykov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:51:01