Oracle SOA调用x-www-form-urlencoded接口返回400错误问题咨询
解决方案
按优先级从高到低尝试以下操作:
- 优先使用适配器自带的表单构造功能
不要手动拼接表单字符串,在你使用的Oracle BPEL/OSB HTTP适配器的请求设置中,直接选择「表单参数(Form Parameters)」类型,分别新增grant_type和assertion两个参数,填入对应值。适配器会自动生成符合x-www-form-urlencoded格式的请求体,不会触发XML转义,从根源避免该问题。 - 手动替换转义字符
如果必须手动拼接参数,不要把拼接好的表单字符串放在XML类型的变量中存储,改用字符串类型变量。如果变量类型只能为XML,在发送请求前调用替换函数处理转义符:ora:replace($your_form_param_variable, '&', '&') - 修正Content-Type配置
仅在调用to属性设置Content-Type不生效,需要在HTTP适配器的「请求头部」配置项中显式添加Content-Type: application/x-www-form-urlencoded,同时将请求体类型设置为raw string,不要选择XML类型。 - 清除CDATA残留
不要用toCdata方法包裹参数,CDATA仅用于避免XML解析报错,不会阻止最终发送请求时的转义逻辑,还可能导致CDATA标签被带入请求体,进一步干扰参数解析。
验证方法
调整配置后,在服务端抓包或者在BPEL调用节点前新增日志,输出最终发送的原始请求体内容,确认&没有被转义、没有多余的XML标签/CDATA标签残留即可。
内容的提问来源于stack exchange,提问作者rpj123
相关产品推荐
相关产品推荐

